第一范式(1NF)
数据库表中的字段都是单一属性的,不可再分。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。例如:地址,如果没有国家,省份的需求,我就可以直接写成一个列,没必要拆分。
第二范式(2NF)
非主键的字段要依赖于主键。
- 例子:有一个数据信息(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)
如果直接存一条的话,会出现数据冗余:同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。
解决方案
把选课关系表SelectCourse改为如下三个表:
学生表:Student(学号,姓名,年龄,性别,系别,系办地址、系办电话);
课程表:Course(课程名称,学分);
选课关系表:SelectCourse(学号,课程名称,成绩)。
第三范式(3NF)
非主键的字段要直接依赖于主键,而不能间接依赖。
- 例子:
上面满足第二范式的学生表还存在下面的决定关系:
(学号) → (系别)→(系办地点,系办电话)
即存在非关键字段"系办地点"、"系办电话"对关键字段"学号"的传递函数依赖。
它也会存在数据冗余、更新异常、插入异常和删除异常的情况。
- 学生表拆分:
学生:(学号,姓名,年龄,性别,系别);
系别:(系别,系办地址、系办电话)。
三范式的宗旨
消除了数据冗余、更新异常、插入异常和删除异常。
特别鸣谢 @stone_ 本文摘录自 数据库的三范式
本文由 陌上花开 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jul 1, 2016 at 06:51 am