Craig Larman與書「應用UML與模式」介紹了3把共同解決這個問題。
你的例子不是特別有幫助 - 有沒有合乎邏輯的理由有3種不同的數據庫管理人員的姓名的方式(雖然這並不經常因爲數據導入/導出古怪的發生)。
然而,有一個「人」實體可能是僱員(包括employee_id),聯繫人(帶有到潛在客戶表的鏈接)或客戶(帶有customer_id和鏈接到訂單表)。
在Larman與的書,他給3個解決方案。
一張表來統治他們全部 在這裏,您創建一個包含所有已知列的單個表。這創建了一張亂七八糟的表格,並且推動了將每個子類持久化到應用程序層的規則的責任 - 數據庫不會強制客戶擁有customer_id。但是,它使連接變得更加簡單 - 任何需要鏈接到人員的表格都可以鏈接到人員表格。
超類表 這通過將通用屬性提取到單個表中來清理事情 - 例如, 「person」 - 並將子類特定的字段推送到子類表中。因此,您可能將「person」作爲超類表,並將「contact」,「employee」和「customer」表與特定的子類數據關聯起來。子類表有一個「person_id」列以鏈接回超類表。這更復雜 - 通常在檢索數據時需要額外的連接 - 但也不太容易出錯 - 您不會意外地使用爲「員工」寫入無效屬性的錯誤來破壞數據模型。每個子類
表 - 這是你所描述的東西。它將相當數量的重複引入數據模型,並且您經常有條件連接 - 「如果person type = y,則連接到表x」,這可能會使數據訪問代碼變得棘手。
最原始的方式發佈結構我見過。請使用小提琴取樣。 –
比爾的答案確實與多態性有關,但你沒有。不過,我可能錯誤地理解了它。請詳細說明。 – Sebas
謝謝,可能我是錯誤理解某人的人。我想要做的就是從一張表中引用可以以多種方式存儲的信息(在不同的表中),並試圖找到如何定義集合表結構的正確方法。 – JCZ