3.4.3范式,保持函数依赖性,无损连接性,模式分解的算法

范式

1NF

不能以集合、序列等作为属性。

2NF

非主属性和候选码不能有部分依赖
候选码是单属性的话,一定能达到2NF,只需要考虑是否达到3NF等

3NF(通常)

非主属性和候选码不能有传递依赖

BCNF

所有函数依赖的左端如果都是候选码,则是BCNF


保持函数依赖

看分解后的所有关系中,能否包含每个函数依赖的属性
在这里插入图片描述

p1中没有把C→B保持,保持了A→B

其中函数依赖集F用最小函数依赖集



无损连接性

有一个关系模式R(U, F),其上的函数依赖集:
U={A,B,C}, F= {A→B,C→B} ,
判断下列分解是否具有无损连接性。
p1= {R1(AB), R2(AC)} p1= {R1(AB), R2(BC)}

分成两个关系,就有两行
三个元素,就有三列
在这里插入图片描述

由F可知 A能确定B,A列中值相等都是a1,所以可以把B列中的值都相等为a2,得到R2这一行都是a,有一行都是a了,所以有无损连接性


模式分解的算法

  1. 写出符合[[3.4.3范式#3NF(通常)|3NF]]的函数依赖
  2. 根据函数依赖分解关系,[[保持函数依赖#保持函数依赖|保持函数依赖性]]
  3. 删除重复的分解关系,例如子集关系
  4. 合并主键相同的关系
    ![[模式分解的算法.png]]

R转换为3NF既有无损连接性又保持函数依赖性的分解算法

  1. 求出R保持函数依赖的一个分解p={R1,R2…,Rk]
  2. 判断p是否具有无损连接性,若是,转4
  3. 令p=p U {X},其中X是R的候选码。
  4. 分解结束,输出p。

猜你喜欢

转载自blog.csdn.net/qq_25887493/article/details/123789798