首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

物件導向資料庫核心特性:滯後連結與物件巢狀結構深度解析

     編輯:MySQL 資料庫相關知識

OO 資料模型基礎

物件導向資料庫(OODB)以 OO 模型描述現實世界實體,核心概念包含:物件與 OID、封裝、類別與類別階層、訊息傳遞、繼承。這些概念構成了 OODB 與關聯式資料庫的根本差異。

核心概念速覽

概念說明關聯式對應
物件實體統一模型化,具狀態(屬性)與行為(方法)元組 + 程序
OID系統產生、全域唯一、不變的物件標識符主鍵(但主鍵可變、業務相關)
封裝內部實現與外部介面隔離,透過訊息溝通無對應(資料與程序分離)
類別共享屬性/方法的物件集合,物件為類別實例關聯綱目
類別階層單/多重繼承形成有限層次結構無原生支援
訊息外部呼叫物件方法的機制SQL 呼叫預存程序
繼承子類別繼承父類別特性,支援覆寫與衝突解決無原生支援

特性一:滯後連結

定義

同一操作名稱可對應多種實作,具體連結哪個實作推遲到執行期根據物件實際類型決定。又稱動態綁定、多型派發。

程式碼範例

// C++ 風格示意
class TDate {
public:
    int month, day, year;
    void Set(int m, int d, int y) { ... }  // 同時設定三欄位
    void Set(int m) { ... }                // 僅設定月份
    void Set(int d, int y) { ... }         // 設定日、年
};

TDate myDate;
myDate.Set(12, 3, 2002);  // 呼叫 3 參數版
myDate.Set(12);           // 呼叫 1 參數版
myDate.Set(12, 2002);     // 呼叫 2 參數版

運作機制

  1. 編譯期:僅檢查語法、型別相容,不決定具體函數位址
  2. 執行期:根據物件實際類型、參數型別/個數,查詢虛函數表/方法字典,動態跳轉到正確實作
  3. 支援:多載(同名不同參數)、覆寫(子類別重新實作父類別虛函數)

資料庫層面的滯後連結

  • 查詢語言中呼叫物件方法:SELECT emp.CalculateBonus() FROM Employee emp
  • Employee 可能有 Manager、Engineer 子類別,各自實作不同獎金算法
  • 執行時根據每個 emp 實際類型動態派發正確 CalculateBonus()
  • 無需在 SQL 中寫 CASE WHEN type='Manager' THEN ...,實現真正多型查詢

特性二:物件巢狀結構

定義

物件的屬性值可以是另一個物件,形成遞迴的「物件包含物件」結構。又稱複合物件、複雜物件。

結構範例

class Address {
    string street, city, zip;
}

class Customer {
    string name;
    Address homeAddress;      // 內嵌物件
    Address workAddress;      // 另一個 Address 實例
    List orders;       // 集合屬性,元素為 Order 物件
}

class Order {
    Date orderDate;
    List items;
    Customer customer;        // 反向參考,形成物件圖
}

巢狀層次與類別階層的正交性

  • 類別階層(垂直):繼承關係,Manager IS-A Employee
  • 巢狀結構(水平):包含關係,Customer HAS-A Address
  • 兩者結合形成豐富的物件圖,自然表達現實世界複雜關係

資料庫操作優勢

不同粒度觀察

巢狀結構允許不同用戶以不同粒度存取:

  • 銷售人員:看 Customer → Order → OrderItem 完整明細
  • 財務人員:只看 Order 總金額、發票資訊
  • 物流人員:只看 Address、OrderItem 規格尺寸
  • 透過定義不同「視圖物件」或存取路徑,實現細粒度存取控制

持久性與 OID

  • 程序內持久性:執行期間 OID 不變
  • 程序間持久性:跨程序執行 OID 不變
  • 永久持久性:跨重組、重構、Schema 變更 OID 不變(OODB 特有)

關聯式資料庫的主鍵值在重組時可能改變,OID 則由系統保證永久不變,是物件身分的鐵律。

總結

滯後連結 實現行為多型,讓相同介面對應多樣實作;物件巢狀 實現結構複合,自然表達整體-部分關係。兩者結合,使 OODB 能以接近現實世界的方式建模複雜領域,大幅降低阻抗失配,提升開發效率與系統可維護性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
操作關聯式做法OODB 做法
讀取客戶含地址JOIN 兩表或兩次查詢單一物件導航 cust.homeAddress
修改地址UPDATE address 表直接修改 cust.homeAddress.city = 'Taipei'
刪除客戶連帶訂單外鍵 CASCADE 或多 DELETE刪除根物件,系統依擁有關係級聯刪除
查詢訂單項目總價JOIN 3 表 + SUM/GROUP BYorder.items.Sum(item => item.Price * item.Qty)