?问题——什么是一个好的数据库逻辑设计?
关系型数据库逻辑设计:
针对一个具体问题应如何构造一个适合于它的数据模式,即应构造几个关系,每个关系由哪些属性组成等
eg:
观察这个表所对应的一个实例(在某个时刻student模式所对应的一个实际的数据情况):如有若干个学生,他们都为’计算机系’,系主任为’张明’,选修了’C1’课程,得到各自的成绩
☞关系模式STUDENT(Sno,Sdept,Mname,Cno,Grade)中存在的问题:☜
1、数据冗余太大,浪费存储空间
如:系主任的名字重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同。
2、更新异常(Update Anomalies)
数据冗余,更新数据时,维护数据完整新代价大
如果某系换主任,系统必须修改与该系学生有关的每一个元组。
3、插入异常(Insertion Anomalies),该插入的数据插不进去
如果成立一个新的软件工程系,还没有招生,我们就无法把这个系及其系主任的信息存入数据库。
4、删除异常(Deletetion Anomalies),不该删除的数据也删除了
如果某个系的学生全部毕业了,我们在删除该系学生信息的同时,把这个系及其主任的信息也丢掉了。
?什么是一个好的模式 ?
➠好的设计模式不会发生插入异常、删除异常、更新异常、数据冗余应尽可能少
问题的原因:
由于模式中的某些数据依赖引起的。
数据依赖:
◆是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系
◆是现实世界属性间相互联系的抽象
◆是数据内在的性质
◆是语义的体现
数据依赖对关系模式的影响:
不合适的数据依赖,造成插入异常、删除异常、更新异常和数据冗余问题
用一张图表示函数依赖
解决方法:把这个单一模式分成3个关系模式
S( Sno, Sdept, Sno→Sdept);
SC ( Sno, Cno, Grade, (Sno, Cno)→Grade);
DEPT (Sdept, Mname, Sdept→Mname)
这三个模式不会发生插入异常、删除等异常;数据冗余得到控制。
如何解决关系模式中存在的问题:
规范化理论——找出关系模式中不合适的数据依赖,消除它们,可以在不同程度上解决插入异常、删除异常、更新异常和数据冗余问题。