首页 百科知识 关系模型的主码采用啥格式

关系模型的主码采用啥格式

时间:2022-10-12 百科知识 版权反馈
【摘要】:概念结构需要转换成为选定DBMS支持的数据模型,并对其进行优化,从而生成DBS的逻辑结构(模式),进而设计用户模式(外模式)。库存和工作均是一对多联系,分别向零件和职工归并。即,数据完整性是指数据的正确性、一致性和相容性。具体包括实体完整性、参照完整性和用户定义完整性。数据完整性规则就是为了确保数据完整性,设立的一系列约束。

1.4 逻辑结构设计

概念结构(E-R图)需要转换成为选定DBMS支持的数据模型,并对其进行优化,从而生成DBS的逻辑结构(模式),进而设计用户模式(外模式)。

1.4.1 关系与关系模式

集合A1,…,An的笛卡儿积为:

A1×…×An={(a1,…,an)|ai∈Ai,i=1,…,n}

其中,(a1,…,an)叫元组(Tuple),用t表示;ai叫分量,用t[Ai]表示。

关系R:笛卡儿积的子集。关系由关系模式和关系的值组成。

关系模式R(A1,…,An):组成关系的所有属性名的集合。例如:职工(姓名,性别)。

关系的值是所有元组的集合。例如:{(“张三”,“女”),(“李四”,“男”)}。

【例1.16】已知姓名和性别的域分别为{“张三”,“李四”}和{“男”,“女”},则姓名和性别的笛卡儿积和关系(设为:职工)如图1.25所示。

img30

图1.25 笛卡儿积与关系

▲思考:在“例1.16中”,添加年龄及其域{16,18,19},则姓名×性别×年龄=?姓名×性别×年龄的元组有多少个?请构造一个有意义的关系。

1.4.2 E-R图向关系模型的转换

E-R图转换为关系模式的规则如下:

一个实体转换为一个关系模式。实体名就是关系模式名;实体的属性就是关系模式的属性;实体的PK就是关系模式的PK。

三种联系(一对一、一对多和多对多)的转换规则不尽相同。

(1)多对多联系转换。

一个多对多联系转换为一个独立的关系模式。联系名就是关系模式名;关系模式的属性是由与联系相关联的实体的PK以及联系本身的属性组成;关系模式的PK是与联系相关联的实体的PK的组合。

【例1.17】把“例1.14”的E-R图转换为关系模式,并用下划线标注PK。

分析:学生和课程分别转换为一个关系模式,转换后PK不变;选课是多对多联系,转换为一个关系模式,转换后的PK是(学号,课程号)。即,

学生(学号,姓名,性别,年龄)

课程(课程号,课程名,学分)

选课(学号,课程号,成绩)

(2)一对多联系转换。

一对多联系不再转换为一个独立的关系模式,而是与多端的实体进行归并。多端的实体转换后的关系模式的属性是由多端实体的属性、一端实体的PK以及联系本身的属性共同组成,关系模式的PK同多端实体。

【例1.18】把“例1.13”的E-R图转换为关系模式,并用下划线标注PK。

分析:学院和教师分别转换为一个关系模式,转换后PK不变;聘用是一对多联系,所以与教师进行合并,转换后的PK同教师。即,

学院(院号,院名,院址,电话)

教师(工号,院号,姓名,性别,E-mail)

(3)一对一联系转换。

一对一联系不再转换为一个独立的关系模式,而是与任意一端的实体进行归并。归并端的实体转换后的关系模式的属性是由本一端实体的属性、另一端实体的键以及联系本身的属性共同组成,关系模式的PK同归并端实体。

【例1.19】把“例1.12”的E-R图转换为关系模式,并用下划线标注PK。

分析:班级和班长分别转换为一个关系模式,转换后PK不变;任职是一对一联系,所以与任意一端实体(班级或者班长)进行归并,转换后的PK同选定一端实体。

班级(班号,学号,班名,人数,任职期限)

班长(学号,姓名,年龄,性别)或者

班级(班号,班名,人数)

班长(学号,班号,姓名,年龄,性别,任职期限)

【例1.20】把“例1.15”的E-R图转换为关系模式,并用下划线标注PK。

分析:零件、仓库和职工分别转换为一个关系模式,转换后的PK不变。库存和工作均是一对多联系,分别向零件和职工归并。即,

仓库(库号,面积,电话)

零件(零件号,库号,零件名,规格,单价,库存量)

职工(工号,库号,姓名,年龄,职称,合同期)

综上所述,利用转换规则,可以方便地把E-R图转换为关系模式的集合,即逻辑结构。

1.4.3 数据完整性

1.4.3.1 数据完整性规则

数据完整性是指数据的正确性、一致性和相容性。具体包括实体完整性、参照完整性和用户定义完整性。数据完整性规则就是为了确保数据完整性,设立的一系列约束。

