【问题标题】:How to design a table if it has no candidate keys?如果没有候选键,如何设计一个表?
【发布时间】:2014-12-29 00:17:44
【问题描述】:

目前在我的数据库课程中,我们正在讨论关系模型和规范化等。我已经轻松回答了作业中的每一个问题,但这个问题让我陷入了困境:

  • 如果表没有候选键,那么设计表的一般做法是什么?

这里没有没有候选键的表的示例。上面的问题是我的全部,我觉得这太模糊了。

我的第一个想法是找到任何决定因素(即使它们不是候选键)并创建一个具有这些功能依赖的新表,但我什至不知道表中存在任何功能依赖.有没有可能的答案?

【问题讨论】:

  • 为什么有人会投票结束这个问题?
  • 显然,它太宽泛了。很可能还有另一个问题,这是重复的。一个严肃的问题是重新评估表格的内容;为什么没有候选键?它持有什么数据?您确定没有办法区分表面上相同的行——也许是基于记录数据的时间?
  • @JonathanLeffler 我不知道。这就是为什么我很困惑。没有具体的例子可以看,所以也许你刚才提到的所有事情以及安德鲁的答案都是我的教授正在寻找的。不是如何修复它,而是可以采取哪些步骤来修复它?我将不得不问他在寻找什么,但我认为这是一个很好的问题,可以作为规范化讨论的一部分带到这里。
  • 后备方案是添加某种“身份”列,但这并不理想。检查数据并理解其含义至关重要。我认为是 Codd 指出“说两遍并不能使事情变得更真实”。表中的行是对真理的断言;有两行说同一件事是两次断言同一件事。行之间必须有一些差异 - 否则您不会同时插入两者。那么这两行的区别是什么?
  • 这就是我感到困惑的原因。假设我们的表是至少第一范式,我无法想象它没有候选键。但这是可能的。

标签: database relational-database normalization database-normalization


【解决方案1】:

例如,您可以创建一个保证唯一的附加列(自动递增整数)。

【讨论】:

  • 哇。那是我刚刚在那里的手掌。这很有意义,但我想仍然有一些假设。如果我为每一行创建一个 id,我将不得不假设每一行代表一些特定的对象或事实,不是吗?
  • 是的,这就是关系数据库的重点,每个表都是一个关系。每行表示该行上的项目与表要表示的任何内容相关。例如,购买表可能有一个客户 ID、一个日期和一个项目 ID。因此,如果表中有一行是“c2345”、“1/1/2014”、“12345”,则表示客户 c2345 在 2014 年 1 月 1 日购买了 id 为 12345 的商品。
  • 这是有道理的,并且该表没有候选键是吗?您可以有多个客户、相同的日期、相同的商品,因此为每次购买提供自己的 ID 是有意义的。
  • @McAdam331 评论表“客户 C 在 D 上购买了 ID 为 I 的商品”有一个 CK--所有列。无论“您是否可以拥有多个客户、相同日期、相同物品”,该表都不会告诉您此类事件是否发生了不止一次。如果您想要一张这样的桌子,那么您可以选择不同的含义。看我的回答。
【解决方案2】:

一个表,如果它是关系表,总是至少有一个候选键(所有属性组合)。允许重复行的表不是关系表。因此,如果您谈论的是关系,则根本不会发生这种情况。总有一个候选键。

【讨论】:

  • 那么将它制作关系的常见做法是什么?还是只是没有足够的信息,因为我想每次情况都不一样。我认为这只是一个措辞不当的问题,或者他们的意思是要广泛开放。
  • “使其成为关系”的做法并不常见。声明密钥。
  • 再次感谢您的帮助。我可以招聘你做另一个数据库设计question吗?
【解决方案3】:

关系表是一组行,因此不能有行重复,并且总是有一个或多个CK。表示“客户 C 在 D 上购买了商品 I”的表的所有列都为 CK。表中列出的 C-I-D 三元组做出了真实的陈述。但是“客户 C 第 N 次在 D 上购买了商品 I”或“购买 P 是客户 C 在 D 上购买了商品 I”给了其他表格。

您的报价是关于另一种表格,具有另一种含义。找出那些是什么!而不是“这个表(是关系所以它)是(一组)行,使以下成为一个真实的陈述:......”你会被告知类似“这个表是购买描述的列表...... ”。注意如何使用相关的事物或概念。然后选择引用或使用它们的关系含义/表。

PS CK 是关系的。非关系表不能有 CK。它们可以在行列表中拥有最少的唯一列集,但这不是 CK。

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2012-08-26
    • 1970-01-01
    • 2018-12-25
    • 2022-01-07
    相关资源
    最近更新 更多