【转】数据库的三范式
in 技术 with 0 comment

【转】数据库的三范式

in 技术 with 0 comment

第一范式(1NF)

数据库表中的字段都是单一属性的,不可再分。

说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。例如:地址,如果没有国家,省份的需求,我就可以直接写成一个列,没必要拆分。

第二范式(2NF)

非主键的字段要依赖于主键。

如果直接存一条的话,会出现数据冗余:同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

解决方案

把选课关系表SelectCourse改为如下三个表:

学生表:Student(学号,姓名,年龄,性别,系别,系办地址、系办电话);

课程表:Course(课程名称,学分);

选课关系表:SelectCourse(学号,课程名称,成绩)。

第三范式(3NF)

非主键的字段要直接依赖于主键,而不能间接依赖。

上面满足第二范式的学生表还存在下面的决定关系:

(学号) → (系别)→(系办地点,系办电话)

即存在非关键字段"系办地点"、"系办电话"对关键字段"学号"的传递函数依赖。

它也会存在数据冗余、更新异常、插入异常和删除异常的情况。

学生:(学号,姓名,年龄,性别,系别);

系别:(系别,系办地址、系办电话)。

三范式的宗旨

消除了数据冗余、更新异常、插入异常和删除异常。

特别鸣谢 @stone_ 本文摘录自 数据库的三范式

Comments are closed.