- 模式分解
- 无损连接
- 保持依赖
模式分解:
def : 把一个关系模式,分解成若干个关系模式。(人话:把一个表分解成几个表)
主要关注点:1. 分成几个表后做自然连接,在内容上与原来的表内容是否等价:分解的无损连接性
2. 分成几个表后做自然连接,在数据依赖(约束)上是否等价:分解的保持依赖性
像上表就不符合内容等价性,r被分解成r1和r2,自然连接以后成,容易看出该表与原来r的表增加了几行数据,这些增加的数据有可能是错的,因此数据内容上不等价。
什么情况下需要分解呢
当关系模式不符合关系范式时分解(一般是第三范式)。分解的规则是:当将每一个函数依赖单独组成一个关系。下面贴一张哈工大战老师的PPT结合看比较好
无损连接性(判断内容是否等价)
step1: 把分解的两个表(设为R1和R2)的交集找出来。
step2: 判断这个交集是否为R1的超码或者是R2的超码(超码:一个或多个属性的集合,这些属性的组合可以使我们在一个实体集中唯一地标识一个实体)。
如果step2满足,那么则有无损连接性
具体例子(必看)https://blog.csdn.net/qq_43179428/article/details/105706351
保持依赖性(判断数据依赖上是否等价)
直接判断在原来的未被分解的表中的每个函数依赖的左右两边的属性是否都在同一个被分解的表中。具体例子看https://blog.csdn.net/qq_43179428/article/details/105706351必看!!