提醒:知识点内容均为了便于理解而口语化的,因此考察定义时建议使用官方语言
知识点:
非平凡函数依赖:X->Y,且Y不是X的子集
完全函数依赖:X->Y,且对于X的任意子集,都不能推出Y
部分函数依赖:X->Y,X的某个子集也能推出Y,Y部分函数依赖于X
候选码(主码):能唯一决定其他属性的属性组
例如:学号 姓名 专业 GPA
有可能出现重名的情况,因此,同一个姓名可能推出两个学号,因此,姓名不能为候选码,但是学号只能推出一个姓名,专业,GPA,因此,学号是候选码,请注意,这只是一个简单的例子,在复杂的情况,可能有多个属性才能决定其他的属性,因此是属性组
超码:能推出所有属性的属性组的集合,候选码是最小的超码
主属性:在任何一个候选码中都出现的属性
非主属性:在任何一个候选码中都没出现的属性
外码:关系模式R中,若有一个属性或属性组X,不是R的码,是另一个关系模式S的码,X是R外码
全码:整个属性组都是码
1NF:所有属性都不可分割 例如:学校,如果可以分成高中和大学,就不满足1NF
2NF: 没有部分函数依赖
3NF:没有传递函数依赖 传递函数依赖:A->B B->C A->C
BCNF:在函数依赖集中,左侧包含整个候选码(属性组)
例如:F = {AB->C ACD->F}如果ABC为候选码,则不满足BCNF范式
4NF:没有多值依赖(一般不考)
模式分解的准则:无损连接,保持函数依赖
大题一:求所有候选码的方法
实际就是求哪几个元素可以推出剩下的元素
1.分类:一定:只在左边,或不出现,B,D
可能:左右都出现,A,C,E
不属于:只在右边出现,G
2.闭包运算:一定是候选码的闭包运算,看是否包含全部内容,不能则与可能是的组合,进行闭包运算 B,D的闭包是{B,D} A,B,D的闭包是{A,B,C,D,E,G}可以 B,C,D也可以
同理,{(ABD) (BCD) (BDE)}都是候选码
判断X->Y是否成立 使用闭包运算
大题二:范式的判断和分解方法
例题二:设R{A,B,C,D}若码是AB,F中为{A->C,AB->D},是否满足2NF(第二函数依赖)?
由于C可以直接由A推出,不需要B,因此,有部分函数依赖,不满足2NF,分解很简单,把不符合的拿出来就行 R1{A B D} R2{A C}
例题三:设R{A,B,C,D}若码是AB,F中为{AB->C,C->D},是否满足3NF(第三函数依赖)?
有传递函数依赖,不满足3NF,分解很简单 R1{A B C} R2{C D}
例题四:若R是(A,B,C)F是{AC->B AB->C B->C} 候选码是AC和AB B->C中不包含码,因此,不满足BCNF范式
大题三:最小函数依赖集
1.拆分右侧 如果A->BC 则拆分成A->B和A->C
2.去除自身求闭包 若有AB->C BC->E AE->G,如果去除AB能推出的C,我们发现还可以推出C,则AB->C可以去掉了
请注意:这里是只去除AB->C,然后看AB这个组合能不能运用其他的关系推出C
3.左侧最小化 如果ABC->D 我们就找ABC之间的关系,看看是否能将其减少
大题四:模式分解
1.画表格,列表示所有的属性(A,B,C,D,E),行表示分解的关系(R1,R2,R3,R4,R5)
2.填内容,如果关系R中含有某一列的就写为a,没有就写为b,a的下标是列的顺序,b的坐标是它自身的坐标
3.更新:看F,依次执行,例如,题目中我们先执行A->C,然后是C->D,以此类推,循环往复
更新表格内容:对于A->C,我们就看A那一列,A的哪一列含有a,就将其对应到同行的C中,如果所有对应的C列的数值都为b,则将所有b改为坐标最小的b,一旦对应的含有a,就将b中对应的全部改为a 如果A中有b的坐标完全相同的,就将其再次对应C,没有则不需要操作
4.循环,直到某一行全部变为a,或经过多次扫描后表格没有更新,则循环结束
5.如果某行全为a,则该分解具有无损连接性
练习题可查看CSDN:
数据库作业15:第六章: 关系数据理论 总结+习题_例题 已知关系模式 判断属于第几范式,写出函数依赖,写出主码候选码,规范化到-CSDN博客