首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實作自製 ORM 核心觀念(二):繼承映射策略與物件組合

     編輯:關於C語言

繼承階層映射策略深度解析

在物件導向設計中,繼承是核心機制之一,ORM 框架必須妥善處理類別繼承關係對應到關聯式資料表的問題。業界公認有三種主要映射模式,各有優缺點,選擇時需根據業務場景權衡。

策略一:單一繼承路徑對應單一資料表(ONE_INHERITANCE_PATH_ONE_TABLE)

此模式下,每個具體子類別對應一張獨立資料表,包含父類別與自身的所有屬性欄位。以 Parent 為基類,Child1、Child2 為衍生類為例:

  • Child1 表:Field1 對應 Property1,Field2 對應 Property2,Field3 對應 Property3
  • Child2 表:Field1 對應 Property1,Field2 對應 Property2,Field4 對應 Property4

優點:資料零冗餘,儲存空間利用率高。
缺點:若需依父類別條件查詢所有子類別資料,必須對多張表執行 UNION 或多次查詢,當繼承橫向擴展(子類別眾多)時,查詢效能嚴重下降。

策略二:單一類別對應單一資料表(ONE_CLASS_ONE_TABLE)

每個類別(含父類別)各自對應一張表,父子表透過主鍵/外鍵關聯。例如 Parent 表存放共同屬性,Child1、Child2 表僅存放各自擴充屬性並關聯回 Parent。

ONE_CLASS_ONE_TABLE 結構示意圖

優點:資料冗餘最小,符合正規化原則。
缺點:繼承層級愈深、關係愈複雜,SQL 查詢與異動語句愈龐大,維護難度與效能損耗雙增。若類別無繼承關係,上述三種模式退化為相同結構。

物件組合關係的 ORM 考量

除了繼承,真實業務模型大量存在「整體-部分」組合關係。例如 Person 物件包含 Hand(左手/右手)、Head 等子物件。ORM 需支援:

  • 巢狀物件的級聯持久化(Insert/Update/Delete 同步處理子物件)
  • 子物件的外鍵關聯管理(如 Hand.PersonID 指向 Person.ID)
  • 載入策略選擇:立即載入 vs. 延遲載入

這些組合關係的處理好壞,直接決定 ORM 實用性與效能表現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved