首先,要明确一个概念,范式的提出到逐步精进,从第一范式到第三范式,甚至于BCNF范式,逐步优化是为了解决插入异常、删除异常以及改善数据冗余的。
举例:
学生表(学号,姓名,班级)
学生表中的属性均是不可再分的属性,即该表符合第一范式。绝大对数情况下,第一范式很容易满足。
举例;
学生表(学号,姓名,班级,课程号,课程名,成绩)
学生表中,学号为主键,课程名和成绩依赖于学号和课程号,此时的学号和课程号组成了联合主键,该表不符合第二范式。
修正为三张表:
学生表(学号,姓名,班级)
课程表(课程号,课程名)
成绩表(学号,课程号,成绩)
举例:
(学号,姓名,班级,系号,系名称,系所在位置)
这张表里存在非主属性对候选键的传递函数依赖,即学号-->系号-->(系名称,系所在位置)。
修正为两张表:
学生表(学号,姓名,班级,系号)
系信息表(系号,系名称,系所在位置)
以上就是我对三大范式的初步理解,欢迎诸君共同探讨。