关系数据库设计理论
定义
函数依赖
如果
R
R
R 的两个元组在属性
{
A
1
,
A
2
,
.
.
A
n
}
\{A_1,A_2,..A_n\}
{A1,A2,..An} 上一致,那么它们必定在其他属性
{
B
1
,
B
2
,
.
.
B
m
}
\{B_1,B_2,..B_m\}
{B1,B2,..Bm} 上也一致。记为
{
A
1
,
A
2
,
.
.
A
n
}
→
{
B
1
,
B
2
,
.
.
B
m
}
.
\{A_1,A_2,..A_n\} \rightarrow \{B_1,B_2,..B_m\}.
{A1,A2,..An}→{B1,B2,..Bm}.
并称
{
A
1
,
A
2
,
.
.
A
n
}
\{A_1,A_2,..A_n\}
{A1,A2,..An} 函数决定
{
B
1
,
B
2
,
.
.
B
m
}
\{B_1,B_2,..B_m\}
{B1,B2,..Bm} 。
键
若下列条件满足,则称一个或多个属性集 { A 1 , A 2 , . . A n } \{A_1,A_2,..A_n\} {A1,A2,..An} 是关系 R R R 的键。
- 这些属性函数决定关系的所有其他属性。
- 在 { A 1 , A 2 , . . A n } \{A_1,A_2,..A_n\} {A1,A2,..An} 的真子集中,没有一个能函数决定 R R R 的所有其他属性。
超键:一个包含键的属性集就叫做超键。
属性的闭包
设 { A 1 , A 2 , . . A n } \{A_1,A_2,..A_n\} {A1,A2,..An} 是属性集合,S是FD的集合。则S集合下的属性集合 { A 1 , A 2 , . . A n } \{A_1,A_2,..A_n\} {A1,A2,..An} 的闭包是满足下面条件的属性集合B,即使得每一个满足S中所有FD的关系,也同样满足 A 1 , A 2 , . . A n → B A_1,A_2,..A_n\rightarrow B A1,A2,..An→B. 记为 { A 1 , A 2 , . . A n } + \{A_1,A_2,..A_n\}^+ {A1,A2,..An}+
{ A 1 , A 2 , . . A n } \{A_1,A_2,..A_n\} {A1,A2,..An} 是关系 R R R 的超键 ⟺ \iff ⟺ { A 1 , A 2 , . . A n } + \{A_1,A_2,..A_n\}^+ {A1,A2,..An}+ 为关系 R R R 的所有属性
属性集闭包算法
异常
当试图在一个关系中包含过多信息时,产生的问题称为异常。异常的基本类型有:
- 冗余 (redundancy) : 信息没有必要地在多个元组中重复。
- 更新异常 (update anomaly) : 可能修改了某个元组的信息,但是没有改变其他元组中的相同信息。
- 删除异常 (deletion anomaly) : 如果一个值集变成空集,就有可能带来丢失信息的副作用。
分解
给定一个关系 R ( A 1 , A 2 , . . . , A n ) R(A_1,A_2,...,A_n) R(A1,A2,...,An),把它分解为关系 S ( B 1 , B 2 , . . . , B m ) S(B_1,B_2,...,B_m) S(B1,B2,...,Bm) 和 T ( C 1 , C 2 , . . . , C k ) T(C_1,C_2,...,C_k) T(C1,C2,...,Ck),并且满足:
- { A 1 , A 2 , . . A n } = { B 1 , B 2 , . . . , B m } ∪ { C 1 , C 2 , . . . , C k } \{A_1,A_2,..A_n\} = \{B_1,B_2,...,B_m\} \cup \{C_1,C_2,...,C_k\} {A1,A2,..An}={B1,B2,...,Bm}∪{C1,C2,...,Ck}
- S = π B 1 , B 2 , . . . , B m ( R ) S = \pi_{B_1,B_2,...,B_m}(R) S=πB1,B2,...,Bm(R)
- T = π C 1 , C 2 , . . . , C k ( R ) T = \pi_{C_1,C_2,...,C_k}(R) T=πC1,C2,...,Ck(R)
分解具有三个性质:
- 消除异常
- 信息的可恢复
- 依赖的保持
其中BCNF分解可以保持(1),(2),第三范式可保持(2),(3)
Boyce-Codd范式 (BCNF)
关系 R R R 属于BCNF当且仅当:如果 R R R 中非平凡FD A 1 , A 2 , . . A n → B 1 , B 2 , . . B m A_1,A_2,..A_n \rightarrow B_1,B_2,..B_m A1,A2,..An→B1,B2,..Bm 成立,则 { A 1 , A 2 , . . A n } \{A_1,A_2,..A_n\} {A1,A2,..An} 是关系 R R R 的超键。
其等价描述为:每个非平凡FD的左边必须包含键。
重复选择使用适当的分解,可以把任何一个关系模式分解为带有下列重要性质的具有多个属性的子集:
- 以这些子集为模式的关系都属于BCNF。
- 原始关系中的数据都被正确地反映在分解后的关系上。
关系 R R R 总是可以分解为关系集合,其中每个关系均属于BCNF。
BCNF分解算法
无损连接
如果关系 R R R 在分解后,其可通过连接分解的各关系重构原关系 R R R,则称该分解含有无损连接。
如果 Y → Z Y\rightarrow Z Y→Z 或 Y → X Y\rightarrow X Y→X 在关系 R R R 上成立,且 R R R 的属性集为 X ∪ Y ∪ Z X\cup Y\cup Z X∪Y∪Z, 那么 R = π X ∪ Y ( R ) ⋈ π Y ∪ Z ( R ) . R=\pi_{X\cup Y}(R)\bowtie\pi_{Y\cup Z}(R). R=πX∪Y(R)⋈πY∪Z(R).
BCNF分解含有无损连接。
第三范式
关系 R R R 属于第三范式 (3NF) , 如果它满足:
只要 A 1 , A 2 , . . A n → B 1 , B 2 , . . B m A_1,A_2,..A_n \rightarrow B_1,B_2,..B_m A1,A2,..An→B1,B2,..Bm 是非平凡FD,那么或者 { A 1 , A 2 , . . A n } \{A_1,A_2,..A_n\} {A1,A2,..An} 是超键,或者每个属于 B 1 , B 2 , . . B m B_1,B_2,..B_m B1,B2,..Bm 但不属于A的属性都是某个键的成员。
如果一个属性是某个键的成员,则常被称为“主属性”(prime),则第三范式可表述为:
对于每个非平凡FD,或者其左边是超键,或者其右边仅由主属性构成。
第三范式较BCNF更为宽松