【问题标题】:One-to-Many relation definition: correct interpretation of the relationship direction一对多关系定义:正确解释关系方向
【发布时间】:2016-04-30 22:59:00
【问题描述】:

我对一对多关系的“方向”的解释有疑问。想象一下PersonCity 之间的关系Person:City,它描述了每个人的独特住所。一个只能生活在一个城市中,每个城市居住着很多,因此可能存在元组是(p1,c1),(p2,c1),(p3,c1)。我发现这种rel有两种不同的定义:

  1. Person:City 是一种一对多关系,因为相同的 City 实例更多次参与不同的关系实例(例如,参考 here
  2. Person:City 是一种多对一 关系,因为表City 中的一行(例如c1)可能与表Person 中的多行相关联,但只有一个表Person 中的行仅链接到表City 中的一行(例如参考here

我的疑问是关于语义:many 是否引用 (i) City 表示相同实例的多个参与关系或引用 (ii ) Person 因为不同的人都链接到同一个城市?

虽然该定义可能不会影响数据的结构,但有时可能会导致误解。 哪个是正确的?

【问题讨论】:

  • 我认为选项 1. 可以解释为一个人在某个时间点住在一个城市,但对于这种关系的另一个实例,即在不同的时间点可能住在另一个城市,因此一个(人)-对-多(城市)。选项 2. 是许多(人)生活在一个(城市)中的通常解释,一个(城市)可以有很多(人)生活在其中。因此,仅当您使用时间维度对其进行限定时,选项 1 才有效。希望这会有所帮助。
  • @vmachan 假设没有时间维度,我认为这不是重点。阅读[第一个参考](code.tutsplus.com/tutorials/…)中的定义,似乎“许多”是指一个城市实例对关系表的多次参与(例如(p1,c1),(p2,c1),(p3,c1))......没关系,因为在那个城市里住着更多的人。我的疑问是:many 是指同一实例的多个参与的 City 还是指 Person 因为不同的人链接到同一个城市?
  • 在你的情况下,我认为倍数是指居住在一个城市(一个)的人(很多)。

标签: database-design one-to-many entity-relationship data-modeling


【解决方案1】:

在您的示例中,Person:City 是多对一的关系。更准确地说,每个城市与零个或多个人相关联(一个城市对多人),每个人只与一个城市相关联(一个人对一个城市)。两个基数都很重要,但我们将其简化为一对多,因为假设相反方向的一对一(否则它将是多对多,我们将分解为多个一对多关系) .

请注意,基数与其说是表示行链接,不如说是描述了 Person 和 City 域之间的关联。行是物理结构,而基数描述逻辑关系。当使用与规范化表不同的物理格式时,差异是显着的,例如一些 DBMS 支持多值属性,或者可能将数据显示为图形而不是表格。

我找不到您在第一个参考中描述的用法,但不管它不是教程,我都会推荐给任何人。

【讨论】:

  • 好的,关于基数与物理结构的关系。我的疑问是关于语义的。我不明白 many 是指 (i) City(相同实例多次参与关系)还是 (ii) Person,因为不同的人都链接到同一个城市。根据你的回答,答案是(ii),对吧?
  • 是的,我同意选项 2 中的基数。
猜你喜欢
  • 1970-01-01
  • 2020-11-21
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多