9.1 关系模式设计的问题
Sno | Sname | Ssex | Sdept | Sdept | Cno | Grade |
---|---|---|---|---|---|---|
0811101 | 李勇 | 男 | 计算机系 | 2公寓 | C001 | 96 |
0811101 | 李勇 | 男 | 计算机系 | 2公寓 | C002 | 80 |
0811101 | 李勇 | 男 | 计算机系 | 2公寓 | C003 | 84 |
0811101 | 李勇 | 男 | 计算机系 | 2公寓 | C005 | 62 |
0811102 | 刘晨 | 男 | 计算机系 | 2公寓 | C001 | 92 |
0811102 | 刘晨 | 男 | 计算机系 | 2公寓 | C002 | 90 |
0811102 | 刘晨 | 男 | 计算机系 | 2公寓 | C004 | 84 |
0821102 | 吴宾 | 女 | 信息管理系 | 1公寓 | C001 | 76 |
0821102 | 吴宾 | 女 | 信息管理系 | 1公寓 | C004 | 85 |
0821102 | 吴宾 | 女 | 信息管理系 | 1公寓 | C005 | 73 |
0821102 | 吴宾 | 女 | 信息管理系 | 1公寓 | C007 | |
0821103 | 张海 | 男 | 信息管理系 | 1公寓 | C001 | 50 |
0821103 | 张海 | 男 | 信息管理系 | 1公寓 | C004 | 80 |
0831103 | 张珊珊 | 女 | 机电系 | 1公寓 | C004 | 78 |
0831103 | 张珊珊 | 女 | 机电系 | 1公寓 | C005 | 65 |
0831103 | 张珊珊 | 女 | 机电系 | 1公寓 | C007 |
其中个属性分别为:学号、姓名、性别、学生所在系、学生所住宿舍楼、课程号和考试成绩。
9.1.1 数据冗余问题
在这个关系中,学生所在系和其所住宿舍楼的信息有冗余,因为一个系有多少个学生,这个系所对应的宿舍楼的信息就至少要重复存储多少遍。学生基本信息(包括学生学号,姓名,性别和所在系)也有重复一个学生修了多少门课,他的基本信息就重复多少遍。
9.1.2 数据更新问题
如果某一学生从计算机系转到信息管理系,那么不但要修改此学生的sdept列的值,而且还要修改其Sloc列的值,从而使修改复杂化。
9.1.3 数据插入问题
虽然新成立了某个系,并且确定了该系学生的宿舍楼,且已经有了Sdept和Sloc信息,却不能将这个信息插入到Sloc表中,因为这个系还没有招生,其Sno和Cno列的值均为空,而Sno和Cno是这个表的主键,不能为空。
9.1.4 数据删除问题
数据的增删改问题统称为操作异常,为什么会出现以上种种操作异常呢?是因为这个关系模式没有设计好,他的某些属性之间存在“不良”的函数依赖关系。如何改造这个关系模式并避免以上种种问题,是关系规范化理论要解决的问题,也是我们讨论函数依赖的原因。
解决上述种种问题的方法就是进行模式分解,即把一个关系模式分解成两个或多个关系模式,在分解的过程中消除那些“不良”的函数依赖,从而获得良好的关系模式。