2017-01-20 55 views
0

假設我有兩個強實體E1和E2連接由1對多的關係R.ER圖到數據庫轉換

E1 < --------- --------ř - E2

當我將上面的ER圖轉換成數據庫時,會創建多少個表?

我知道,當E2將在總參與答案將是2.因爲,E2的主鍵將完美合併。我不確定以上。我看到了多個地方,並找到了不同的答案。我正在尋找一些有答案的堅實論據。

答案可以是2或3.我想知道哪個更正確。

回答

0

Chen的原始方法將每個實體關係和關係關係映射到一個單獨的表。這將產生3個表:

E1 (e1 PK) 
E2 (e2 PK) 
R (e2 PK, e1) 

通過兩種E1E2全員參與可以通過FK約束來處理。

如您所見,E2R具有相同的行列式/ PK。這允許我們將兩個關係組合成一個表格,如果部分參與關係,則使用可空的e1列,如果參與完全,則不可爲空。通過E1全員參與仍需要一個FK約束:

E1 (e1 PK) 
E2 (e2 PK, e1) 

我想知道這是比較正確的。

從邏輯上說,這兩種解決方案几乎是等價的。

使3個表保持概念(ER)模型的結構,但產生更多的表,這增加了一種方式的複雜性。另一方面,它避免了造成它們自身複雜性的空值。

製作2個表可以減少表的數量,但會引入空值。另外,我們必須採用不同的機制(可空列與FK約束)來實現一個概念(完全參與)。

其他要求也會影響決策。如果我有50個可選屬性,我當然不想處理50個不同的表!但是,如果我想創建僅適用於已參與RE2中的值的另一個關係(R2),則可以在第一個設計中使用FK約束來執行該約束:R2 (e2) referencing R (e2)。在第二種設計中,我需要使用觸發器,因爲我只想允許引用具有非空e1值的e2

沒有最終的正確答案。概念性,邏輯性和物理性建模解決了不同的問題,而且至今未知的需求會影響您的模型並與您的決策相矛盾。與編程一樣,儘量保持簡單,不斷重構並希望最好。