2015-11-03 75 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模型和關係模型之間的混淆。其次是分析和設計之間的混淆。您分析業務,並設計數據庫(和應用程序)。 –