Database design 如何将模式分解为3NF?
模式R=(A,B,C,D,E) 函数依赖项F1={A->BC,CD->E,B->D,E->A}Database design 如何将模式分解为3NF?,database-design,database-normalization,3nf,bcnf,Database Design,Database Normalization,3nf,Bcnf,模式R=(A,B,C,D,E) 函数依赖项F1={A->BC,CD->E,B->D,E->A} 函数依赖项F2={A->D,A->E,DE->BC,B->A,D->C} 根据F1,候选键-A、E、BC、CD 根据F2,候选键-A、B、DE 架构处于3NF中的条件: 对于所有X->Y,至少以下一项为真: 1.X是一个超级键 2.X->Y是微不足道的(即Y属于X) 3.Y-X中的每个属性都包含在候选密钥中 我知道根据F1,R在3NF中,但根据F2,R不在3NF中 根据F2,R不在3NF中,因为在函数
函数依赖项F2={A->D,A->E,DE->BC,B->A,D->C} 根据F1,候选键-A、E、BC、CD
根据F2,候选键-A、B、DE 架构处于3NF中的条件:
对于所有X->Y,至少以下一项为真:
1.X是一个超级键
2.X->Y是微不足道的(即Y属于X)
3.Y-X中的每个属性都包含在候选密钥中 我知道根据F1,R在3NF中,但根据F2,R不在3NF中 根据F2,R不在3NF中,因为在函数依赖项D->C中,
1.D不是超级键
2.D->C不是微不足道的
3.任何候选密钥中都不包含C-D,即C。
因此,根据F2,R不在3NF中 现在如何将其转换为3NF 我尝试了以下方法:
将R分解为(A,B,D,E)(C,D)(B,C,D,E),以保持依赖性
这是正确的吗?还有其他分解方法吗?您的示例的第三范式分解如下(在每个模式之后,我将函数依赖项的投影放在它上面):
R1
R2
R3
R4
所使用的算法是经典的。算法示意图如下所示:
R1 <(A D E), {A → DE, DE → A}>
R2 <(B D E), {DE → B, B → DE}>
R3 <(A B), {B → A, B → A}>
R4 <(C D), {D → C}>