🎯 什麼情境該想到我
當你「有一個繼承階層要存進資料庫,想用一張表全裝、查詢時不用 join」的時候。
⚙️ 怎麼用(步驟 / 公式)
意圖:把整個繼承階層的所有類別都存進同一張表,用一個型別欄位區分每列屬於哪個子類別。
做法要點:
- 一張表包含所有子類別可能用到的欄位;某列用不到的欄位就留空(NULL)。
- 用一個 type / discriminator 欄位標明該列對應的具體類別。
- 讀寫任何子類別都不需要 join,查詢快、對應簡單。
- 三種繼承對應中最省 join 的一種。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 表會有很多空欄位,浪費空間、語意較弱、不易加非空約束。
- 所有子類別欄位擠一張表,欄位多時難維護、容易變寬表。
- 想正規化、少空欄位改用類別表繼承;想各自獨立表改用具象表繼承。
🔗 相關工具
- 類別表繼承 Class Table Inheritance(正規化、以 join 組合的對照)
- 具象表繼承 Concrete Table Inheritance(每個具象類別一張完整表的對照)
- 繼承對應器 Inheritance Mappers(組織繼承載入 / 儲存)
- 企業應用架構模式