【发布时间】: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
property(property_id, property_location, property_price, ...);
表 2
flat(property_id, flat_floor, flat_bedroom_count, ...);
【问题讨论】:
标签: database terminology
你所拥有的看起来类似于表继承。如果您的表结构是所有flat 记录都代表一个property,但并非所有property 记录都引用flat,那么这就是表继承。这是一种在关系数据库中对接近于面向对象的关系(换句话说,flat 继承自 property)进行建模的方法。
【讨论】:
如果我正确理解您的示例,数据建模术语是超类型/子类型。这是一种建模技术,您可以定义一个包含公共属性的根表(超类型),以及一个或多个包含基于被建模实体的不同属性的引用表(子类型)。
例如,您可以有一个 Person 表(超类型),其中包含与所有人相关的属性列,例如 Name。然后,您可以拥有一个 Employee 表(子类型),其中仅包含特定于员工的属性,例如工资率和雇用日期。然后,您可以使用针对 Person 的其他专业化的附加表继续此过程,例如 Contractor。每个子类型表都有一个 PersonID 键列,它可以是子类型表的主键,也可以是引用 Person 表的外键。
有关更多信息,请在 Google 中搜索“超类型和子类型实体”,并查看以下链接。
【讨论】:
在通用数据库术语中这种关系没有一个好名字(据我所知)。这不是一对一的关系,因为不能保证主表中的每条记录在“扩展”表中都有一条记录。这不是一对多关系,因为在关系的“多”方面最多允许一个记录。
我能做的最好的事情是一对一或无或最多一对一的关系。 (我承认自己的术语很草率——我只是称之为一对一的关系。)
无论您决定如何调用它,您都可以对其进行正确建模并保持数据库中的完整性,方法是将属性中的 property_id 列设置为 PK,将平面中的 property_id 列设置为 PK 以及返回属性的 FK。
【讨论】:
对于这种关系,“逻辑和数据库”将“最多一个到最多一个”这一术语推向了前列。 (请注意,根据它们参与的关系为表分配名称是很疯狂的。)
提防那些提出“外键”、“表继承”、简要以及此处给出的所有其他答案的人。这些人在假设您没有明确声明是有效的,即您的两个表之一将保证包含出现在另一个表中的所有键值。
【讨论】:
(网站的功能障碍使我无法将其作为评论添加到适当的位置。)
“你如何解释“...共享一个共同的主键?”“
我的解释是在唯一可能的合理意义上:在 table1 中,主键的属性值保证是唯一的,而在 table2 中,主键的属性值保证是唯一的。此外,两个表中的主键具有相同的 [set of] 属性名称,并且与主键属性[s] 对应的类型也成对相同。不多也不少。
特别是,“共享主键”意味着“有一个共同的主键”,而这反过来又意味着“有一个共同的'内部唯一性规则'”,但这种共同性绝不保证 出现在一个表中的主键值也必须出现在第二个表中。
“你能举一个例子,涉及两个具有共享主键的表,其中一个表不包含出现在另一个表中的所有键值吗?” "
表 1:整数类型的列 A,主键 A 表2:整数类型A列,主键A
table1 中的行:{A:1}。满足 table1 的主键。 表 2 中的行:{A:2}。满足table2的主键。
相信了吗?
【讨论】:
“Foreign key”?
【讨论】:
foreign key 是一个与表列而非表相关的术语。我正在寻找描述表格的术语。