數據庫設計-繼承模式

(一)繼承模式
繼承模式,可以看作是“主從模式”的一種特殊情況(或者說是“變形”),它所代表的兩個對象也是“一對多”的關係。它與“主從模式”的區別是,“繼承模式”中從表的主鍵是複合主鍵,並且複合主鍵中必定包含主表的主鍵列。
根據從表繼承主表的列的數量,繼承模式又分以下兩種情況:
1.       從表繼承主表的全部列
在這種情況下,從表除了代表自身的專用字段以外,還冗餘了主表的全部字段。這種設計方式的缺點顯而易見:
  • 數據冗餘度大
  •  一致性差
  • 磁盤存儲量大
它的優點也顯而易見:
  • 正因爲它的冗餘度大、所以它不易丟失數據。假設主表數據丟失、或者被誤操作刪改,也能依據從表數據重新生成主表數據;這種設計方式,可以在發生數據損壞的時候從應用的角度進行一定程度的數據恢復,等於是在SQL Server數據庫級別的數據恢復功能之上又加了一道保險。
  • 正因爲它一致性差、主表數據被重複存儲,所以可依據外鍵關係進行數據驗證。將主從表記錄作關聯比較,如果數據不一致,就可以得知數據要麼被人爲改動,或者要麼程序代碼中存在bug。
  • 儘管磁盤存儲量大,但是數據在查詢統計的時候,只需針對從表進行搜索即可,無需關聯操作,可以加快檢索的速度。這就是數據庫模型設計中經常提到的“以空間換時間”。
2.       從表只繼承主表的主鍵列
這種設計方式,從表只繼承了主表的主鍵列,這種方式的優缺點與前面剛好相反。
優點:
  • 數據冗餘度小
  • 一致性高
  • 磁盤存儲量小
缺點:
  • 正因爲它的冗餘度小、所以它易丟失數據。假設主表數據丟失、或者被誤操作刪改,就只能通過SQL Server數據庫級別的數據恢復操作來找回丟失的數據了。
  • 正因爲它一致性高,所以無法進行應用程序級的數據驗證。
  • 由於採用了一致性設計,磁盤存儲量較小,但是數據在查詢統計的時候,必須要對兩個表進行內連接(INNER JOIN)操作,才能搜索到相關數據。而內連接操作時需要耗費一定的時間的。這就是數據庫模型設計中經常提到的“以時間換空間”。
當然,在實際的數據庫模型設計過程中,還會有介於上述兩者之間的第3種情況出現,那就是從表繼承了主表的主鍵列以及部分其他列。這就要求我們設計人員要依據實際的業務需求進行綜合分析、權衡、折中,給出最符合業務需求的設計結果。

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