一对多关系定义:关系方向的正确解释

One-to-Many relation definition: correct interpretation of the relationship direction

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

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

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

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

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

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

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