(1)实体完整性:如果属性(属性组)A是主属性,则A的取值不能为空。

例如:对于学生(学号,姓名,性别,年龄),主属性学号的取值非空且唯一。

(2)参照完整性:如果X是关系R的外键,且X是关系S的主键,则关系R中X的取值要么为空值,要么为S的主键的值。

外键:如果X不是关系R的主键,但却是关系S的主键,则称X是R的外键(Foreign Key,FK)。其中,R是外键表,S是主键表。

例如:对于学生(学号,姓名,性别,年龄)、课程(课程号,课程名,学分)和选修(学号,课程号,成绩),则学号是选课的FK,学号是学生的PK,即选课中学号的取值必须是学生中的学号的值。课程号是选课的FK,课程号是课程的PK,选课中课程号的取值必须是课程中的课程号的值。

(3)用户定义完整性:根据DBS的应用需求,用户自己规定的一系列约束。

例如:对于学生(学号,姓名,性别,年龄)和选修(学号,课程号,成绩),则性别只能是男或女;年龄的取值为6到96;成绩的取值为0到100等。

1.4.3.2 数据完整性控制机制

完整性控制机制应该具备定义、检查和违约处理等功能。

(1)定义:提供定义数据库完整性约束的功能及其接口

(2)检查:提供检查插入、修改和删除等操作是否违背了完整性约束的功能。

(3)违约处理:对于破坏完整性的违约操作,提供相应的违约处理能力。

常用的违约处理如下(违约处理针对插入、修改和删除等操作):

(1)置空:对于违约操作所涉及的数据,把数据置为空值。

例如:对于学生(学号,姓名,性别,年龄,专业号)和专业(专业号,专业名,类别,简介),如果在专业中需要删除专业号为Z0101的专业,但是在学生中存在该专业的学生,则需要在学生中把该专业的学生的专业号置空,表示未定专业。

(2)拒绝更新:对操作仅提供违约信息,并拒绝执行操作。

例如:对于学生(学号,姓名,性别,年龄)和选修(学号,课程号,成绩),如果在学生中需要删除学号为S2012010101的学生,而选课中存在该生的选课,所以拒绝操作。

(3)受限更新:对操作不是直接拒绝,而是根据实际情况决定是否接受操作。

例如:对于学生(学号,姓名,性别,年龄)和选修(学号,课程号,成绩),如果在学生中需要删除学号为S2012020202的学生,而选课中该生无选课,所以接受操作。

(4)级联更新:对操作不是直接接受,而是变违约为非违约,并接受操作。

例如:对于学生(学号,姓名,性别,年龄)和选修(学号,课程号,成绩),如果在学生中需要删除学号为S2012010101的学生,而选课中存在该生的选课,所以在学生中删除学号为S2012010101的学生的同时,级联删除选课中该生的所有选课。

▲思考1:知道学生、课程和选课关系已经建立了相应的实体、参照和用户定义约束,如果需要删除学生中的一个元组,请给出比较完整的处理策略。

▲思考2:知道学生、课程和选课关系已经建立了相应的实体、参照和用户定义约束,如果在选课关系插入一个新元组,请给出比较完整的处理策略。

▲思考3:理解拒绝更新、受限更新和级联更新的优缺点、区别与联系。

目前,比较流行的RDBMS均提供了完整性控制机制,用于保证数据库的完整性。

1.4.4 关系模式规范化

对于关系数据库,由于数据之间通常存在一定的联系,从而导致属性之间存在一定的依赖和约束关系,因此需要通过规范化消除依赖。例如:对于关系模式SInfo(学号,姓名,性别,课程号,课程名,成绩),姓名依赖于学号,成绩依赖于学号和课程号等。

1.4.4.1 函数依赖

已知关系模式R(U),X和Y是U的子集,对于R(U)的任意关系R,R中的任意元组t1,t2,若t1[X]=t2[X],则t1[Y]=t2[Y],表明X确定Y或Y依赖于X。记作:X→Y。

如果X不确定Y,则记为:X→Y。

等价描述:R(U)的任意关系R的任意元组t1,t2,若t1[Y]≠t2[Y],则t1[X]≠t2[X]。

例如:关系模式SInfo(学号,姓名,性别,生日,课程号,课程名,成绩),则

学号→姓名;(学号,课程号)→成绩;SName→生日。

如果X→Y,且Y≤X,则称X→Y是平凡依赖,即集合的任意子集均平凡依赖于自身。平凡依赖必然成立。函数依赖的集合称为函数依赖集(记作F)。

常用的函数依赖包括:完全依赖、部分依赖和传递依赖。

(1)完全依赖:对于关系模式R(U,F),如果X→Y,并且对于X的任何一个真子集X’,都满足X’→ Y(即Y不依赖于X的任意真子集),则称Y完全依赖于X,记作X─F→Y;否则,Y部分依赖于X,记作X─P→Y。

