日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

对象的继承关系在数据库中的实现方式和PowerDesigner设计

發布時間:2025/3/21 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对象的继承关系在数据库中的实现方式和PowerDesigner设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

1.具體表繼承。

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

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

2.單表繼承。

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

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

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

3.類表繼承。

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

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

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

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

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

總結

以上是生活随笔為你收集整理的对象的继承关系在数据库中的实现方式和PowerDesigner设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。