概念釐清
- 面向對象資料庫設計:使用者定義資料庫模式的思路,可應用於任何 DBMS(關聯、網狀、階層、OO、甚至檔案系統)。
- 面向對象 DBMS (OODBMS):資料庫管理程式的實作理論,非設計方法。
- OOSE (Object-Oriented Software Engineering) 自上而下貫徹 OO 思維,資料庫設計僅是其中一環。
資料庫設計的關鍵地位
開發步驟:系統架構 → DBMS 架構選型 → 平台/工具選擇 → 資料庫設計 (撰寫 DDL) → 介面程式 → 載入資料 → 測試驗證。
最重要、最困難 的環節是資料庫設計,非應用系統設計。許多開發者迷信 DBMS 功能強大便忽略設計,實則 DBMS 只提供舞台,劇本由設計者撰寫。
設計方法論:實體主導 vs 屬性主導
- 屬性主導:由屬性歸納實體,維持函數相依。
- 實體主導:先識別有意義實體,再定義屬性。
面向對象設計屬於實體主導,從物件模型出發。當實體數遠少於屬性數(< 1/10)時最適合。
三層模式架構的 OO 擴充
- 內部模式:DBMS 內部儲存結構(SQL 定義),最接近物理。
- 概念模式:多個內部模式聚合,邏輯資料庫邊界(如:計劃處 DB、機務處 DB),實現物理意義與特定 DBMS 操作的資訊隱藏。
- 外部模式:應用程式視圖,不同子系統見到的資料子集。
面向對象設計在概念模式層建立物件模型與關聯模式的映射規範。
物件模型到關聯模式的核心映射規則
- 類別 → 資料表:每個實體類別對應一張基礎表,主鍵對應物件識別碼 (OID)。
- 屬性 → 欄位:單值屬性直接映射;多值屬性需建立關聯表(一對多)。
- 關聯 → 外鍵/關聯表:
- 1:1 可合併或雙向外鍵
- 1:N 「多」端加外鍵
- N:M 建立中介關聯表,雙向外鍵 + 複合主鍵
- 繼承 → 三種策略:
- 單表繼承:全屬性合一表,加判別欄位
- 具體表繼承:各具體類別一表,共用屬性重複
- 類別表繼承:超類別一表,子類別各一表,主鍵同為外鍵
- 聚合/組合 → 擁有關係:組合生命週期綁定(級聯刪除),聚合獨立。
- 行為 → 預存程序/觸發器/檢視:業務邏輯封裝於伺服器端,確保資料完整性與一致性。
關鍵原則
映射規範必須文件化、版本化、團隊共識。資料庫模式一旦上線,變更成本極高;物件模型演進需透過嚴格映射規範同步至關聯模式,避免「物件-關聯阻抗不匹配」擴大。