26

我的問題是關於關係數據庫系統中的繼承建模。我有規範的數據模型,並且我有一些與從產品表繼承某些屬性的產品定價相關的字段,我想在MySQL關係數據庫中對此繼承進行建模,因此,我們如何在關係中執行繼承建模數據庫?「如何在關係數據庫中進行繼承建模?

謝謝。

回答

27

Martin Fowler在他的「企業應用程序體系結構模式」一書中對此進行了廣泛討論。獲取這本書,並考慮:

  1. Single Table Inheritance
  2. Class Table Inheritance
  3. Concrete Table Inheritance

網站應該給你一些想法。您可能還想閱讀inheritance mappers的部分。每種不同的方法都有其優點和缺點,所以要明智地選擇。

+18

這個答案涉及購買一本書以完全實現。你有可能添加類似的網頁資源嗎? – 2010-10-27 23:11:01

3

關係數據庫不處理對象(因此,繼承) - 他們處理人際關係。你真正要問的是如何將你的對象結構映射到你的數據庫 - 而答案是「它取決於你的ORM層」。

看一看Mapping Objects to Relational Databases: O/R Mapping In Detail文章的一些細節。如果您告訴我們您使用的是什麼軟件堆棧,您可能會得到更爲切實的答案。

+1

這可能聽起來很迂腐,但我不認爲說關係數據庫處理關係並不準確,而是他們被稱爲是因爲他們處理這裏定義的關係: http://en.wikipedia.org/ wiki/Relation_(數據庫) – 2009-10-14 18:17:07

+1

@Ralph:Wiki是一個膿腫; confabulator沒有認證。關係數據庫處理實體和關係,而不是對象。如果RDb是真正的關係,則對象可以很容易地映射;如果不是,則不行。 – PerformanceDBA 2010-11-11 04:06:25

+3

您可以在沒有ORM的情況下擁有表繼承 – 2013-12-23 20:19:32

2

如果你只是想在一些網絡文章看的讀一本書,而不是,你可以找到通過谷歌搜索上的一些好文章:

Generalization Specialization Relational Modeling 

艮規範模式涵蓋了很多相同的地那繼承在OOP環境中。

如果您在

Generalization Specialization Object Modeling 

谷歌,你會得到一個全新的一批物品,其中大部分明確提及繼承。

有一種設計技術總結在信息標籤下面的標籤中。這允許您使用子類表「擴展」類表,如果您允許奇怪使用單詞「extend」。這涉及到一些工作,但這是值得的。

+0

儘管這在理想化的S.O.中並不是真正的答案。感覺,我發現它非常有用。 – derekv 2018-02-09 21:54:16

1

「數據庫管理中的實際問題」第6章可能是一個有趣的讀物。

正如所有其他章節,可能,但那些不直接關係到你的問題。