一、问题的提出
针对一个具体问题,应该如何构造一个适当的数据库模式,即应该构造几个关系模式,每个关系由哪些属性组成等。
关系模型有着严格的数学理论作为基础,关系数据库先驱们据此提出了一个进行数据库逻辑设计的强有力的工具——关系数据库的规范化理论。
二、规范化理论
函数依赖
函数依赖的定义定义
设(R(U))是属性集U上的关系模式,(X),(Y)是(U)的子集。若对于(R(U))的任意一个可能的关系(r),(r)中不可能存在两个元组在(X)上的属性值相等,而在Y上的属性值不等,则称(X) 函数确定(Y)或(Y)函数依赖于(X),记作(X ightarrow Y)。
平凡与非平凡函数依赖
平凡函数依赖:
(X ightarrow Y),但是(Y subseteq X),则称(X ightarrow Y)是平凡的函数依赖。
非平凡函数依赖:
(X ightarrow Y),但是(Y subsetneq X),则称(X ightarrow Y)是非平凡的函数依赖。
完全与部分函数依赖
完全函数依赖:
在(R(U))中,如果(X ightarrow Y),并且对于X的任何一个真子集(X'),都有(X' ot ightarrow Y),则称(Y)对(X)完全函数依赖。记作(Xstackrel{F}{longrightarrow}Y)。
部分函数依赖:
在(R(U))中,如果(X ightarrow Y),但(Y)不完全函数依赖于(X),则称(Y)对(X)部分函数依赖。记作(Xstackrel{F}{longrightarrow}Y)。
码(Key)
候选码:
设(K)为(Rleft<U,F ight>)中的属性或属性组合,若(Kstackrel{F}{longrightarrow}U),则(K)为(R) 的候选码(candidate key)。
超码:
一般的,如果(U)函数依赖于(K),即(K ightarrow U),则(K)称为超码(superkey)。超码是候选码的超集。
主码:
若候选码有多于一个,则从中选择一个为主码(primary key)。
外码:
关系模式(R)中属性或属性组(X)并非(R)的码,但(X)是另一个关系模式的码,则称(X)是(R)的外码(foreign key)。
主码与外码提供了一个关系间联系的手段。
范式
关系数据库中的关系是要满足一定要求的,不同程度的要求便为不同的范式。
R为第几范式可以写成:(Rsubset xNF)。
对于各范式,它们之间的联系为:
(5NF subset 4NF subset BCNF subset 3NF subset 2NF subset 1NF)
一个低级的范式可以通过模式分解(schema decomposition)转换为若干个高级的关系模式,这个过程叫做规范化(normalization)。
1NF(确保各属性列保持原子性,是其他范式的基础)
作为一张二维表,关系要符合的一个最基本的条件就是:
关系的每一个分量必须是不可再分的数据项。
2NF(消除了非主属性对码的部分函数依赖)
若(Rin1NF),且每个非主属性完全函数依赖于任何一个候选码,则(Rin2NF)。
3NF(在2NF的基础上,消除了非主属性对码的传递函数依赖)
设关系模式(Rleft<U,F ight>in1NF),若(R)中不存在这样的码(X),属性组(Y)及非主属性(Z)((Zsubsetneq)Y),使得(X ightarrow Y),(Y ightarrow Z)成立,(Y ot ightarrow X),则称(Rleft<U,F ight>in3NF)。
BCNF(在3NF的基础上,消除所有属性对候选码的部分函数依赖与传递依赖)
关系模式(Rleft<U,F ight>in1NF),若(X ightarrow Y)且(Ysubsetneq X)时(X)必含有码,则(Rleft<U,F ight>in BCNF)。
理解:(3NF)强调的是非主属性对码不存在部分函数依赖或传递函数依赖,而(BCNF)则更近一步,在(3NF)的基础上,还强调主属性也不能对码存在部分函数依赖或传递函数依赖。
多值依赖(MVD)
设(R(U))是属性集(U)上的一个关系模式。(X),(Y),(Z)是(U)的子集,并且(Z=U-X-Y)。关系模式(R(U))中多值依赖 (X ightarrow ightarrow Y)成立,当且仅当对(R(U))的任一关系(r),给定一对((x,z))值,有一组值(Y),这组值仅界定与(x)值而与(z)值无关。
平凡的多值依赖:
(X ightarrow ightarrow Y),而(Z=varnothing),即(Z)为空,则称(X ightarrow ightarrow Y)为平凡的函数依赖。即对于(R(X,Y)),如果有(X ightarrow ightarrow Y),则(X ightarrow ightarrow Y)为平凡的函数依赖。
多值函数依赖的性值:
- 对称性。即若(X ightarrow ightarrow Y),则(X ightarrow ightarrow Z),其中(Z=U-X-Y)。
- 传递性。即若(X ightarrow ightarrow Y),(Y ightarrow ightarrow Z),则(X ightarrow ightarrow Z-Y)。
- 函数依赖可看作多值依赖的特例,即若(X ightarrow Y),则(X ightarrow ightarrow Y)。
- 若(X ightarrow ightarrow Y),(X ightarrow ightarrow Z),则(X ightarrow ightarrow YZ)。
- 若(X ightarrow ightarrow Y),(X ightarrow ightarrow Z),则(X ightarrow ightarrow Ycap Z)。
- 若(X ightarrow ightarrow Y),(X ightarrow ightarrow Z),则(X ightarrow ightarrow Y-Z),(X ightarrow ightarrow Z-Y)。
4NF(在BCNF的基础上,消除了非平凡且非函数依赖的多值依赖)
关系模式(Rleft<U,F ight>in1NF),如果对于(R)的每个非平凡多值依赖(X ightarrow ightarrow Y(Ysubsetneq X)),(X)都含有码,则称(Rleft<U,F ight>in4NF)。
小结
规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的分离,即“一事一地”的模式设计原则。让一个关系描述一个概念、一个实体或实体间的一种联系。若多于一个概念就把它“分离”出去。因此所谓规范化实质上使概念的单一化。
三、数据依赖的公理系统
定理:
对于满足一组函数依赖(F)的关系模式(Rleft<U,F ight>),其任意一个关系(r),若函数依赖(X ightarrow Y)都成立(即(r)中任意两个元组(t)、(s),若(t[X]=s[X]),则(t[Y]=s[Y])),则称(F)逻辑蕴含(X ightarrow Y)。
Armstrong公理系统(Armstrong's axiom)
设(U)为属性集总体,(F)使(U)上的一组函数依赖,于是有关系模式(Rleft<U,F
ight>),对(Rleft<U,F
ight>)来说有如下推理规则:
- 自反律:若(Y subseteq X subseteq U),则(X ightarrow Y)为(F)所蕴涵。
- 增广律:若(Xsubseteq Y)为(F)所蕴涵,且(Zsubseteq U),则(XZ ightarrow YZ)为(F)所蕴含。
- 传递律:若(X ightarrow Y)及(Y ightarrow Z)为(F)所蕴涵,则(X ightarrow Z)为(F)所蕴含。
根据上述三条推理规则又可得到下面三条推理规则:
- 合并规则:由(X ightarrow Y),(X ightarrow Z),有(X ightarrow YZ)。
- 伪传递规则:由(X ightarrow Y),(WY ightarrow Z),由(XW ightarrow Z)。
- 分解规则:由(X ightarrow Y)及(Zsubseteq Y),有(X ightarrow Z)。
闭包
在关系模式(Rleft<U,F ight>)中为(F)所逻辑蕴涵的函数依赖的全体叫作(F)的闭包。记为(F^+)。