Loading... 复习软考之余,看了数据库范式。 数据库范式是规范化数据库设计的方法,通过规范化数据库设计,优化数据结构,减少数据冗余,避免异常并提高数据库性能和一致性。 ## 第一范式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,有六大范式。 最后修改:2024 年 03 月 25 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