我试图了解当关系具有确切性质时,我们如何建模和定义两个实体的基数。让我们说1到2。
例如,如果我有实体 Journey 和 Location。现在每个旅程都有 2 个位置,一个起始位置和一个结束位置。
那么我们如何建模这种关系并将基数放在每个实体(旅程和位置)上。
简单的 google 搜索结果是简单的 1-1、1-m 和 mn 关系解释。但是我们如何将它们限制为 1-2 呢?
我试图了解当关系具有确切性质时,我们如何建模和定义两个实体的基数。让我们说1到2。
例如,如果我有实体 Journey 和 Location。现在每个旅程都有 2 个位置,一个起始位置和一个结束位置。
那么我们如何建模这种关系并将基数放在每个实体(旅程和位置)上。
简单的 google 搜索结果是简单的 1-1、1-m 和 mn 关系解释。但是我们如何将它们限制为 1-2 呢?
您的示例不是“1 到 2”,而是“N 到 2”,您只需通过两个外键对其进行建模:
(并且可能进行检查以确保开始和结束位置不同。)
如果你真的想要“1 到 2”,从某种意义上说,任何给定的位置总是只与一次旅程相关联,你必须做这样的事情......
...并使用支持延迟约束的 DBMS,因此您可以在插入新数据时打破先有鸡还是先有蛋的问题。
在不支持延迟约束的 DBMS 上,您可以将起始位置和结束位置设为 NULL,但它不再是“1 到 2”,而是“1 到 0..2”关系。
不同的建模符号以稍微不同的方式表示这一点,但通常数字(不同地称为degree,range或multiplicity)写在它适用的关系线的末端附近。它在 UML 表示法中最常见。在 IDEF1X 术语中,它有时被称为“N 基数”。
在 SQL 数据库中,对于大多数实际目的而言,几乎不可能实现对最小所需多重性大于零的此类关系的约束。这可能解释了为什么这些关系在数据库模型中不常见但在类图中更常见。面向对象的系统原则上可以强制执行约束,而基于 SQL 的数据库通常不能。