【问题标题】:Can every 2NF relation be made into 3NF relation?每个 2NF 关系都可以变成 3NF 关系吗?
【发布时间】:2014-02-19 21:34:05
【问题描述】:

可以将2NF 中的每一个关系都变成3NF 并进行无损连接和依赖保留吗?

编辑:

有一个关系R 与一组功能依赖关系FR2NF 中,但不在 3NF 中。我们可以将关系R 分解成更小的关系,它们在3NF 中并且与依赖组合具有无损连接吗?每次都可以吗?

【问题讨论】:

  • 其实每个关系都可以转换成3NF状态。
  • Can every 2NF relation be made into 3NF relation?你想问什么怎么转换?
  • 在这里提问cs.stackexchange.com/questions 以获得更好的答案
  • "实际上每个关系都可以转换成3NF状态。" @GrijeshChauhan 我想我得到了答案。
  • @vincentmathew 是的,每个关系都被转换为 3NF,它可能需要将该关系分解为相关关系。好吧,如果您认为得到了答案,那么您可以暂时删除此问题。如果您觉得可以发布新问题,请阅读更多文字

标签: database-design relational-database database


【解决方案1】:

简而言之:是的 - 可以做到。

更长的解释。

假设我们有关系R,它在x -> y 之间。假设R不在2NF中,新的关系PQ必须存在,其中P: x -> zQ: z -> yPQ不能是琐碎。这里xyz是对应的功能实体(通常不是“columns”,也可能是“set of columns” ,如果就 SQL 表来说的话)。

让我们还假设PQ 没有传递子关系(如R 有) - 即它们在 3NF 中(否则不会改变任何东西,我们将更深入并重复所有直到找到没有传递子关系的子关系)。

所以我们有:

R(x) = y,
P(x) = z,  => Q(P(x)) = y
Q(z) = y

这是传递关系的定义。所以,R会被拆分成两个关系PR(因为只有PQ就足够建立关系x -> y,所以R是多余的,可以用@987654344代替@ 和 Q 加入这两个关系)。我们的PQ 在3NF 中,因此,我们已经将R 转换为3NF 关系。事实上,这是规范化 2NF -> 3NF 时应该做的工作(即以这种方式找到并解决所有传递关系)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-13
    • 2013-05-12
    • 2014-02-28
    • 2015-07-20
    • 2013-10-22
    • 2013-05-11
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多