设计理论通常是关系理论中的一个固定组成部分。
然而,它不是关系模型本身的一部分。
相反,它是建立在这个模型顶层的独立理论。

关系模型本身并不关心数据库设计得“好”与“坏”。

无损分解与 1NF

定义:
关系变量 R 是 1NF,当且仅当可以合法赋值给 R 的每个关系 r 都是 1NF 的。
当且仅当可以合法赋值给 R 的每个关系 r 中的每个元组应该满足:

  • (a)每个属性都恰好只有一个
  • (b)除此之外,没有其他条件。

第一范式存在的问题,如 SPCT 关系:

SNO PNO QTY CITY STATUS
S1 P1 300 London 20
S1 P2 200 London 20
S2 P1 300 Paris 10
S1 P1 300 Paris 20

在以上关系中,具体特定城市的供应商,以及具有特定状态的供应商都会出现多次。

插入异常

我们插入位于雅典的供应商 S5,直到该供应商提供零件。

删除异常

如果执行删除供应商 S2,因为只有一条信息,则删除后,关于该供应商的所有信息即丢失

修改异常

如果修改 SNO 为 S1,PNO 为 P1 的供应商的城市信息,则会出现明显的不一致,则会导致 S1 供应商存在与两个城市(除非一个供应商可以位于多个城市)

无损分解

我们需要把关系变量 SPCT 替换成两个单独的关系变量。

一个就是常用的供应商变量 S:

SNO STATUS CITY
S1 20 LONDON
S1 30 LONDON

另一个是供应关系变量 SP:

SNO PNO QTY
S1 P1 300
S1 P2 300

可以看出,分解出来的两个关系变量 S 和 SP 都是关系变量 SPCT 的投影,而且,如果我们把这些投影再联接在一起,就要恢复成原来的关系变量。

因而,从这个例子可以得出如下结论(或者至少是强烈建议的):
更高级别的范式(如 2NF、3NF 等等)应该满足:
(a)可以通过投影的方式来分解一个关系变量;
(b)可以消除冗余;
(c)分解前的关系变量应该等价于这些投影的联接

因为要特别考虑到(c),所以分解过程必须是无损的,即不能丢失任何重要信息。

函数依赖

定义:
X 和 Y 是关系变量 R 两个属性子集,那么函数依赖(FD)X→Y 在 R 中成立,当且仅当如果属性集合 X 中每个属性的值构成的集合唯一地决定了属性集合 Y 中每个属性的值构成的集合,则属性集合 Y 函数依赖于属性集合 X,记为:X→Y

属性集合 X 中的属性有时也称作函数依赖 X→Y 的决定因素(determinant),Y 称为被决定因素(dependent)。

函数依赖 FD {SNO} → {CITY}来自于关系变量 SPCT(一个供应商号码可以找到唯一对应的城市)。
当然,关系变量 SPCT 中也存在函数依赖{SNO} → {STATUS}。
因此,我们可以把这两个函数依赖进行合并简化,如下:
{ SNO } → { CITY , STATUS }

注意,这里使用的是大括号。
X 和 Y 都是 R 的子集,因此也是集合,即使在{SNO} → {CITY}的情况下,它们也是单独的集合。
以此类推,X 和 Y 的值也都是元组,即使恰好有时它们的度为 1

不严格地讲,如果存在任何其他的函数依赖,那么这个设计就很糟糕。

最小函数依赖

如果关系变量 R 中存在函数依赖 X→Y,那么就存在函数依赖 X′→ Y′,X′是 X 的子集,Y′是 Y 的子集。
换句话说,你可以向决定因素中添加属性,或者从被决定因素中减少属性,仍然可以得到关系变量中的函数依赖。
例如,关系变量 SPCT 中存在函数依赖{ SNO } → { CITY , STATUS },则函数依赖{ SNO , PNO } → { CITY }也是成立的(向决定因素中增加了属性 PNO,从被决定因素中减少了属性 STATUS。
那么,如果函数依赖 X′→ Y′成立,但函数依赖 X→ Y′对于 X′任意的子集 X 都不成立,那么 X′→ Y′就是最小函数依赖。

例如,关系变量 SPCT 中的函数依赖{ SNO , PNO } → { QTY }就是最小函数依赖,
但{ SNO , PNO } → { CITY }不是, 因为在该关系变量中存在函数依赖{SNO} → {CITY}。

2NF 第二范式

定义:关系变量 R 是第二范式(2NF),当且仅当 R 中的每个码 K 和 R 的每个非码属性 A,其函数依赖 K→ {A}是不能简化的。
注意,关系变量 R 的非码属性是指 R 的属性不是码的组成部分。

例如关系变量 SPCT 为什么是 1NF,而不是 2NF?

因为
(a){SNO,PNO}是码;(b)存在函数依赖:{SNO ,PNO} → {CITY}、{SNO ,PNO} → {STATUS},但是(c)这个函数依赖是可以进行简化的。

因此在关系变量SPCT中存在冗余的资源。

第二范式的另外一个定义:

定义:
关系变量R是2NF,当且仅当R中存在的每一个非平凡的函数依赖X→ Y,至少满足如下条件之一:(a)X是超码;(b)Y是子码;(c)X不是子码。

注意,所有的码都是超码,但是大多数超码不一定都是码

3NF 第三范式

BC 范式

第四范式