具有严格 1-2 关系的实体

Entities with a strict 1-2 relationship

我试图了解当关系具有确切的性质时,我们如何建模和定义两个实体的基数。让我们说 1 到 2。

例如,如果我有实体 Journey 和 Location。现在每个旅程都有 2 个位置,一个起始位置和一个结束位置。

那么我们如何对这种关系建模并将基数放在每个实体(旅程和位置)上。

简单 google 搜索结果以简单的 1-1、1-m 和 m-n 关系解释。但是我们如何将它们限制在 1-2 之间呢?

不同的建模符号以略有不同的方式表示这一点,但通常是数字(不同地称为 degreerangemultiplicity) 写在它适用的关系线的末尾附近。它在 UML 表示法中最常见。在 IDEF1X 术语中,它有时称为 "N Cardinality".

在 SQL 数据库中,出于大多数实际目的,几乎不可能对最小要求的多重性大于零的这种关系实施约束。这可能解释了为什么这些关系在数据库模型中不常见,但在 class 图中更常见。面向对象的系统原则上可以强制执行约束,而基于 SQL 的数据库通常不能。

您的示例不是“1 到 2”,而是 "N to 2",您只需通过两个外键对其进行建模:

(可能需要检查以确保开始和结束位置不同。)


如果你真的想要“1 到 2”,从某种意义上说,任何给定的位置总是只与一次旅程相关,你必须做这样的事情......

...并使用支持延迟约束的 DBMS,这样您就可以在插入新数据时打破先有鸡还是先有蛋的问题。

在不支持延迟约束的 DBMS 上,您可以使开始和结束位置可为 NULL,但这样它就不再是“1 到 2”,而是“1 到 0..2”的关系.