1. 程式人生 > >繼承關係如何持久化到資料庫

繼承關係如何持久化到資料庫

關係型資料庫中的關係的詳細描述可以參見下面的博文:
資料庫(二)—— 關係資料庫以及關係代數和關係運算
資料庫關係運算
資料庫設計中的資料庫表和表之間的關係有:一對一、一對多和多對多這三種關係。
可見,資料庫表之間的關係是組合關係。
那麼在面向物件程式設計當中有哪些關係呢?
答案是有兩種關係:繼承和組合。
在設計模式中有一句話叫做:組合優於繼承,說的是組合相對於繼承更加靈活。參見如下博文:
組合優於繼承—設計模式之策略模式
詳解繼承與組合的優缺點
那麼下面提出一個問題,具有繼承關係的物件的資料如何儲存到資料庫當中?
在資料庫表中實現表繼承一般來說有3種實現方式:

  • Concrete Table Inheritance(具體表繼承)
  • Single Table Inheritance(單表繼承)
  • Class Table Inheritance(類表繼承)

比如有一隻鴨子,它有屬性是:動物,會叫,兩隻腳。來了一隻可達鴨(除了鴨的屬性,還有會唱可達歌),又來了一隻大黃鴨(除了鴨的屬性,會跳大黃鴨之舞),它們各有各自的屬性。

  1. 具體表繼承
    具體表現:不建立父物件,將父物件的所有屬性轉移到子物件中,為每個子物件建立對於的表。建可達鴨表和大黃鴨表。
  2. 單表繼承
    具體表現:在一個寬表中列出所有父物件和子物件的屬性,同時用一個標識列表示該行資料儲存的是哪個子類的資料。多一個type欄位,用來指明是什麼鴨。
  3. 類繼承表
    具體表現:對父物件和每個子物件建立一個對應的表,然後在子表中設定該子表的主鍵為與父表關聯的外來鍵。給他們新增一個欄位,鴨的id。這個id,在兩張字表中,即表示主鍵,又表示外來鍵。

更詳細的描述請參考博文:
類的繼承關係如何在關係型資料庫體現
Hibernate中的Entity類之間的繼承關係之三JOINED