基本术语
- 关系:整个二维表
- 关系名:表格名称
- 元组:行数据(记录)
- 属性:列数据(字段/分量)
- 属性名:列名称(字段名)
- 主键:唯一确定元组的属性组(关键字)
- 域:属性的取值范围
-
关系模式:关系的描述,表示为:关系名(属性列表)
- 例如:学生(学号,姓名,性别,年龄,系别
- 关系的约束:域完整性约束,
- 实体完整性约束,参照完整性约束
一、关系依赖
-
函数依赖:X—>Y,即X函数决定Y,或Y函数依赖于X。
- 例:学号—>姓名 #学号决定姓名
-
平凡函数依赖:X—>Y,但X包含Y (Y包含于X)。
- 例:(学号,课号)—>课号 #课号存在于 (学号,课号) 之中。
-
非平凡函数依赖: X—>Y,但X不包含Y。
- 例:(学号,课号)—>成绩 #成绩不存在于 (学号,课号) 之中。
-
完全函数依赖:X—>Y,对于X的任意一个真子集X'都有X'不能函数决定Y。
- 例:(学号,课号)—>成绩 #只有学号或姓名无法决定成绩,二者缺一不可。
-
部分函数依赖:X—>Y,存在X的某一个真子集X'能够函数决定Y。
- 例:(学号,课号)—>姓名 #只有学号就能决定姓名,课号为冗余项。
-
传递函数依赖:X—>Y,X不包含Y,Y不函数决定X,Y—>Z,即Z对X传递函数依赖。
- 例:学号—>系号,(系号不函数决定学号) ,系号—>系主任,则系主任传递函数依赖于学号。
-
多值依赖:X—>—>Y,设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y,关系模式R(U)中多值依赖X—>—>Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值有一组Y的值,这组值仅仅决定于x值而与z值无关。
-
例:关系模式R(仓库,管理员,物品)
- 一个仓库有若干个管理员
- 一个仓库可以存放多个物品
- 一个管理员管理一个仓库中的所有物品
- 一种物品只能放在一个仓库里
- 则:仓库—>—>物品,仓库—>—>管理员
- 表中,R = 仓库+管理员+物品,(仓库,管理员)确定一组物品,但是物品其实与管理员无关,仅由仓库确定,所以:仓库—>—>物品。又因为(R-仓库-物品)不是空集,所以 仓库—>—>物品为非平凡多值依赖。
- 表中,R = 仓库+管理员+物品,(仓库,物品)确定一组管理员,但是管理员其实与物品无关,仅由仓库确定,所以:仓库—>—>管理员。又因为(R-仓库管理员)不是空集,所以 仓库—>—>管理员为非平凡多值依赖。
-
- 平凡的多值依赖:若X—>—>Y, 并且X,Y,Z是U的子集,Z=U-X-Y,而Z为空集,则称X—>—>Y为平凡的多值依赖;
- 非平凡的多值依赖:若X—>—>Y, 并且X,Y,Z是U的子集,Z=U-X-Y,若Z不为空,则称X—>—>Y为非平凡的多值依赖。
- 连接依赖:为提高规范化程度,都是通过把低一级的关系模式分解为若干个高一级的关系模式来实现的,在此过程中,应该保证分解后产生的关系模式与原来的模式等价。常用的等价标准有两种:要求分解具有无损连接性和要求分解保持函数依赖。
- 无损连接性的判别:将关系模式R<U,F>分解为关系模式R1<U1,F1>,R2<U2,F2>。如果(U1 ∩ U2 —>U1)∈F+(F的闭包,即F所蕴含的函数依赖的全体),或(U1 ∩ U2 —>U2)∈F+ ,即U1 ∩ U2 是R1的候选码或是R2的候选码,则这个分解一定是具有无损连接性的。
二、关系模式的规范化
- 满足第一范式条件的关系模式(1NF):关系模式 R的每一个属性都是原子域,元组的每一个分量都是不可分割的数据项。
- 满足第二范式条件的关系模式(2NF):关系模式 R∈1NF ,每一个非主属性完全函数依赖于码,消除非主属性对码的部分函数依赖。
- 满足第三范式条件的关系模式(3NF):关系模式 R∈2NF ,每一个非主属性不传递依赖于码,消除非主属性对码的传递函数依赖(对非主属性的函数依赖)。
- 满足Boyce-Code范式条件的关系模式(BCNF):关系模式 R∈3NF ,对于每一个非平凡函数依赖X—>Y,都有X包含码,消除主属性对于码的部分函数依赖与传递函数依赖。(在函数依赖的范畴内,BCNF达到了最高的规范化程度)
- 满足第四范式条件的关系模式(4NF):关系模式 R∈BCNF ,对于每一个非平凡的多值依赖X—>—>Y(Y⊄X),都有X包含码。(限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖)
- 满足第五范式条件的关系模式(5NF):关系模式 R∈4NF,消除属于4NF的关系模式中存在的连接依赖。
- 规范程度层次:5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF
三、“好的”关系数据库系统应具有的特点
- 适度减少数据冗余。
-
关系明确,表与表之间主外键设置明确,表名称明确。
- 对关系模式的属性间允许的数据依赖加以限制,减少表中非主属性间存在的函数依赖,避免更新异常问题。
- 非主属性完全函数依赖于码,不允许有非主属性对码的部分函数依赖。
- 非主属性不传递依赖于码。
- 选择合理的数据库引擎,查询操作较多的与增删改操作较多的数据库分别使用不同的引擎。