我正在尝试解决这个例子,但现在我不能。有人可以告诉我,一步一步如何将其分解为 2NF,然后分解为 3NF?
R = {ABCDEF, ABC -> EF, B -> E, E -> D}
这种关系的关键是:
{ABC}
所以现在我尝试将 R 拆分为 2 个关系:
R0 = {ABCEF, ABC -> EF}
R1 = {床,B -> E,E -> D}
但它完全错了......我在我的书中得到了其他答案。我什至不尝试从中制造 3NF。
我正在尝试解决这个例子,但现在我不能。有人可以告诉我,一步一步如何将其分解为 2NF,然后分解为 3NF?
R = {ABCDEF, ABC -> EF, B -> E, E -> D}
这种关系的关键是:
{ABC}
所以现在我尝试将 R 拆分为 2 个关系:
R0 = {ABCEF, ABC -> EF}
R1 = {床,B -> E,E -> D}
但它完全错了......我在我的书中得到了其他答案。我什至不尝试从中制造 3NF。
3NF(和 BCNF)的目标是避免出现一组属性在功能上由非密钥(或更正式地说,超级密钥)的东西确定的情况,这可能导致异常和冗余。
牢记这一点,我们可以将某些函数依赖关系描述为“坏”(如果它们阻止关系处于 3NF 中)或“好”(如果它们没有)。
所以你的解决方案是错误的,因为“你的”R1 具有
E->D
依赖关系,而 E 不是 R1 的关键。确定关系的键是另一个主题,我想这超出了您需要完成的任务的范围(我们被告知 ABC 是键)。但是如果您有兴趣,可以使用“属性闭包”关键字查找该方法。无论如何,
E->D
依赖性是“坏的”。但这不是唯一的问题。另一个是您的分解不是“无损连接”。换句话说,如果我们有一些真实世界的数据,根据你的命题拆分关系并尝试将 R0 和 R1 连接回来,数据将被破坏。数据损坏不是规范化的目的。我们要解决2个问题:
回到你的问题,最后。
在 R 中,B 和 E 都不是关键。所以两者
B->E
都是E->D
“坏的”,我们需要采取措施。相反ABC->EF
是“好”,因为ABC是一把钥匙。目前 R 处于 1NF 中,因为 B 是密钥的一部分,并且在功能上确定了 E,而 E 不是密钥的一部分。这种情况在 2NF 中是不可接受的。
E->D
依赖并不是那么“坏”,因为 E 不是键的一部分。在这一点上要提到的另一件事是,一组依赖
{B->E, E->D}
意味着依赖B->ED
(根据所谓的阿姆斯壮传递性公理)。所以我们决定使用
B->ED
依赖作为“最差”的一个来拆分。根据 Heath 的说法,这就是我们这样做的方式:现在我们有 R1,它在 3NF 和 R0,它在 2NF(它具有传递依赖
B->E->D
,这在 3NF 中是不可接受的)。我们需要拆分 R0,为此我们必须在 和 中选择一个“受害者”依赖
B->E
项E->D
。正如我们所看到的,B->E
现在是一个“好”的(B 是键)并且E->D
仍然是“坏”的。我们的分裂:
R1、R2 和 R3 是最终的分解。
使用看起来更像ZFC的东西:
将呈现为:
相位是集合 R 的相位,由集合 A、B、C、D、E 和 F 组成;对于集合 A、B 和 C 的叉积中的任何元组 x 以及 E 和 F 的叉积中的任何元组y ,都存在从元组x到元组y的关系R 1;对于B集合中的任何元组x和E集合中的任何元组y,存在从x到y的关系R 2 ;对于E 集合中的任何元组x和 F 集合中的任何元组y,都存在从 x 到 y的关系R 3 。很简单,对吧?所以让我们开始吧。
1NF:
第一范式(for...fun!)的断言如下:
这仅仅意味着S是 R 中的一个集合当且仅当对于S中的任何集合T,T的肉体性等于一。这是ACID的A。1NF 断言是说在集合S中,定义为 { { A }, { B }, { C } },A、B 和 C 都不能包含一个以上的元素,然后继续断言集合 R 包含集合只像集合S。
2NF:
这里的目标是确保关系列表R不包含依赖关系,使得在与集合x(候选键)的关系中存在集合y(非主属性),其中x是超键的真子集。
使用这个定义,R 2是违反的,它依赖于x,其中x确实是 R 的最小候选键 A × B × C 的真子集。通过将集合 A 和 C 评估为 ∅ (null set ) 仅使术语子集而不是真子集,并且我们通过在上面建立 1NF 所做的断言意味着虽然这些集合可以包含∅,但它们本身不能是∅,因为这会破坏集合元素的肉体性要求。
当然,这一切都很好,“但是将原始集合 R 移动到符合 2NF 的多重集合意味着什么,”从来没有人问过?将违规关系从原始集合 R 中分离出来会产生以下结果,将 E 集合从R 1非主属性列表中剥离出来,同时获取R 3和相应的非主属性集 D。
或者,如您所愿:
3NF:
许多人认为 3NF 是任何可接受质量的第一个规范化级别,处理蕴涵或更广泛地说,逻辑结果,说明关系列表R可能不具有任何非主属性,该属性可传递地依赖于任何多集的超键。
将此应用于我们的 2NF 结构,我们看到R 3现在违反了,因为集合 D 依赖于集合 E,而后者又依赖于R 3的集合 B。
所以我们把这种有问题的关系拉出来,并给出我们的最终结果:
在原始符号中: