数据库关系数据理论
关系数据理论
- 数据依赖是一个关系内部属性与属性之间的一种约束关系,是通过属性间值的相等与否体现出来的数据间相关联系。
- 最重要的数据依赖:函数依赖、多值依赖。
函数依赖是指关系中属性间(或者说是表中字段间)的对应关系。
定义:设 R 为任一给定关系,如果对于 R 中属性 X 的每一个值,R 中的属性 Y 只有唯一值与之对应,则称 X 函数决定 Y 或称 Y 函数依赖于 X ,记作 X—>Y。其中,X 称为决定因素。
通俗一点,就是给定一个 X 都有唯一的 Y。可以理解为函数 y = f(x); 对于任意的 x 都有唯一的 y ,且 y 的取值由 x 决定。
例如:学生号—>学生姓名,学生年龄等等有关该学生的所有信息
反之,像学生姓名不能决定唯一的学生,因为存在同名的可能,这种情况就不能称作函数依赖。
根据函数依赖性质可分为以下三种:
完全函数依赖
书上定义的意思基本是:如果存在 X 属性集(注意是集合,说明是联合主键)决定 唯一的 Y ,且 X 中的任一子集都不能决定 唯一的 Y,则 Y 完全依赖于 X。
例如:学生数学成绩完全由该学生的学号和数学课决定,所以数学课成绩完全依赖于(学号,数学课)
部分函数依赖
定义和完全函数依赖有一点不一样,就是 X 的属性集中任一子集可以决定唯一的 Y
例如:学生学号和姓名可以决定唯一的学生,但是学生号也可以决定唯一的学生
传递函数依赖
定义:设 R 为任一给定关系, X Y Z 为其不同的属性子集,若 X —> Y, Y 不决定 X 且 Y —>Z,则有 X —>Z,称为 Z 传递函数依赖于 X
例如:书的出版编号是唯一,版权归出版社所有,所以只能由该出版社出版。所以存在函数依赖:书出版编号—>出版社名,出版社名—>出版社地址,但是出版社名不能决定唯一的出版书编号(除非出版社只出版过一本书,那我没话说🤣),则有出版社地址传递函数依赖于出版书编号
范式
第一范式(1NF):属性(字段)是最小单位不可再分。
(学号,系名,课程号,成绩)属于1NF
第二范式(2NF):满足 1NF,每个非主属性完全依赖于主键(消除 1NF 非主属性对码的部分函数依赖)。
(学号,系名,课程号,成绩)属于1NF,由于(学号,课程号)是码,其他为非主属性,但是 只有成绩完全依赖于(学号,课程号),系名只依赖于学号,因此不符合2NF,可拆分成(学号,系名),(学号,课程号,成绩)
第三范式(3NF):满足 2NF,任何非主属性不依赖于其他非主属性(消除 2NF 主属性对码的传递函数依赖)。
如:在一个学生表中,我们规定一个系的学生是住在同一个宿舍区域的,于是,该关系模型为:
学生表(学号, 系名, 宿舍区)
在这关系中,学号为码,学号——>系名,学号——>宿舍区,但是,系名也能推出宿舍区,变成 学号——>系名——>宿舍区,即宿舍区传递依赖于学号了。解决方法:拆分成两个表:
1(学号,系名),2(系名,宿舍区)
从上面我们可以看到,在两个表中我们可以看到,当两个表通过外键(1表的系名,2中系名为主健)关联后,另一个表的的信息(如2表中的宿舍区)不能再写到包含外键关系的表中(1表)。
鲍依斯-科得范式(BCNF):满足 3NF,任何非主属性不能对主键子集依赖(消除 3NF 主属性对码的部分和传递函数依赖)。前面的三个范式是针对非主属性的,BC范式则是针对于码,它要求每个函数的依赖关系中其决定因素都要包含码。
在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。
函数依赖:(S,J)→T,(S,T)→J, T→J 其中,(S,J)和(S,T)都是候选 码。
可以看出STJ中,它是属于第三范式的,因为没有哪一组依赖关系中,非主属性传递或者部分 依赖于码,(记住是非主属性,是候选码以外的属性,T在候选码中),但是,它不属于BC范式,因为T是决定因素,T不包含码(候选码的任何一个真子集都不能叫候选码)。
第四范式(4NF):满足 3NF,属性之间不能有非平凡且非函数依赖的多值依赖(消除 3NF 非平凡且非函数依赖的多值依赖)。
多值依赖定义:第四范式需要掌握的一个内容。它说的就是设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖 X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关(想不到好的方法把它概括起来,哎!)
判定方法:对于任意关系中,如果存在两个元组(就是行),记为A,B,如果他们的某一属性X的值相等,那么我们交换它们另外的属性Y的值后,得到的新的两个元组,在表中是可以在原来的表中找到与它们相匹配的元组的。
平凡多值依赖和非平凡的多值依赖:
若X→→Y,而Z=φ,则称X→→Y为平凡的多值依赖否则称X→→Y为非平凡的多值依赖。
多值依赖与函数依赖的区别:
1)若函数依赖X→Y在R(U)上成立,则对于任何Y' 属于Y均有X→Y' 成立
2)多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y' 属于Y有X→→Y' 成立,因为多值依赖中,其实就是一对一组,一个老师可能教多门课,所以不同老师可能有教相同的课,所以不能推出X→→Y' 成立。我们可以看出,如果把一组改为一个,实际上就是函数依赖,所以所函数依赖是多值依赖的特例,多值依赖不一定是函数依赖,但函数依赖一定是多值依赖。
多值依赖性质:
(1)多值依赖具有对称性
若X→→Y,则X→→Z,其中Z=U-X-Y
(2)多值依赖具有传递性
若X→→Y,Y→→Z, 则X→→Z –Y
(3)函数依赖是多值依赖的特殊情况。
若X→Y,则X→→Y。
(4)若X→→Y,X→→Z,则X→→YU Z。
(5)若X→→Y,X→→Z,则X→→Y∩Z。
(6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。
第四范式:1)不允许有非平凡且非函数依赖的多值依赖 2)允许的非平凡多值依赖是函数依赖 3)平凡的多值依赖属于第四范式
像,我们上面的图表(C,T,B),如果改成属于第四范式,就要分为:
CT(C, T) ∈ 4NF CB(C, B) ∈ 4NF
其中, C→→T, C→→B是平凡多值依赖。
参考
https://blog.csdn.net/legendaryhaha/article/details/80032808