假設我有兩個強實體E1和E2連接由1對多的關係R.ER圖到數據庫轉換
E1 < --------- --------ř - E2
當我將上面的ER圖轉換成數據庫時,會創建多少個表?
我知道,當E2將在總參與答案將是2.因爲,E2的主鍵將完美合併。我不確定以上。我看到了多個地方,並找到了不同的答案。我正在尋找一些有答案的堅實論據。
答案可以是2或3.我想知道哪個更正確。
假設我有兩個強實體E1和E2連接由1對多的關係R.ER圖到數據庫轉換
E1 < --------- --------ř - E2
當我將上面的ER圖轉換成數據庫時,會創建多少個表?
我知道,當E2將在總參與答案將是2.因爲,E2的主鍵將完美合併。我不確定以上。我看到了多個地方,並找到了不同的答案。我正在尋找一些有答案的堅實論據。
答案可以是2或3.我想知道哪個更正確。
Chen的原始方法將每個實體關係和關係關係映射到一個單獨的表。這將產生3個表:
E1 (e1 PK)
E2 (e2 PK)
R (e2 PK, e1)
通過兩種E1
或E2
全員參與可以通過FK約束來處理。
如您所見,E2
和R
具有相同的行列式/ PK。這允許我們將兩個關係組合成一個表格,如果部分參與關係,則使用可空的e1
列,如果參與完全,則不可爲空。通過E1
全員參與仍需要一個FK約束:
E1 (e1 PK)
E2 (e2 PK, e1)
我想知道這是比較正確的。
從邏輯上說,這兩種解決方案几乎是等價的。
使3個表保持概念(ER)模型的結構,但產生更多的表,這增加了一種方式的複雜性。另一方面,它避免了造成它們自身複雜性的空值。
製作2個表可以減少表的數量,但會引入空值。另外,我們必須採用不同的機制(可空列與FK約束)來實現一個概念(完全參與)。
其他要求也會影響決策。如果我有50個可選屬性,我當然不想處理50個不同的表!但是,如果我想創建僅適用於已參與R
的E2
中的值的另一個關係(R2
),則可以在第一個設計中使用FK約束來執行該約束:R2 (e2) referencing R (e2)
。在第二種設計中,我需要使用觸發器,因爲我只想允許引用具有非空e1
值的e2
。
沒有最終的正確答案。概念性,邏輯性和物理性建模解決了不同的問題,而且至今未知的需求會影響您的模型並與您的決策相矛盾。與編程一樣,儘量保持簡單,不斷重構並希望最好。