Boyce Codd分解后剩余的功能依赖?

时间:2012-06-04 00:42:12

标签: database normalization database-normalization decomposition

这个分解示例是在课堂上给出的,但解决方案令人困惑,因为它似乎让一些FD无法解决。请确认3)以下是BCNF,还是不能投入BCNF?

Let R be a relation schema, with schema(R) = {C,T,H,R,S,G}

set of FDs F over R :
C->T
HR->C
HT->R
CS->G
HS->R

分解:

1) C T H R S G
2) C T      C H R S G
3) C T      H R C       H R S G 
end. (Not further decomposed.)

3)HRSG包含属性R和G,但不满足ht-> r或cs-> g。

ht-> r打折,因为我们在HRSG中没有 cs-> g打折,因为我们在HRSG中没有c

是否存在一条规则,即如果功能依赖的LHS包含不在关系中的属性,则FD不适用?感谢

1 个答案:

答案 0 :(得分:2)

FD仍适用于整体数据库设计。

每个FD都是一些商业规则的表达。无论是在数据库模式的1表版本上还是在其分解版本上强制执行,所有声明的业务规则始终适用。但是,将 表示为FD 要求FD 中涉及的所有属性都出现在相同的relvar 中(因为这是他们的发明方式:作为一种表达适用于 关系 架构的规则的方式(注意它确实 在这里说“数据库模式”。逻辑上的结果是FD完全无法表达“跨越”超过一个关系模式的规则。 的逻辑结果是它在新版本中,“分解关系模式”将导致某些FD变得无法表达( “不适用”),这不过是正常的。

(1)在对BCNF进行分解/归一化后仍然可以表达的FD可以通过将FD的LHS声明为关系模式的关键来“实现”。

(2)在分解模式中已经无法表达的FD必须在数据库约束的形式下在整个数据库设计中恢复。这个“数据库约束”非常类似于对应于来自(1)的那些FD的关键约束,因为这些数据库约束也是排序的“关键”,它们不是数据库模式中关系的关键,相反,它们是在数据库模式中可定义的“虚拟”关系(也称为“视图”)的关键。该视图是所涉及的关系模式的JOIN(s)(因此,“从分解的部分重构”)的投影(在FD的任一侧提到的确切属性)。

这是很多单词,也许很难遵循,但程序是(对于cs-> g):将分解的关系模式连接在一起(通过HR,再次给我们一个关系HRCSG),项目向下FD中涉及的属性(因此,投射到CSG),在这种关系中,CS必须是关键。

请注意,我在这里说“key”是因为不能允许相同的CS值组合出现不同的G值。从某种意义上说,这是一个声明,您可以向任何DBMS强制执行此类规则。如果DBMS可以有效地做到这一点,那么数据库设计会更容易:-)这意味着规则的执行,并且确保没有数据会违反这条规则,现在取决于你。

幸运的是,在实践中这些情况并不是太多,而且大多数情况下您会注意到原始版本中的绝大多数FD最终只是在BCNF表上声明的键。