关系数据库设计
1.分解decompose
函数依赖functional dependency:num→amount,amount依赖于num,num确定amount也能确定。
非码(非候选码)属性需要分解
有损分解lossy decomposition:能分不能合
无损lossless连接分解:分解后能通过自然连接恢复
2.第一范式First Normal Form
如果元素是不可分割的,域就是原子的atomic
如果R的所有属性的域都是原子的,那么关系模式R就是第一范式
3.函数依赖
函数依赖:用来判断关系(函数依赖集下合法),判断方法从语义上类似超码
函数依赖集:F{A→B,C→D}
如果关系r在F下合法,称r满足satisfy F。
函数依赖就相当于超码的优化
平凡trivial函数依赖:X→Y(Y⊂X)
超码:K→R
F的闭包closure F+:F逻辑上所有函数依赖的集合(全集)
F+是F的超集
4.BCNF(BC范式)
R满足BC范式需要函数依赖F(语义),对所有F+,a→b,a和b都是R的子集,满足a→b是平凡的trivial或a是R的超码(对所有F+中函数依赖,左面不是超码,就不符合BC范式)
简易BC范式的分解:若a→b的a不是超码,R1 = a∪b(=AB)、R2= R-(b-a)(=R-B=ABC-B=AC),
b-a=b :ab没有交集
分解保持函数依赖:分解后的单独关系上的依赖关系保证所有函数依赖都成立(所有依赖都能在某一个子模式实现)
是无损分解,不是保持依赖的分解
BC范式判断:计算a+判断是否包含R的所有属性
(对于不符合BC范式的a → \rightarrow → b,分解为R1 = a+,R2 = a和其他不包含在R1中的元素)
5.第三范式Third NF
相比于BC范式多出一个可选条件:b-a的每个属性都包含在R的候选码中(候选码可以不同)
满足BC范式必定满足第三范式
第三范式(BC范式的最小扩展)能确保函数依赖
规范化的目标:R是F的关系模式,判断R是不是好的
不好就分解,分解后必须保证无损分解,最好能保证函数依赖
三范式分解:最小覆盖Fc中,a→b,增加子模式R1 = a∪b,如果几个子模式中有一个包含候选码就结束,如果不包含就多定义一个包含候选码的子模式
6.闭包
Armstrong’s Axioms公理:
自反律:b⊆a,则a→b
增广律:a→b,那么ca→cb
传递律:a→b,b→c那么a→c
求取F+:将初值交给F,然后对F+的每个函数依赖f,对f应用自反律和增广律,加入到F+中。每一对函数依赖f1、f2上,就用传递律。直到F+不变。
定理:
a→b,a→c,则a→bc
a→bc,则a→b,a→c
a→b,cb→d,则ac→d
F下的属性闭包aF+:a在函数依赖集F下所有决定关系(a → \rightarrow → ?)
a的闭包:如果b→c,b在a中,就把c加入到结果中
如果a+=R,则a是超码
7.正则覆盖Canonical Cover
冗余:a→c,在a→b和b→c的情况下
正则覆盖:**Fc**就是最小的函数依赖集
无关属性:对a → \rightarrow → b,A是无关属性
如果属性A在a中,则 F ′ = ( F − a → b ) ∪ ( a − A ) → b F' = (F-{a \rightarrow b }) \cup {(a-A) \rightarrow b} F′=(F−a→b)∪(a−A)→b(就是将A从a中删除)
如果属性A在b中,则F’ = (F- { a → b }) ∪ \cup ∪ {a → (b-A)} (a→bc可以和a→b合并)(A从b中删除)
证明属性A无关:对a → \rightarrow → b
如果A在a中,计算a去掉A属性后的闭包(a-A)+(对F),看是否包含b
如果A在b中,F’ = ( F − (F- (F−{ a → b a \rightarrow b a→b}) ∪ \cup ∪ {a → (b-A)},检查a+中包含A(A从b中删去后计算a+(对F’),包含A就是无关属性)
8.无损连接分解和保持函数依赖的分解
相交属性是任意一个集合的主码
无损连接:R1 ∩ \cap ∩R2 → \rightarrow →R1或R1 ∩ \cap ∩R2 → \rightarrow →R2在F+中
保持函数依赖:检查分解后的函数依赖Fi的并集是否等于F+
保持函数依赖的检查:检查a → \rightarrow →b是否在分解后子集存在
9.多值依赖Multivalued Dependencies
a → \rightarrow → → \rightarrow →b(同时a → \rightarrow → → \rightarrow →else)
a | b | else | |
---|---|---|---|
t1 | a | b1 | c1 |
t2 | a | b2 | c2 |
t3 | a | b1 | c2 |
t4 | a | b2 | c1 |
y → \rightarrow →z则y → \rightarrow → → \rightarrow →z
10.第四范式
a→→b是平凡的trivial或a是R的超码
11.其他
时态数据:随时间变化值发生改变