2NF
中的每个关系都可以变为3NF
,并且无损连接和依赖保留吗?
编辑:
关系R
有一组功能依赖F
。 R
位于2NF
但不在3NF
。我们可以将关系R
分解为更小的关系,这些关系位于3NF
并且具有依赖关系组合的无损连接吗?可以每次都这样做吗?
答案 0 :(得分:1)
简而言之:是 - 可以完成。
更长的解释。
假设我们的关系R
介于x -> y
之间。假设R
不在2NF中,则新关系P
和Q
必须,其中P: x -> z
和Q: z -> y
和{ {1}},P
一定不能琐碎。这里Q
,x
,y
是相应的功能实体(它们通常不是“列”,它们也可能是“的集合列“,如果以SQL表的形式说话)。
我们还假设z
和P
没有传递子关系(如Q
所有) - 即它们在3NF中(否则它将不会改变,我们将再深入并再次重复,直到找到没有传递子关系的子关系。)
所以我们有:
R
这是传递关系的定义。因此,R(x) = y,
P(x) = z, => Q(P(x)) = y
Q(z) = y
将分为两个关系R
和P
(因为只有R
和P
足以建立关系Q
,所以x -> y
是多余的,可以用R
和P
替换,加入这两个关系)。我们的Q
和P
位于3NF,因此,我们已将Q
转换为3NF关系。事实上,这是工作应该在规范化2NF时完成 - > 3NF(即以这种方式找到并解决所有传递关系)。