数据库三范式

1范式:表中的每个字段都是原子的,表中的字段不能再拆分。

如:讲师代课表:讲师姓名(P)、性别、班级(P)、教室、代课时间(天)、代课时间段(开始--结束)  不满足1NF,代课时间段需要拆分解决方案:将代课时间段拆分成开始和结束

讲师代课表:讲师姓名(P)、性别、班级(P)、教室、代课时间(天)、开始时间、结束时间

2范式:表中的非主键字段,都要全部依赖主键字段。

在数据表设计的过程中,如果有复合主键(多字段主键),且表中有字段并不是由整个主键来确定,
而是依赖主键中的某个字段(主键的部分);存在字段依赖主键的部分的问题,称之为部分依赖;
第二范式就是要解决部分依赖。

讲师代课表:讲师姓名(P)、性别、班级(P)、教室、代课时间(天)、开始时间、结束时间
以上表中:因为讲师没有办法作为独立主键,需要结合班级才能作为主键(复合主键)

代课时间,开始和结束字段都与当前的代课主键(讲班和班级)决定,但性别并不依赖班级,
同时教室不依赖讲师,性别只依赖讲师,教室只依赖班级,出现了性别和教室依赖主键中的一
部分,部分依赖,不符合2NF。

解决方案1:可以将性别与讲师单独成表,班级与教室也单独成表
解决方案2:取消复合主键,使用逻辑主键

3范式:直接依赖。表中的字段全部依赖主字段,不能通过依赖其他字段来间接依赖主字段。即消除依赖传递。
讲师代课表:ID(P)、讲师姓名、性别、班级、教室、代课时间(天)、开始时间、结束时间
以上设计方式中:性别依赖讲师存在,讲师依赖主键;教室依赖班级,班级依赖主键

解决方案:将存在传递依赖的字段,以及依赖的字段本身单独取出,形成一个单独的表,然后
在需要对应的信息的时候,使用对应的实体表的主键加进来。

讲师代课表:ID(P)、讲师ID、班级ID、代课时间(天)、开始时间、结束时间
讲师表: ID(P)、讲师姓名、性别 (ID等价于讲师)
班级表: ID(P)、班级、教室     (ID等价于班级)
本文部分转自http://www.myexception.cn/mysql/2072142.html 感谢作者

posted @ 2016-10-19 01:06  跨境电商杂货铺  阅读(258)  评论(0编辑  收藏  举报