数据库-函数依赖与范式

关系数据理论

Posted by lzy on November 25, 2019

文章引用:https://blog.csdn.net/eahau/article/details/91127992

基本概念

  • 函数依赖:设 R 为任一给定关系,如果对于 R 中属性 X 的每一个值,R 中的属性 Y 只有唯一值与之对应,则称 X 函数决定 Y 或称 Y 函数依赖于 X ,记作 X—>Y。其中,X 称为决定因素。

通俗一点就是给定一个X都有w唯一的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。

例如:书的出版编号是唯一,版权归出版社所有,所以只能由该出版社出版。所以存在函数依赖:书出版编号—>出版社名,出版社名—>出版社地址,但是出版社名不能决定唯一的出版书编号(除非出版社只出版过一本书,那我没话说?),则有出版社地址传递函数依赖于出版书编号。

  • 码:表中可以唯一确定一个元组的某个属性(或者属性组)。
  • 候选码:若码不止一个,则所有的码都称为候选码。
  • 外码:属性(或属性组)X不是关系R的码,但X是另一个关系的码,则称X是R的外码。
  • 全码:整个属性组是码(一个码包含了全部属性)。
  • 主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。
  • 非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。

六大范式

  • 第一范式(1NF):如果一个关系模型R的所有属性都是不可分的基本数据项,则R∈1NF。属性不可分。
  • 第二范式(2NF):若关系R∈1NF,并且每一个非主属性都完全依赖于R的码,则R∈2NF。消除了部分依赖。
  • 第三范式(3NF):关系中的所有属性不但要能唯一地被主码所标识,而且它们之间还必须相互独立,不存在其他的函数关系。消除非主属性传递依赖。
  • 巴斯-科德范式(BCNF):第三范式只约束了非主属性的依赖,而BC范式增加了对主属性的依赖要求,即消除全部的传递依赖

例如,R={AB->C,BC->A,C->A},R的码为AB、BC,故主属性为ABC,R为3NF。但是函数依赖C->A,决定因素C不包含码BC故R不是BCNF。

3NF——只消除非主属性对主属性的传递依赖; BCNF——消除所有属性对主属性的传递依赖。

若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性,则该关系自然达到BC范式。