9.1.1数据冗余问题
在这个关系中,学生所在系和其所住宿舍楼的信息有冗余,因为一个系有多少个学这个系所对应的宿舍楼的信息就至少要重复存储多少遍。学生基本信息(包括学生学된姓名、性别和所在系)也有重复,一个学生修了多少门课,他的基本信息就重复多少遍
9.1.2数据更新问题
来友身某实的社弥粮设友列幕关伽我不粉顾
如果某一学生从计算机系转到了信息管理系,那么不但要修改此学生的 Sdept 列的值而且还要修改其 Sloc 列的值,从而使修改复杂化。
9.1.3数据插人问题
虽然新成立了某个系,并且确定了该系学生的宿舍楼,即已经有了 Sdept 和 Sloc 信息,
却不能将这个信息插人到 S - L - C 表中,因为这个系还没有招生,其 Sno 和 Cno 列的值均为空,而 Sno 和 Cno 是这个表的主键,不能为空。
9.1.4数据删除问题
如果一名学生最初只选修了一门课,之后又放弃了,那么应该删除该学生选修此门课程的记录。但由于这个学生只选了一门课,因此,删除此学生选课记录的同时也就删除了此字生的其他基本信息。
数据的增、删、改问题统称为操作异常。为什么会出现以上种种操作异常呢?是因为这个关系模式没有设计好,它的某些属性之间存在“不良”的函数依赖关系。如何改造这个关系模式并避免以上种种问题是关系规范化理论要解决的问题,也是我们讨论函数依赖的原因。
解决上述种种问题的方法就是进行模式分解,即把一个关系模式分解成两个或多个关杀模式,在分解的过程中消除那些“不良”的函数依赖,从而获得良好的关系模式。
下面,先从函数依赖开始讨论。
二.函数依赖
定义9.1设有关系模式R(A1,A2,…,An),X和Y均为{A,A2,…,A}的子集,r是R的任一具体关系,t、tz是r中的任意两个元组。如果由t;[x] =t;[x] 可以推导出t;[Y] =t₂[Y],则称X函数决定Y,或Y函数依赖于X,记为X→Y。
在以上定义中特别要注意,只要t[X](=tz[X],t和[Y]=tz[Y]成立,就有x→ Y。
9.2.2一些术语和符号
给出本章中使用的一些术语和符号。设有关系模式R(A,A2,…,A),X和Y均为 A,A2,…,A}的子集,则有以下结论:
(1)如果X>Y,但Y不包含于 X,则称X>Y是非平凡的函数依赖。如不做特别说明,我们讨论的都是非平凡的函数依赖。
(2)如果Y不函数依赖于X,则记作X-AY。
(3)如果X→Y,则称x为决定因子。
(4)如果 X → Y ,并且 Y → X ,则记作 X→Y 。
(5)如果 X → Y ,并且对于 X 的一个任意真子集X'都有X' 则称人完全函数依赖于X。