作者:whisper
链接:http://proprogrammar.com:443/article/572
声明:请尊重原作者的劳动,如需转载请注明出处
针对一个具体问题,应如何构造一个适合于它的数据模式,即应该构造几个关系,每个关系由哪些属性组成等。
问题——什么是一个好的数据库逻辑设计
学生的学号(Sno)、所在系(Sdept)、系主任姓名(Mname)、课程号(Cno)和成绩(Grade)。
⒈一个系有若干学生, 但一个学生只属于一个系;
⒉一个系只有一名主任;
⒊一个学生可以选修多门课程, 每门课程有若干学生选修;
⒋每个学生所学的每门课程都有一个成绩。
STUDENT(Sno ,Sdept, Mname,Cno,Grade)
表6.1 Student表
关系模式STUDENT(Sno ,Sdept, Mname,Cno,Grade)中存在的问题:
⒈ 数据冗余度太大,浪费存储空间
如:系主任的姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同。
⒉ 更新异常(Update Anomalies)
数据冗余 , 更新数据时,维护数据完整性代价大
如果某系更换系主任,系统必须修改与该系学生有关的每一个元组。
⒊ 插入异常(Insertion Anomalies),该插入的数据插不进去
如果新成立一个软件工程系,还没有招生,我们就无法把这个系及其系主任的信息存入数据库。
⒋ 删除异常(Deletion Anomalies),不该删除的数据也删去了
如果某个系的学生全部毕业了, 我们在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。
好的模式不会发生插入异常、删除异常、更新异常、数据冗余应尽可能少。
由于模式中的某些数据依赖引起的。
U ={ Sno, Sdept, Mname, Cno, Grade }
属性组U上的函数依赖集合,记为F:
F ={ Sno→Sdept, Sdept→Mname, (Sno, Cno)→Grade}
用一个图表示函数依赖:
1.完整性约束的一种表现形式
2. 数据依赖
3.数据依赖的主要类型
4.数据依赖对关系模式的影响
R(U, D, DOM, F)
R<U, F>
将关系模式简化为一个三元组,影响数据库模式设计的主要是 U 和 F.
当且仅当U上的一个关系 r 满足F时, r 称为关系模式R(U, F)的一个关系。
关系模式 STUDENT<U,F>
U = { Sno,Sdept,Mname,Cno,Grade }
F ={ Sno→Sdept, Sdept→Mname, (Sno, Cno)→Grade}
STUDENT(Sno,Sdept,Mname,Cno,Grade, Sno→Sdept, Sdept→Mname, (Sno, Cno)→Grade)
关系模式 STUDENT<U,F>存在诸多问题。
如何解决关系模式中存在的问题?
规范化理论—找出关系模式中不合适的数据依赖,消除它们,可以在不同程度上解决插入异常、删除异常、更新异常和数据冗余问题。
在前面讲解的关系模式STUDENT(Sno ,Sdept, Mname,Cno,Grade)中,如果新成立一个软件工程系,还没有招生,就无法把这个系及其系主任的信息存入数据库。请问为什么?
亲爱的读者:有时间可以点赞评论一下
全部评论