一、模式分解中的问题
二、无损连接分解
三、保持函数依赖的分解
四、关系模式的分解算法
一、模式分解中的问题
模式分解的目标是:更高的范式级别、无损分解、保持函数依赖。 但是这三个目标往往不能同时达到,我们总要舍弃一些。 函数依赖在属性集合上的投影:我们在进行分解的时候需要将函数依赖集合分解到不同的属性集合上,这个时候我们就需要求解函数依赖集合在相应集合上的投影。
定义:X->Y属于F+并且XY属于集合W,那么得到的函数依赖集合就是F在属性集合W上的投影。
计算的方法:计算出集合W上的各个属性的闭包,然后得到相应的函数依赖,注意求集合的闭包,不仅要求的是单个属性的闭包,还要包括组合属性的闭包。
计算之后可以进行一下化简,得到其最小覆盖。
二、无损连接分解
1、定义: 无损连接分解就是在分解的过程中不要增加多余的元组,最基本的判定的方法就是将各分解的关系进行自然连接,与最开始的关系进行比价,如果是相等的没有增减信息,那么就是无损分解,否则就不是。非无损分解似乎一般出现的问题都是增加了多余的元组。2、判定的方法: 使用矩阵转换的方法进行判断。
3、如何得到关系模式R(U)的一个无损连接的分解
对于关系模式R(U),将其分解为U1和U2两个关系模式,那么:
判定的方法就是通过矩阵的方法得到的。
三、保持函数依赖的模式分级
1、定义保持函数依赖的模式分解,也就是说F中的函数依赖不能因为分解而丢失。
2、判定的方法
保持函数依赖也就是F+=(UFi)+,所以判断某模式分解是否满足保持i函数依赖,那么要继续以下两个方面的判断:
- F属于(UFi)+
- UFi属于F+
3、怎样得到R(U)保持函数以来的模式分解
进行分解,只要F中的所有的函数依赖可以在各个分解中的函数依赖中找到,那么就是保持函数依赖的分解。
四、关系模式的分解算法
我们进行分解的很多时候是要到达更高的范式,但是在这个过程中我们又要考虑无损连接和保持函数依赖。1、达到BCNF无损连接的分解算法
- 对于各个模式的分解,看是否每一个都满足BCNF,如果都满足,那么该分解就是最终的结果,否则进行以下的操作
- 如果在某个分解中存在X->Y但是X不是码,那么我们就将XY分解出去,成为一个单独的关系模式,这样的话X就成为了码,也就符合BCNF的要求了。如此进行下去,直到消除了所有的不满足的函数依赖关系
- 注意在判断每个分解是否符合BCNF的时候,我们要在每个Fi+里进行判断,而不是仅仅是Fi
- 而无损,是因为我们分出去的元素会作为自然连接的桥梁,保证了我们不会额外增加其余的元组
2、达到4NF的无损连接的分解
方法与BCNF的相同,因为函数依赖是特殊的多值依赖,所以除了要对多值依赖进行判断之外i,还要对函数依赖进行相应的判断。