1,规范化 这里学号与课程号为主码,也是唯一候选码. 上图这样的关系模式就是第一范式形式. 它的问题是,姓名与学院会出现多次,因为可以选择多门课,而且有多个学生.这就是数据冗余问题. 因为要修改大量重复数据,可能会导致更新异常,有一些没有修改.
插入异常就是:如果有新入学的学生,还未选课,由于这里课程号为主码之一,根据实体完整性约束,课程号不能为空,就造成了插入异常.
删除异常就是:如果管理学院的学生信息需要删除,这样就将管理学院也删除了,不希望这样.希望保留学院,然后删除学生信息. 第一范式的表中,存在非主属性部分依赖于码(如:姓名部分依赖于(学号,课程号)),如果没有部分依赖,就叫做第二范式. 如上图,我们将第一范式的表分解为两部分,第一部分,学号为码,第二部分,(学号,课程号)为码.就建立了两个第二范式的关系模式.
但是第二范式的情况,还有数据冗余的问题.如果一个学院有1000个学生,那么这个学院名称就出现1000次在表中. 这里紫色的话很重要. 在上面的第二范式中,由于第一个表的学号决定学院编号,学院编号决定学院名称.这就构成了一个传递函数依赖.
这里不可以将学生信息存一个表,学院信息存一个表,这样就失去关联了,所以在学生表后面必须加一个学院编号.
通过将第一范式转化为第三范式形式.就解决了前面提到的四个问题.
如果有b决定c,那么这个第三范式就不是一个bc范式.
对于函数依赖,分为完全函数依赖,部分函数依赖与传递函数依赖. 码指的是候选码. 这里第三条性质一旦成立,如d决定f,那么就会存在传递依赖. 来看学生表,选修课程与兴趣爱好都多值依赖于学号,并且兴趣爱好与选修课程之间没有关系.我们就将他化简为两个第四范式 这里的书目表,它的作者多值依赖于isbn编号.排名也多值依赖于isbn编号,但是作者决定排名,这两个之间不是独立的.这种情况下书目这个表就是一个4范式.它有非平凡多值依赖,但是其中有函数依赖.(上面是说书目1)
对于书目的关系模式,可以进行分解.四范式的表,一般会比较简洁.只存在几个多值依赖. 现在我们求候选码,可以使用如上方法.就是利用一个候选码可以决定全码.
这里我们看到,题目上没有哪个属性组合可以决定,学生和时间,那么学生,时间就一定在候选码里. 这里ab决定c,ac决定d. 就可以知道ab是abcd的候选码. ab决定a,b(自身)是成立的. ab决定c,就有了abc,再来推出d
所以第一小问选d.
第二小问,首先R一定是一个第一范式形式,那么R是不是一个第二范式,就要看R是否存在非主属性对码的部分函数依赖.一旦存在部分函数依赖就需要, :属性组合,并且属性组合中有一个可以单独决定一个非主属性. 可以看到题中的,属性组很多,但是能单独决定的很少.比较后得到是一个第二范式.
那么R是不是一个第三范式呢? 这里注意(时间,学生)决定(教室,时间),一个属性组可以决定另一个属性组. 这样就存在了传递函数依赖. 这种情况就不是传递函数依赖,因为它违反了y不能是x的子集.还有一个限制是,y不能决定x. 所以这里还需要检查(教室,时间)不能决定(时间,学生)
第二小问选b,最高到2范式 第三小问选c,本身就是码,也就不会存在部分和传递函数依赖.注意bc范式找的是所有主属性对于不包含它的码,完全函数依赖.上面的定义将ab决定a的情况排除了.
2,armstrong公理系统 这就是自反率,代表情况就是之前常用的ab决定a.这里给出了理论支持.
这里的传递率,可以看出是传递函数依赖的推广,我们可以说传递函数依赖一定是传递率的体现,但是满足传递率不一定是传递函数依赖关系,因为还有很多限制. 这就是合并规则的例子. 并且合并规则还可以推广到左边.
分解规则例子如上 这里的F并不是F+,F+是由F推导出来的全部.
以上是属性的闭包定义.A可以推出u. 例题如上:这个例题采用的是分步计算.并且可以看到, AD是U的一个候选码. 这里我们求候选码,需要将U中的所有属性分为这四类. 其中结论一,x必为R的任一候选码的成员,意思是:所有候选码中包含x.同理的还有NLR成员,如果他们组合后的属性集为U,则必为R的唯一候选码. 例子如上,前面的√,×,o表示一定在候选码,一定不在候选码,可能在也可能不在. 首先将一定在的结合起来,如果可以得到U,那么就是唯一候选码 这道题,发现一定在的属性结合起来得不到U,那么就需要进行第三步,将A与可能在的属性,一 一结合起来,找到所有的候选码.(注意可能不止一个候选码.)
这里的L和NLR为什么一定在候选码里?因为如果不在右边,就说明,没有属性可以决定他们,必须带上他们自己,让自己决定自己.
同理,R一定不在候选码中,因为这个属性不决定其他任何属性,那么候选码中有没有它,不影响结果,候选码定义又要求真子集不能是候选码,所以R必不可能在候选码中. 这里的第一条,就是所有函数依赖右边必须为一个属性,如a→bc就不行,应该改为a决定b,a决定c. 第二条,例子就是,a→d,d→e,与a→e的效果等价,所以a→e就是冗余的. 第三条,要求左边没有冗余的属性,如ac决定d,那么取ac一个子集,如c,c不能决定d,说明a不是冗余的.再取子集d,a可以决定d,说明c是冗余的,可以去掉.
3,模式分解及分解后的特性. 这里特别注意,这个无损运算的定理,只适用于两个子模式的情况. 看下面的例子,其中ρ1表示第一个关系为(a,b),ρ2表示第二个关系为(b,c). 那么我们根据定理就需要求出1,2,3,然后第四步看是否依赖关系在F的闭包中(由F推导而来), 可以看到第一个分解不是无损分解.第二个分解是无损分解. 保持函数依赖就是:分解后的表制约关系并起来等于F的闭包. 那么对于这三个例子来说,都没有保持函数依赖. 因为(1)a1a2决定a3,但是分解的a2,a3都不在一张表里,怎么会有依赖关系 同理(2)(3)也一样.前提必须分解前F中一个函数依赖的涉及元素必须在一张表,才可能保持函数依赖.
本章的后续内容讲的是如何将一个关系模型分为多个关系模型,并且保持无损连接.考试不考.
以下为本章真题 答案为d,b 第一题,左边不是不能有单属性,而是不能有冗余的属性. 第二题:选b, 答案为:b,c,d,c 答案为a,d,d 这两道题可以更好理解范式之间的关系. 第二道题,的部分依赖表现在,(学院,课程号)为码,但是学院可以单独决定很多属性.所以不属于第二范式. 同时,存在学院决定学院领导,而学号可以决定学院,这里有了传递依赖,造成了数据冗余,所以将49题d选项中s表再拆分才可以形成第三范式形式.
这里还有一个,课程号决定课程.使得需要分成三个表,否则就会出现部分依赖.不会出现传递依赖. 注意这里,学号课程名是决定不了成绩的,因为课程名并不能决定课程号. 答案为:d,c 其中注意第二题,a,b选项中存在传递关系.可以得到wx决定z,所以结果错误. 答案为,a,d 其中,第一问,求候选码最后一步是求属性的闭包.属性闭包的求法就是一个个∪起来. 第二问,我们在看c是否决定abe,或者c决定d时,不能只看F,而应该看F的闭包. 答案为a,b,c 其中第二题,bcnf一定不会有传递函数依赖.说明bc范式不能保证关系的实体完整性. 选项为,d,c,b 这里由第一条性质,e决定c,得到aeb决定c 答案为c,c 选项为:b,c,d 答案为:b,c,d
答案为,d,cb,d 注意这里第一题的第二小问,表面上看,AB为主码,并且B决定c,这个角度看是第一范式. 但是,注意第三范式是消除非主属性对主属性的部分和传递函数依赖,所以非主属性只有E,所以为第三范式.但是不是bc范式,因为主属性之间存在部分依赖关系(ac主码时,c决定d.)传递函数依赖(ad主码时,b决定c)
所以选c 第二题的第二问,满足四范式,需要将多值传递放在一张表中.选d 答案为:c,a,c,b,c 其中第一题的第三小问,是否保持函数依赖.在这里是成立的,可以看到,这里判断保持函数依赖只要看分解表中是否包含F的全部关系.
后面两道题需要记忆. 答案为:d,d,a,b 这里需要注意最后一道题,r1保证了(a→b,a→c,c→d)后面的保证了(aeg之间的关系.)
答案为b,d 答案为:c,c,a 第二题不需要多说. 第一题,首先需要认真表述后面的两句话. 其次,是cbnf就一定是第三范式. 所以选c 答案为:d,b,c 首先第一问是多对多,虽然一个员工在同一时间只能存在于一个部门,但是表中联系会出现一个员工对应多个部门的情况. 其次,第三问,部门号,电话必须在一张表中,并且只有这两列. 还有工作表中需要存入调入时间和调出时间. 从这里可以看到,工作表就像是一张联系的表.其他的是实体表.这里面需要有调入调出时间. 答案为:b,c 注意,第二小问说的是,a决定b没有丢失,丢失了后面一个依赖关系.所以r1多出来的c属性,没有关系. 答案为:b,c,d,d 这里的第三小问,由于存在复合属性,所以不属于1范式关系模式. 第四小问,存在多值依赖,所以需要构造一个4范式,并且有(关系,联系电话)两个属性与(家庭成员)是存在依赖关系,所以需要放在同一张4范式表. 答案为:d,c,a,d 其中第二题,会发现,4范式原来是用来解决多值属性的问题的.
这道题选b,d 其中主属性为a,d,那么一定不存在部分函数依赖.在F中有传递函数依赖.所以为二范式. 这里可以知道我们一般看的就是F集,而不是其闭包. 另外对于bc范式,课本上例子给的就是传递依赖的例子.并且是主属性b传递依赖于(b,c),说明bc范式并不是只看主属性与不包含他的码. 这道题选c. 因为u2-u1依赖于u1∩u2也可以.这里注意决定→方向是正确的.对于多值依赖无损连接,课本上没讲. 答案为:d,a,a 第一题,如果左边不包含码,那么一定存在传递函数依赖.注意一定是从F出发,看非主属性是怎么来的.是传递来的,还是部分依赖.
第二题,平凡的多值依赖,一定是4范式的关系模式. 并且还涉及了多值传递的性质,c选项x→→z-y 第一题选d,d的形式如上.不满足1nf 下面来看第二题,首先,判断部分函数依赖和传递函数依赖, 首先应该找到主属性,这是最关键的. 其次,可以看到,将文字抽象成符号,可以有助于理解题意. 这就是平凡和非平凡函数依赖
码指候选码,题目中的码指的是一个完整的候选码.
答案为:a,d,d 其中第二小题的这个分解就是保持函数依赖的分解.将函数依赖关系分到两个关系模型中来写.
注意第三小题,选d. 前面提到过,平凡的函数依赖,就是(a,b)决定a. 平凡的多值依赖需要知道整个表的属性组才能判断,在选课表中,并不只有x,y两个属性组.所以不是平凡的多值依赖.
其中非函数依赖的多值依赖,就可以理解为普通的多值依赖,在这道题中,这个多值依赖比较特殊. 答案为a,c,d
|