2015-11-03 37 views
1

假设你要转换的以下形式的关系:转换的N:M关系数据库架构

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) 

(这里粗体表示主键和它alics外键)。

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

感谢和最好的问候。

回答

0

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

你可以实现一个CHECK约束,但是我不会这么做是因为几个原因(性能/可维护性)。你可以使用触发器/存储过程来确保你总是至少有一个。这取决于一般的软件设计,如果这是适当的或不合适的话。

通常情况下,您有一些业务层以任何编程语言确保数据一致。它关心更复杂的案例,这需要业务知识。数据库约束(如NOT NULL)相当平凡,不能表达真正的业务一致性。他们只检查最基本和最基本的一致性。你的情况似乎也是基本的,但它已经超出了范围。

+0

感谢您的回答!很容易忘记ERD是为了捕获业务需求,数据库需求只是一个子集。最好的祝福。 – edel

+0

如果您认为答案完整且有帮助,请不要忘记接受答案。 (如果有多个,你只能接受一个,作为“正确答案”或最能帮助你的答案。) –

+0

准确!这源于当今数据库架构师特有的两种混淆。首先是ER模型和关系模型之间的混淆。其次是分析和设计之间的混淆。您分析业务,并设计数据库(和应用程序)。 –