MYSQL-数据库设计笔记【3】

这次说下数据库设计的三大范式和BC范式:

第一范式:就是原子性,字段不可再分割;【分割到不能分割位置。比如联系人】

MYSQL-数据库设计笔记【3】_第1张图片
第一范式最形象对比

第二范式:就是完全依赖,没有部分依赖【非主依赖主键的一部分】

【前提要满足第一范式】

MYSQL-数据库设计笔记【3】_第2张图片
第二范式参照

选课表中可以把(学生,课程)看作联合主键。

通过(学生,课程)可以选出 教师,教师职称,教室,上课时间,所以可以把(学生,课程)看作联合主键。

但是,教材并不完全依赖于(学生,课程),只拿出课程就可以确定教材,因为一个课程,一定指定了某个教材。这就叫不完全依赖,或者部分依赖。这就是不满足第二范式

所以又独立出了课程表。第二范式可以说是消除部分依赖。

第三范式:就是没有传递依赖。【非主之间存在的依赖关系】

前提要满足第二范式

MYSQL-数据库设计笔记【3】_第3张图片
第三范式参照

在第二范式的修改中,一个教师能确定一个教师职称。【这里教师和教师职称都是非主】这样,教师依赖于(学生,课程),而教师职称又依赖于教师,这叫传递依赖。第三范式就是要消除传递依赖。

第三范式修改后,这样,新教师的职称在没被选课的时候也有地方存了,没人选这个教师的课的时候教师的职称也不至于被删除,修改教师职称时只修改教师表就可以了。

BC范式:就是解决主属性的。【 主依赖部分非主

MYSQL-数据库设计笔记【3】_第4张图片
BC范式参照

这个表的设计满足三范式,有主键,不存在主键的部分依赖,不存在非主键的传递依赖。但是这里存在另一个依赖关系,“专业”依赖于“导师”,也就是说每个导师只做一个专业方面的导师,只要知道了是哪个导师,我们自然就知道是哪个专业的了。

所以说学生导师表的部分主键依赖于非主键部分。就把这个表拆分了。分出了导师表。

总结:

第一、二、三范式都是解决非主键之间的依赖。

BC范式是解决主键依赖的关系。

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

你可能感兴趣的:(MYSQL-数据库设计笔记【3】)