可以将每个2NF关系变成3NF关系吗?

时间:2014-02-19 12:31:14

标签: database-design relational-database database

2NF中的每个关系都可以变为3NF,并且无损连接和依赖保留吗?

编辑:

关系R有一组功能依赖FR位于2NF但不在3NF。我们可以将关系R分解为更小的关系,这些关系位于3NF并且具有依赖关系组合的无损连接吗?可以每次都这样做吗?

1 个答案:

答案 0 :(得分:1)

简而言之: - 可以完成。

更长的解释。

假设我们的关系R介于x -> y之间。假设R不在2NF中,则新关系PQ 必须,其中P: x -> zQ: z -> y和{ {1}},P一定不能琐碎。这里Qxy是相应的功能实体(它们通常不是“列”,它们也可能是“的集合列“,如果以SQL表的形式说话)。

我们还假设zP没有传递子关系(如Q所有) - 即它们在3NF中(否则它将不会改变,我们将再深入并再次重复,直到找到没有传递子关系的子关系。)

所以我们有:

R

这是传递关系的定义。因此,R(x) = y, P(x) = z, => Q(P(x)) = y Q(z) = y 将分为两个关系RP(因为只有RP足以建立关系Q,所以x -> y是多余的,可以用RP替换,加入这两个关系)。我们的QP位于3NF,因此,我们已将Q转换为3NF关系。事实上,这是工作应该在规范化2NF时完成 - > 3NF(即以这种方式找到并解决所有传递关系)。