Database 模式分解和范式总结

关系模式的分解

为什么关系模式要进行分解,这个问题等价于为什么数据库不能用一张表来实现,因为用一张表来实现的数据库 会带来很多异常以及数据的冗余等问题,所以如何确定好分解的原则呢?有两个原则:无损连接和保持函数依赖(FD)。

为了分解后保持原来模式所满足的特性,要求分解处理具有无损连接保持函数依赖

无损连接

什么是无损连接?

关系模式R<U,F>的一个分解 ρ={ R1<U1,F1>,R2<U2,F2>, …,Rn<Un,Fn>},若R与R1、R2、…、Rn自然连接的结果相等,则称关系模式R的这个分解ρ具有无损连接性(Lossless join)

具有无损连接性的分解保证不丢失信息,但是不一定能解决插入异常/删除异常/修改复杂/数据冗余等问题。

0

定理:如果R的分解为={R1,R2},F为R上的函数依赖集合,分解ρ具有无损连接性的充分必要条件为:
R1∩R2 →(R1-R2) 或 R1∩R2 →(R2-R1),两个模式的公共属性可以函数确定其中一个模式。

举个例子:
设R=<U,F>, U={ABC},F={A→B},证明ρ1={R1(AB), R2(AC)} 是无损连接,ρ2={R1(AB),R3(BC)}不是无损连接。

解:ρ1={R1(AB), R2(AC)}
R1∩R2 = A, R1-R2 = B
由A→B ,得到ρ1是无损连接分解

ρ2={R1(AB), R2(BC)}
R1∩R2 = B, R1-R2 = A, R2-R1 = C
B→A, B→C均不成立,所以ρ1不是无损连接分解。

保持函数依赖

设关系模式R<U,F>被分解为若干个关系模式 R1<U1,F1>,R2<U2,F2>,…,Rn<Un,Fn> (其中U=U1∪U2∪…∪Un,且不存在Ui⊆Uj,Fi为F在Ui上的投影),若F所逻辑蕴含的函数依赖一定也由分解得到的某个关系模式中的函数依赖Fi所逻辑蕴含,则称关系模式R的这个分解是保持函数依赖的(Preserve dependency)。

总结:

  1. 如果一个分解具有无损连接性,则它能够保证不丢失信息。
  2. 如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。
  3. 分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。具有无损连接性的分解不一定能够保持函数依赖。同样,保持函数依赖的分解也不一定具有无损连接性。

例题:0

范式

范式是对关系的不同数据依赖程度的要求,通过模式分解将一个低级范式转换为若干个高级范式的过程称作规范化

1NF

第一范式非常简单,它要求关系中每一分量不可再分。也就是不能以集合、序列等作为属性值。

2NF

定义:若R∈1NF,且每个非主属性完全依赖于R的每一个候选关键字 ,则称R∈2NF。

简单来说,在符合第一范式的条件下,不出现非主属性对码的部分依赖关系,则满足第二范式。