Oracle
執行“一對一或多”與“一對零或多”
假設我有一個由三種類型的實體 A、B 和 C 組成的迷你世界,受以下約束:
- 每個 A 都與 0 個或多個 B 相關聯,並且每個 B 必須恰好與一個 A 相關聯;
- 每個 A 都與 1 個或多個 C 相關聯,並且每個 C 必須恰好與一個 A 相關聯。
很容易想出一個自動執行約束 1 的模式,即在表的定義中包含
B
一個引用該表的外鍵A
。同樣的想法對約束 2 不太適用,因為它不能確保至少 1 個C 與每個 A 相關聯。
是否有執行約束 2 的標準/規範方法?還是取決於特定的數據庫供應商?如果是後者,甲骨文會怎樣?
**編輯:**對不起,我原來的約束措辭不完整。我通過指定每個 B 和每個 C 必須分別關聯多少個 A 來解決這個問題。
在我看來,規則 #2 的後半部分很容易通過外鍵約束來強制執行,正如您為規則 #1 所描述的那樣。
但是規則 #2 的前半部分似乎很難執行,部分原因是雞與蛋的衝突:你是否要讓他們在有 A 之前添加一個 C,所以當你添加 A 時,它會有它的(一個)C?
但是你不能:新的 C 需要一個指向 A 的有效指針,它還不存在,因此不能添加。