四、范式
数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。
1.1NF的定义为:符合1NF的关系中的每个属性都不可再分。
即表中不可有表
但是仅仅符合1NF的设计,仍然会存在数据冗余过大,插入异常,删除异常,修改异常的问题。
2.2NF定义:2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。
函数依赖:
在学生表中找不到任何一条记录,它们的学号相同而对应的姓名不同。所以我们可以说姓名函数依赖于学号,写作:学号 → 姓名
完全函数依赖:
在一张表中,若 X → Y,且对于 X 的任何一个真子集(假如属性组 X 包含超过一个属性的话),X ' → Y 不成立,那么我们称 Y 对于 X 完全函数依赖,记作 X Y。例如:(学号,课名) 分数
部分函数依赖:
假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于 X,那么我们就称 Y 部分函数依赖于 X,记作 X Y。例如(学号,课名) 姓名
码:除 K 之外的所有属性都完全函数依赖于 K。包含在任何一个码中的属性成为主属性。
3NF:在2NF的基础之上,消除了非主属性对于码的传递函数依赖。
BCNF: 3NF 的基础上消除主属性对于码的部分与传递函数依赖。
详情参见网址:
https://www.zhihu.com/question/24696366