识别博伊斯科德范式

时间:2013-01-12 14:08:57

标签: database database-normalization functional-dependencies 3nf bcnf

我试图了解3NF和BCNF之间的差异,我想我能够到达那里,但如果有人能帮忙的话会很棒。

以下是第3种正常形式的一系列关系(从Identifying Functional Dependencies中被窃取,然后从Connolly& Begg的数据库系统中获取它们):

Client {clientNo(PK), clientName}
Owner {ownerNo(PK), ownerName}
Property {propertyNo (PK), propertyAddress, rent}
ClientRental {clientNo(PK), propertyNo(PK), rentStart, rentFinish, ownerNo(FK)}

每个物业只有一个业主,客户可以租用这些物业。假设每个房产的租金都是固定的。

所以我的问题是:这些也在BCNF吗?

我的预感是ClientRental关系不是因为PropertyNo-> ownerNo。所以PropertyNo是功能依赖的决定因素,但它不是一个超级密钥。

我在右边的球场附近吗?

1 个答案:

答案 0 :(得分:0)

表达差异的简短,非正式的方式是,在BCNF中,每个功能依赖的每个“箭头”都是候选键中的“箭头”。对于3NF中但不在BCNF中的关系,除了候选键之外,还会有至少一个“箭头”。

Wikipedia entry for 3NF table not meeting BCNF

一个常见的误解是你可以规范化为2NF 而不是更高,然后归一化为3NF 而不是更高,然后归因于BCNF 且没有更高 >。实际上,为了达到2NF而修复部分密钥依赖关系通常会使您在5NF中保持所有关系。也就是说,你从2NF中的一个关系转到5NF中的多个关系,而不停留在BCNF之间。