快速业务通道

细说数据库范式

作者 佚名技术 来源 数据库编程 浏览 发布时间 2012-03-22
r→Course,这属于违反BCNF的情况。



可是,问题是这个表看起来还挺正常的啊?!它的毛病在于,我们无法阻止类似最后一行这样的数据插入,而这会导致与前提“一名教师只负责一门课程”违背。所以我们还是需要将它拆分:

Student

学生
Teacher

教师

S1
T1

S1
T2

S2
T1

S2
T3





Teacher

教师
Course

课程

T1
C1

T2
C2

T3
C2



这样,在“Teacher-Course”表中,借助主键的帮助,最后可以避免违背“一名教师只负责一门课程”这个前提。



那么,如果没有这样一个前提,是初的设计是否符合BCNF?目前看来是的。



真实的情况可能更为复杂,下面这个更接近于我的一些经历:

1)学生需要学习多门课程

2)一门课程可能有多位教师负责

3)一位教师可能负责多门课程

4)某一班级的某一课程对应的教师是固定的(一位)

据此,为了描述学生、课程、教师三者的关系,从这一团乱麻中最早跳出来的大概是这样的表:

Student

学生
Class

班级
Course

课程
Teacher

教师


  
  
  


  
  
  





候选键:

{Student,Course}

我们可以明显地看到Student→Class违反了2NF,于是:

Student

学生
Class

班级


  


  





Class

班级
Course

课程
Teacher

教师


  
  


  
  





从这两张表,仔细考虑,即便我们通过Class关联两张表,还是无法得出学生与课程的关系(只能得出可供该学生选择的课程),所以我们需要再添加一张表:

Student

学生
Course

课程


  


  





最后大概是这么三张表,可能还有其它的方案,这里只是举例说明,就不纠缠了。



在BCNF之后,还有4NF,5NF,DKNF,6NF,等什么时候有空了再看看是什么东东。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号