php

关于数据库范式

dafenqi
2024-03-21 / 0 评论 / 12 阅读 / 正在检测是否收录...

复习软考之余,看了数据库范式。

数据库范式是规范化数据库设计的方法,通过规范化数据库设计,优化数据结构,减少数据冗余,避免异常并提高数据库性能和一致性。

第一范式1NF

第一范式1NF: 表中每个属性不可分割,不允许有小表的存在。

不满足1NF的员工表的员工薪资属性包括基本工资、补贴、奖金等属性 ,拆分出来即可满足1NF。

第二范式2NF

第二范式2NF: 满足1NF的基础上,消除非主属性对主属性的部分函数依赖 ,即每个非主属性不会依赖复合主键中的某一列。

不满足2NF的学生表(学号,学生姓名,系编号,系名,系主任,课程号,成绩) ,每个学生的成绩是由学号、课程号(当成联合主键)确定。学生表拆分出一个选课表(学号,课程号,成绩)即可满足2NF。

满足2NF的表结构:

学生表(学号,学生姓名,系编号,系名,系主任)
选课表(学号,课程号,成绩)

第三范式3NF

第三范式3NF: 满足2NF的基础上,消除主属性对非主属性的传递函数依赖。

满足2NF的学生表(学号,学生姓名,系编号,系名,系主任) ,系编号可以确定系名、系主任。所以,学生表再分解出一个系表(系编号,系名,系主任)

满足3NF的表结构:

学生表(学号,学生姓名,系编号)
系表(系编号,系名,系主任)
选课表(学号,课程号,成绩)

BC范式BCNF

BC范式BCNF: 满足第三范式的基础上 ,进一步消除 主属性 对于 主属性的部分函数依赖和传递函数依赖。

满足3NF的系表(系编号,系名,系主任) 中,有部分函数依赖,通过系编号和系名都可以得出系主任。

满足BCNF的表结构:

学生表(学号,学生姓名,系编号)
系信息表(系编号,系名)
系主任表(系编号,系主任)
选课表(学号,课程号,成绩)

PS:
主属性是指能够唯一标识一个实体(记录)的属性。主属性通常包括(从候选键中任选一个为)主键(Primary Key),也可以包括候选键(Candidate Key)。
外键是其他表中的主键。

两种函数依赖:

  • 部分函数依赖:A可确定C,(A,B)也可确定C,(A,B)中的一部分(即A)可以确定C,称为部分函数依赖。
  • 传递函数依赖:当A和B不等价时,A可确定B,B可确定C,则A可确定C,是传递函数依赖;若A和B等价,则不存在传递,直接就可确定C。

另外还有第四范式4NF、第五范式5NF,有六大范式。

0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消