这次说下数据库设计的三大范式和BC范式:
第一范式最形象对比第一范式:就是原子性,字段不可再分割;【分割到不能分割位置。比如联系人】
第二范式参照第二范式:就是完全依赖,没有部分依赖【非主键依赖主键的一部分】
【前提要满足第一范式】
选课表中可以把(学生,课程)看作联合主键。
通过(学生,课程)可以选出 教师,教师职称,教室,上课时间,所以可以把(学生,课程)看作联合主键。
但是,教材并不完全依赖于(学生,课程),只拿出课程就可以确定教材,因为一个课程,一定指定了某个教材。这就叫不完全依赖,或者部分依赖。这就是不满足第二范式。
所以又独立出了课程表。第二范式可以说是消除部分依赖。
第三范式参照第三范式:就是没有传递依赖。【非主键之间存在的依赖关系】
【前提要满足第二范式】
在第二范式的修改中,一个教师能确定一个教师职称。【这里教师和教师职称都是非主键】这样,教师依赖于(学生,课程),而教师职称又依赖于教师,这叫传递依赖。第三范式就是要消除传递依赖。
第三范式修改后,这样,新教师的职称在没被选课的时候也有地方存了,没人选这个教师的课的时候教师的职称也不至于被删除,修改教师职称时只修改教师表就可以了。
BC范式参照BC范式:就是解决主属性的。【 主键依赖部分非主键】
这个表的设计满足三范式,有主键,不存在主键的部分依赖,不存在非主键的传递依赖。但是这里存在另一个依赖关系,“专业”依赖于“导师”,也就是说每个导师只做一个专业方面的导师,只要知道了是哪个导师,我们自然就知道是哪个专业的了。
所以说学生导师表的部分主键依赖于非主键部分。就把这个表拆分了。分出了导师表。
总结:
第一、二、三范式都是解决非主键之间的依赖。
BC范式是解决主键依赖的关系。
三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。
网友评论