关系数据理论
- 范式引入
范式需要解决的问题:Update Anomalies(更新异常)
更新异常:插入异常、删除异常、修改异常
-
函数依赖
A → B (B依赖于A)知道A就有唯一确定的B
X → Y X可以是一个包含很多列的集合
函数依赖需要有一定的语义含义在里面
平凡的一个函数依赖
如何通过函数依赖得出候选码
1.没有出现在FD中的。
2.没有出现在右边的。
没有给出函数依赖的话就直接根据语义去找。如果整个元组都是候选码那么就叫它全码。
-
阿姆斯特朗公理
1.自反律
B是A的子集,那么就有 A → B
2.增广律
如果 A → B 那么有 A ∪ C → B ∪ C
3.传递律
如果 A → B 和 B → C 那么有 A → C
分解律
分解右边,不分解左边。
闭包
概念:在关系模式R<U,F>中为F所逻辑蕴含的函数依赖的全体叫作F的闭包,记作F+。
函数依赖集的等价
F1 能推出 F2 , F2能推出F1即可(运用阿姆斯特朗公理)
找最小的函数依赖集
三个步骤:
1.右部分解
2.判断每一个在F中的X→Y,是否有 F ≡ F-{X→Y}成立
如果有的话就可以去掉。
3.判断在F中的 X→Y (A包含于X),是否有 F ≡ (F-{X→Y})∪{A→Y}
如果有的话就用 A→Y 代替 X→Y
- 范式
范式是关系模式的集合,1NF,2NF,3NF(BCNF), 4NF
规范化:就是把低范式转换为高范式。
关系模式分解的标准
1.没有冗余
2.无损连接分解
分解前后的数据需要保持一致
怎么判断
所有的属性都要在 R = R1 ∪R2
而且要满足下列某一条函数依赖在闭包内(分解成两个表的情况):
–R1∩R2→R1-R2
–R1∩R2→R2-R1
如果是分解成多个表,可以用填表法来判断:
就是把分解后的表格填起来,如果有一行都是a的话,那么这个分解是保持了无损连接的分解。
3.函数依赖保持
分解前后的函数依赖关系没有变
判断:原先的函数依赖的闭包 是否等于 后面分解完所有表的函数依赖的并的函数依赖的闭包。
范式等级
1NF:
每一个元素都是原子的即可达到一级范式
2NF:
需要完全函数依赖,不能出现部分函数依赖.
如果候选码是单属性,那么至少为2NF
1NF → 2NF 去掉部分函数依赖即可,把部分依赖的那部分属性移出去,形成一个新的表。
3NF:
非主属性不出现传递函数依赖于候选码的现象
2NF → 3NF 消除非主属性对候选码的部分和传递函数依赖,如果是对主属性的传递函数依赖,那么将主属性和非主属性重新放到一张新的表里面。
BCNF:
主属性不出现传递函数依赖于候选码的现象
1.若3NF中存在重叠的复合候选码,则3NF可能是BCNF,也可能不是BCNF。
2. 若3NF中不存在重叠的复合候选码,则3NF一定是BCNF。
BCNF:
主属性不出现传递函数依赖于候选码的现象
1.若3NF中存在重叠的复合候选码,则3NF可能是BCNF,也可能不是BCNF。
2. 若3NF中不存在重叠的复合候选码,则3NF一定是BCNF。
3NF → BCNF:消除主属性对候选码的部分和传递函数依赖即可。(也是重新建表)