将 N:M 关系转换为数据库模式

Conversion of N:M relationship to database schema

假设您要转换以下形式的关系:

Entity1 (N,0) ------ (1,M) Entity2

或用鱼尾纹表示法:

ER Diagram

标准架构转换为:

Entity1 (**Entity1No**, ....)

Entity2 (**Entity2No**, ...)

Entity1_Entity2 (***Entity1No***, ***Entity2No***, ....)
 FOREIGN KEY (Entity1No) REFERENCES (Entity1)
 FOREIGN KEY (Entity2No) REFERENCES (Entity2)

(这里粗体表示主键,斜体表示外键)

但是我看不出如何实现这样一个事实,即根据关系基数,必须至少有一个 Entity2 与 Entity1 相关。有没有办法将此要求包含在数据库模式中?

谢谢并致以最诚挚的问候。

不,您不能指定至少有一个实体在关系的多边相关。至少据我所知。

您可以实施 CHECK 约束,但出于多种原因(性能/可维护性)我不会这样做。您可以使用触发器/存储过程来确保您始终至少拥有一个。这是否合适,取决于一般的软件设计。

通常,无论使用何种编程语言,您都会有一些业务层来确保数据的一致性。它关心更复杂的案例,这需要业务知识。数据库约束(如 NOT NULL)相当琐碎,无法表达真正的业务一致性。他们只检查最本质和最基本的一致性。您的情况似乎也很基本,但已经超出范围。