一些定义
平凡函数依赖和非平凡函数依赖;
X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
X→Y,但Y⊆X 则称X→Y是平凡的函数依赖
注意:平凡函数依赖都是必然成立的 不反应新的语义 若不特别声明,我们总是讨论非平凡函数依赖
数据依赖;
1、是一个关系内部属性与属性之间的一种约束关系
2、通过属性间值的相等与否体现出来的数据间相互联系
3、是现实世界属性间相互联系的抽象
4、是数据内在的性质
5、是语义的体现
数据依赖分为;函数依赖和多值依赖。
范式的关系
范式的关系为:从第一范式->第五范式范围逐渐缩小,也就是如下的关系
在我们确定范式的时候最初始也是最简单的办法就是从范围开始递推,也就是从左往右确定,确定到最高级别那么就找到了属于的 范式。
范式的确定关系
2NF:若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
3NF:设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z (Y⊇ Z), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R<U,F> ∈ 3NF。
BCNF: 设关系模式R<U,F>∈1NF,若X →Y且Y ⊆ X时X必含有码,则R<U,F>∈BCNF。
换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。
4NF:定义: 关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。
和范式相关的定义
候选码:设K为R<U,F>中的属性或属性组合。若K可以完全确定U则K称为R的一个候选码(Candidate Key)。这里和我们的候选码确定就有一些联系,我们求得都是最小长度的候选码,否则就成了超码,
超码:如果U部分函数依赖于K,即K → U,则K称为超码。
主码:若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。
主属性 非主属性:包含在任何一个候选码中的属性 ,称为主属性,不包含在任何码中的属性称为非主属性。(需要说的是比如我们候选码为(a,b,c),那么拆开也算超码,就是只要是子集就行)。
全码:整个属性组是码,称为全码(All-key)
规范化过程
部分自己理解的阐述
1、第二范式其实就是看有无部分函数依赖。
2、第三范式就是看是否存在函数传递(只要开始的是候选码,终止的是非主属性码就行,中间的没有约束)。
3、BCNF范式就是看最左边的确定因素是不是都包含码。
4、对于候选码的确定我们可以使用子集
5、对于BCNF则不能看子集,只能看整体。
闭包的运算
闭包(记作X+ )就是由一个属性直接或间接推导出的所有属性的集合。
对于给定的关系R(A1,A2,…An)和函数依赖集F,可将其属性分为4类:
L类 仅出现在函数依赖左部的属性。
R 类 仅出现在函数依赖右部的属性。
N 类 在函数依赖左右两边均未出现的属性。
LR类 在函数依赖左右两边均出现的属性。
求法:
我们先找到L 和 N ,求交集,然后进行闭包运算,也就是递推运算,需要注意的是我们得到的递推结果可以作为递推条件来使用。
结论:L 和 N 肯定在候选码中,R肯定在非候选码中。
例1、
设关系模式 U=(A , B , C , D ),
函数依赖集
F={D→ B , B → D , AD → B , AC → D},
求 U 的候 选码。
解:
(1) L=(A , C), R=空, LR=(B , D), N=空;
(2) L∪N=(A , C), 因为(AC) + = ACBD = U,
AC 是唯一候选码
下面是一个有一个具有争议的题目:
【例3】
设关系模式 U=(A , B , C , D , E , F ),
函数依赖集
F={A→BC , BC→A , BCD→EF , E→C},
求 R 的候选码。
解:
(1) L=(D), R=(F), LR=(A , B , C , E ), N=空;
(2) L∪N=(D) , D+=D;
(3)因为 (DA)+=DABCEF=U, (DB)+=DB ,(DC)+=DC, (DE)+=DEC, 所以 DA 是候选码;
(4)因为 (DBC)+=DBCAEF=U, (DBE)+=DBECAF=U, (DCE)+=DCE, 所以DBC、DBE 是候选码;
(5) U 的候选码有 DA、DBC、DBE
(等老师讲完更新hhh不太懂)
结尾
其实这篇博客我是当作复习博客来写的并没有很详细的阐述一些关系例如函数依赖那一部分就没有很详细的阐述,不过在我的上一篇博客做题中有提到过,如果有大家想要详细了解的话可以去我们班书记的博客看hhh。