例如:对于关系模式SC(学号,课程号,成绩),则(学号,课程号)─F→成绩。对于R(A,B,C,D,E),如果F={A→C,AB→D,AB→E,C→E},则AB─P→C;AB─F→D;AB─P→E。

CK的等价定义:设X是关系模式R(U,F)的属性组,如果X─F→U,则X是CK。

例如:上例中,(学号,课程号)是SC的CK。AB是R(A,B,C,D,E)的CK。

(2)传递依赖:对于关系模式R(U,F)中,如果X→Y,Y→Z,并且Y→ X,则称Z传递依赖于X,记为:X─T→Z。

例如:在关系模式SInfo(学号,姓名,院号,院名,院长)中,则学号─T→院长。

1.4.4.2 关系模式规范化

关系模式规范化是利用关系规范化理论,对关系模式进行分解和优化,从而消除冗余数据和数据之间的依赖关系,使系统达到规范要求,并在一定程度上解决插入异常、修改异常、删除异常和数据冗余等问题。

范式是满足系统规范要求的关系模式的集合。即范式是规范化的关系模式。

常用范式:第一范式(First Normal Form,1NF)、第二范式(2NF)、第三范式(3NF)、BC范式(Boyce Codd Normal Form,BCNF)、第四范式(4NF)和第五范式(5NF)等。其中,1NF、2NF和3NF是关系规范化理论的核心。R满足第n范式,记为R∈nNF。

常用范式之间的联系如图1.26所示。

img31

img32

图1.26 范式关系图

(1)1NF:如果关系模式R的属性都是不可分的属性。

(2)2NF:如果R∈1NF,且R的每个非主属性都完全依赖于R的CK。

等价描述:对于R∈1NF,如果存在非主属性部分依赖于R的CK,则R∈2NF。

(3)3NF:如果R∈2NF,且R的每个非主属性都不传递依赖于R的CK。

【例1.21】已知学生信息SInfo(U,F)。

U={SNo,SName,SSex,SBirth,SAge,DNo,DName,DHead,CNo,CName,Credit,Grade},其中SNo表示学号,SName表示姓名,SSex表示性别,SBirth表示生日,SAge表示年龄,DNo表示系号,DName表示系名,DHead表示系主任,CNo表示课程号,CName表示课程名,Credit表示学分,Grade表示成绩。

F满足:1个学生只能属于1个系;1个系只能有1个系主任;1个学生可选多门课程,1门课程可被多个学生选。

(1)请判断SInfo是否满足2NF?若不是,则分解关系模式,使之满足2NF。

(2)请判断SInfo是否满足3NF?若不是,则分解关系模式,使之满足3NF。

分析:

①1NF判断:不难看出,SBirth→SAge,所以SAge冗余,即得出

SInfo(SNo,SName,SSex,SBirth,DNo,DName,DHead,CNo,CName,Credit,Grade)又因每个属性均为不可分的属性,所以,SInfo满足1NF。

②2NF判断:由F可知,SInfo的依赖关系如图1.27所示。

img33

图1.27 SInfo的数据依赖关系

其中,实箭头(→)表示完全依赖,虚箭头(img34)表示部分依赖。即

F={SNo→SName,SNo→SSex,SNo→SBirth,SNo→DNo,DNo→DName,DNo→DHead,(SNo,CNo)→Grade,CNo→CName,CNo→Credit}所以,SInfo的PK为(SNo,CNo);SNo和CNo为主属性;其余属性为非主属性。

由于SNo→(SName,SSex,SBirth,DNo,DName,DHead),则存在部分依赖:

img35

由于CNo→(CName,Credit),则存在部分依赖:(SNo,CNo)img36─→(CName,Credit)

关系模式的完全依赖为:(SNo,CNo)img37Grade,即SInfo不满足2NF。所以,分解SInfo=SD∪SC∪C。如图1.28所示。

SD(Usd,Fsd):Usd={SNo,SName,SSex,SBirth,DNo,DName,DHead}

Fsd={SNo→(SName,SSex,SBirth,DNo,DName,DHead),DNo→(DName,DHead)}

SC(Usc,Fsc):Usc={CNo,CName,Credit};Fsc={CNo→(CName,Credit)}

C(Uc,Fc):Uc={SNo,CNo,Grade};Fc={(SNo,CNo)→Grade}

③3NF判断:SC和C显然满足3NF,而SD不满足。

由于Fsd存在:SNo→DNo和DNo→(DName,DHead),所以非主属性DName和DHead均传递依赖于(SNo,CNo),即SD不满足3NF。所以,分解SD=S∪D。如图1.28所示。

S(Us,Fs):Us={SNo,SName,SSex,SBirth,DNo};Fs={SNo→(SName,SSex,SBirth,DNo)}

D(Ud,Fd):Ud={DNo,DName,DHead};Fd={DNo→(DName,DHead)}

img38

图1.28 SInfo的2NF+3NF分解

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