【问题标题】:Tables with a common primary key具有公共主键的表
【发布时间】:2011-04-23 06:05:51
【问题描述】:

描述共享一个公共主键的表之间关系的术语是什么?

这是一个例子:

表 1
property(property_id, property_location, property_price, ...);

表 2
flat(property_id, flat_floor, flat_bedroom_count, ...);

【问题讨论】:

    标签: database terminology


    【解决方案1】:

    你所拥有的看起来类似于表继承。如果您的表结构是所有flat 记录都代表一个property,但并非所有property 记录都引用flat,那么这就是表继承。这是一种在关系数据库中对接近于面向对象的关系(换句话说,flat 继承自 property)进行建模的方法。

    【讨论】:

      【解决方案2】:

      如果我正确理解您的示例,数据建模术语是超类型/子类型。这是一种建模技术,您可以定义一个包含公共属性的根表(超类型),以及一个或多个包含基于被建模实体的不同属性的引用表(子类型)。

      例如,您可以有一个 Person 表(超类型),其中包含与所有人相关的属性列,例如 Name。然后,您可以拥有一个 Employee 表(子类型),其中仅包含特定于员工的属性,例如工资率和雇用日期。然后,您可以使用针对 Person 的其他专业化的附加表继续此过程,例如 Contractor。每个子类型表都有一个 PersonID 键列,它可以是子类型表的主键,也可以是引用 Person 表的外键。

      有关更多信息,请在 Google 中搜索“超类型和子类型实体”,并查看以下链接。

      【讨论】:

        【解决方案3】:

        在通用数据库术语中这种关系没有一个好名字(据我所知)。这不是一对一的关系,因为不能保证主表中的每条记录在“扩展”表中都有一条记录。这不是一对多关系,因为在关系的“多”方面最多允许一个记录。

        我能做的最好的事情是一对一或无或最多一对一的关系。 (我承认自己的术语很草率——我只是称之为一对一的关系。)

        无论您决定如何调用它,您都可以对其进行正确建模并保持数据库中的完整性,方法是将属性中的 property_id 列设置为 PK,将平面中的 property_id 列设置为 PK 以及返回属性的 FK。

        【讨论】:

          【解决方案4】:

          对于这种关系,“逻辑和数据库”将“最多一个到最多一个”这一术语推向了前列。 (请注意,根据它们参与的关系为分配名称是很疯狂的。)

          提防那些提出“外键”、“表继承”、简要以及此处给出的所有其他答案的人。这些人在假设您没有明确声明是有效的,即您的两个表之一将保证包含出现在另一个表中的所有键值。

          【讨论】:

          • 如果不是意味着两个表之一将保证包含出现在另一个表中的所有键值,您将如何解释“...共享一个公共主键?”?您能否举一个例子,其中两个表具有共享主键,其中一个表不包含出现在另一个表中的所有键值?
          • OP 在其他 cmets 中表示,他正在询问表的主键是 也是另一个表的外键的情况。在这种情况下,父表(另一个表的外键引用的表)保证包含出现在另一个表中的所有键值。
          【解决方案5】:

          (网站的功能障碍使我无法将其作为评论添加到适当的位置。)

          “你如何解释“...共享一个共同的主键?”“

          我的解释是在唯一可能的合理意义上:在 table1 中,主键的属性值保证是唯一的,而在 table2 中,主键的属性值保证是唯一的。此外,两个表中的主键具有相同的 [set of] 属性名称,并且与主键属性[s] 对应的类型也成对相同。不多也不少。

          特别是,“共享主键”意味着“有一个共同的主键”,而这反过来又意味着“有一个共同的'内部唯一性规则'”,但这种共同性绝不保证 出现在一个表中的主键值也必须出现在第二个表中。

          “你能举一个例子,涉及两个具有共享主键的表,其中一个表不包含出现在另一个表中的所有键值吗?” "

          表 1:整数类型的列 A,主键 A 表2:整数类型A列,主键A

          table1 中的行:{A:1}。满足 table1 的主键。 表 2 中的行:{A:2}。满足table2的主键。

          相信了吗?

          【讨论】:

          • 正如我刚刚发布的另一条评论中所述,OP 在其他 cmets 中表示,他正在询问表的主键也是另一个表的外键的情况。在这种情况下,父表(由另一个表的外键引用的表)保证包含出现在另一个表中的所有键值。您的回答和谨慎声明并未解决任何人都在谈论的情况。
          • 我的回答和谨慎声明确实解决了“任何人”正在谈论的场景,因为考虑到他的问题的非常精确的表述,OP 允许这种场景。
          • 鉴于给定问题的非常精确的表述,除我之外的所有答案都是错误,因为它们都依赖于无法从问题中断言的假设因为它被制定了.
          • "除我之外的所有答案都错误" - 失败者的狂妄自大。如果你打算在这里参加,我可能会建议放松一点。仅仅因为您选择以特定方式阅读问题并不意味着其他人一定会这样做。
          【解决方案6】:

          Foreign key”?

          【讨论】:

          • 我相信foreign key 是一个与表列而非表相关的术语。我正在寻找描述表格的术语。
          • @Emanuil:啊,那我误解了你的问题。那么,您实际上是在为通过外键链接的表之间的关系寻找名称吗?
          • @Oil:具体来说,我相信他正在寻找一个表的主键也是另一个表的外键的设计模式的名称。
          • 是,但不是由外键链接的任何表,而是外键也是主键的表。
          猜你喜欢
          • 1970-01-01
          • 2012-10-25
          • 2019-10-14
          • 1970-01-01
          • 2018-10-20
          • 2012-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多