【问题标题】:In 2NF, can a partial dependency have a composite primary key?在 2NF 中,部分依赖可以有一个复合主键吗?
【发布时间】:2015-10-11 23:25:17
【问题描述】:

我见过的所有部分依赖的例子都只有一个属性作为主键。

A,B,C -> D,E,F
A,B-> D (composite PK)

我可以说“A,B->D”是部分依赖“A,B,C -> D,E,F”吗?

【问题讨论】:

  • 这是无法理解的。 (但由 displayName 引导。) PS 部分 FD 是 {A,B,C} -> {D}。移动的 FD 不是部分的;它是一个存在使另一个局部化的人。
  • 大写字母代表set theory中的属性。
  • 我们能提供帮助吗?你能澄清你的问题,以便我们澄清答案吗?
  • @philipxy:不,我只是说每个大写字母代表集合论中的一组属性。所以OP熟悉的符号JK->L,并不意味着“属性JK决定属性L”;它的意思是“两组属性 JK 确定一组属性 L”。计数字母,正如我所见只有一个属性作为主键,不是面向集合的思维,它可能会产生误导。
  • @MikeSherrill'CatRecall' OK:两个常用的符号,例如 JK->L 与 J、K、L 和 JK 作为集合(属性)与例如 {A,B,C}-> {D,E,F} 以 A 到 F 作为属性(即集合成员)。报价有所帮助。三个简短的句子有很大的误解空间。

标签: database primary-key database-normalization composite-primary-key functional-dependencies


【解决方案1】:

据我所知,您是在询问分解是否可以涉及具有复合 PK 的新表,因为到目前为止您只看到了单个属性键的示例。

是的。这个想法是,如果您可以通过主键的一部分(无论是单个属性还是多个)唯一地确定一个或多个非主属性,那么您应该为此创建一个单独的表。

所以,如果A,B -> D,则创建另一个{A, B, D} 表并从更大的表中删除重复。

This link 显示在删除此冗余后将单个表分解为两个,尽管它也使用单个属性作为键。不过,您还是可以通过查看表格的初始和拆分后的结果来了解的。

【讨论】:

  • 由于没有一个问题的句子对 FD 做出明智的陈述,你认为你对哪个问题回答“是”?
  • @philipxy:问题的标题。
  • 对 FD 也没有任何意义。 (我把它包括在内。)
  • @philipxy:请查看最后一段中的链接和段落本身。该链接显示了一个表的 2NF 资格。据我所知,OP 正在询问分解是否可以涉及具有复合 PK 的新表,因为到目前为止,他只看到了单个属性键的示例。
  • 哇。通常当我无法理解某人的意思时,没有人可以。
【解决方案2】:

TL;DR 你的标题问题是 ill-formed re FDs,你的第一句话是 ill-formed re FDs,你问的就是 ill-formed re FDs。 (请通过正确使用术语来重新表述您的问题以使 FD 有意义。请明确您的句子之间的联系并解释您的示例。)


我们说 FD(功能依赖)X -> Y 成立,或者 Y 在功能上依赖于 X,或者 X 在功能上决定 Y,或者 Y 在功能上由 X 决定。我们经常忽略“功能上”。当 X 的某个较小/适当的子集也决定 Y 时,我们说 X -> Y 是部分的。术语“部分”的出现是因为 Y 仅依赖于 X 的 part。非部分的 FD已满。请注意,不涉及 CK(候选键)。

A,B,C -> D,E,F
A,B-> D (composite PK)

归一化涉及 CK。它涉及 PK(主键)的唯一方式是存在与规范化无关的传统来选择一个 CK 来调用“PK”。当然,如果只有一个CK,那就是PK的唯一选择,我们可以称之为PK。

我假设 A-F 是某个关系值或变量的唯一属性。如果这两个 FD(以及那些在它们的闭包中且没有其他的)成立,那么 {A,B} 是不是 CK。 {A,B,C} 是唯一的 CK。

我可以说“A,B->D”是部分依赖“A,B,C -> D,E,F”吗?

FD永远不会“是”不同的FD。也许您的意思是“是部分 FD of”。但是说一个 FD “是”某个 FD 的部分 FD 是没有意义的。我不知道您的“我可以说”是指“这是真的”还是“说起来有意义”。但这样说是没有意义的。我不知道你想问什么。

但这里有一些是真的:

{A,B,C} -> {D,E,F} 不是部分的,因为没有 {A,B,C} 的更小/正确的子集决定 {D,E,F}。 {A,B} -> {D} 不是部分的,因为没有 {A,B} 的更小/正确的子集决定 {D}。但是 {A,B,C} -> {D} 是部分的,因为 {A,B,C} 的更小/正确的子集 {A,B} 决定了 {D}。

当没有非主属性部分依赖于 CK 时,关系处于 2NF。即,当所有非主要属性在功能上完全依赖于每个 CK 时。由于非主属性 {D} 部分依赖于 CK {A,B,C},因此该关系值或变量不在 2NF 中。

在2NF中,部分依赖可以有复合主键吗?

这也是没有意义的。部分 FD 没有“拥有”PK 或 CK。我不知道你想问什么。也许您的意思是“行列式”而不是“PK”。

我见过的所有部分依赖的例子都只有一个属性作为主键。

这也没有意义,因为依赖项没有“有”PK 或 CK。也许你想说,你看到的所有部分 FD 的例子都是在关系中只有一个属性作为 CK。也许您想说的是,您看到的所有部分 FD 示例都只有一个属性作为 行列式

只有当 {} 是其子集行列式时,部分 FD 才能具有单一属性行列式。即如果 {J} -> Y 是部分的,则 {} -> Y。这是当 Y 子行值在每个元组中都相同时。因此,您可能从未想过部分依赖具有复合行列式。 (所以你可能没有的意思是“PK”的“决定因素”。)

(我也无法将这三个引号彼此或您的示例联系起来。)

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    相关资源
    最近更新 更多