2010-05-08 52 views

回答

2

我肯定會使用示例A.所有的查詢都要加入NamedEntity以進行每次查找,這會變得複雜得多(而且可能慢得多)。

即使你的ORM完全抽象了這種繼承關係,但我敢打賭,你將不得不在某個時刻編寫一個原始SQL查詢,並且必須將NamedEntity連接到每個表上將是一個巨大的痛苦。

+0

但我有超過60個實體共有5個字段(不提Id)。而且「不要重複自己」的原則讓我感到緊張,我把這五個領域的每一個都複製粘貼60次。 – Ivan 2010-05-08 22:54:14

+0

我不確定你的公共列是什麼,但是至於Id和其他「常見」列,如CreateDate,LastModifiedDate,我肯定會把它們放在每張表上。你是對的,那裏有重複,但相信我,不要太喜歡數據繼承關係。如果您有超過60個實體共享相同的域相關列(即非審計列),則可能值得在數據庫中考慮不同的繼承模型,如「每個層次的表」。 – 2010-05-08 23:02:47

0

我同意安迪。試圖將其抽象出來並將來自不同領域(客戶名稱,城市名稱,國家名稱)的內容混合在一列中是毫無意義的。它會使選擇數據類型,完整性約束,參照約束和查詢所有不必要的複雜和低效。

1

我會將這些共享字段放在ComplexType中,然後將該類型的屬性添加到每個實體。

(繼承使用ORM時,應遵循相同的規則,在正常OO,當你有一個「是一個」關係。)

所以封裝在一個複雜類型的repitition,避免繼承。

雖然,名稱應該不是那種複雜的類型,它似乎是實體的核心屬性。

0

有一個通用模式稱爲「泛化 - 專業化」。 OO通過繼承來處理gen-spec。這對於OO思維來說似乎簡單自然。

SQL和SQL背後的關係數據模型是構建現實的強大工具。但是OO的思維方式與它截然不同。有一種方法可以爲gen-spec模式設計表格,而且它非常實用且功能強大。它不像繼承一樣簡單,並且它在介紹性的數據庫設計教程中經常被掩蓋。

如果您要在網上搜索「生成專業化關係建模」,您會發現至少有十幾篇優秀的文章和一些不太好的文章,用於設計表格以模擬gen-spec模式。