對象的繼承關係在數據庫中的實現方式和PowerDesigner設計

在面向對象的編程中,使用對象的繼承是一個非常普遍的做法,但是在關係數據庫管理系統RDBMS中,使用的是外鍵表示實體(表)之間的關係,那麼對於繼承關係,該怎麼在RDBMS中表示呢?一般來說有3種實現方式:

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

比如在一個教務系統中,有老師學生2個對象,這兩個對象都是“人”對象的子類,所以我們可以建立一個Person表,該表有人的公共屬性:姓名、性別等,還有就是數據的唯一標識,一個ID。而教師對象有教師的特有屬性,比如職稱,學生有學生的特有屬性,比如學號。所以我們可以建立Person、Teacher、Student3個表,其關係在PowerDesigner中如圖所示:

image

1.具體表繼承。

不建立父對象,將父對象的所有屬性轉移到子對象中,爲每個子對象建立對於的表。如果使用這種方法,那麼就只需要建立Teacher表和Student表,不需要Person表,在PowerDesigner中,雙擊繼承節點,打開屬性窗口,取消“Generate Parent”選項,選中“Generate children”並選擇“Inherit all attributes”,如圖所示:

image

生成的數據庫表將如圖所示:

image

2.單表繼承。

在一個寬表中列出所有父對象和子對象的屬性,同時用一個標識列表示該行數據存儲的是哪個子類的數據。在PowerDesigner中,修改繼承節點的屬性,取消“Generate children”,選中“Generate parent”,然後在下面添加一個標識列,叫PersonType,如圖所示:

image

生成的數據庫表,在一個寬表中表示如圖所示:

image

可以看到Person中的列集成了Person、Teacher、Student這3個表的所有列,同時還多了一個列PersonType,這個列就是用來區分這行數據到底表示的是一個學生還是一個老師。

3.類表繼承。

對父對象和每個子對象建立一個對應的表,然後在子表中設置該子表的主鍵爲與父表關聯的外鍵。在PowerDesigner中,對於繼承節點的屬性,允許生成父和子表,另外,將“Inherit only primary attributes”選中。如圖所示:

image

生成的數據庫表如圖所示:

image

這裏可以看到,Teacher的主鍵和Student的主鍵同時又是該表的外鍵,連接到Person表。

PS:如果使用NHibernate進行編程,那麼可以參考這篇文章,介紹了NHibernate對這三種繼承的配置方法。

如果使用Entity Framework進行編程,那麼可以參考這篇文章

發佈了112 篇原創文章 · 獲贊 5 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章