物件關係特性_ 物件資料庫對SQL的擴充套件


在DBMS中,存在結合了物件資料庫元素和SQL的物件關係特性。SQL語言用於關係資料庫,並且它隨著時間推移而不斷發展。在名為SQL:2008的最新標準中,已經加入了物件特性,儘管並非所有商業DBMS都已實現這些特性。

物件關係模型指的是關係模型與物件資料庫增強的組合。SQL也進行了修訂,以包含與XML相關的特性。

以下是SQL中包含的一些物件資料庫特性:

型別構造器

添加了新的型別構造器來指定複雜物件。例如,行型別對應於元組或結構體構造器,而陣列型別允許指定集合。其他集合型別構造器,如集合、列表和包,最初並非SQL/Object的一部分,但後來被包含在標準中。

物件標識

透過使用引用型別提供了一種指定物件標識的機制。這有助於區分資料庫中的不同物件。

封裝

操作可以封裝在使用者定義型別 (UDT) 中。這些型別可以在其宣告中包含操作。UDT類似於程式語言中的抽象資料型別。使用者定義例程 (UDR) 包含通用方法的定義。

繼承

使用關鍵字“UNDER”支援繼承機制。物件可以繼承其他物件的屬性和行為。這些建立分層結構。

這些物件關係特性擴充套件了SQL的功能。這些是靈活的模型資料結構,並支援高階資料操作。

DBMS中物件的自定義型別和複雜結構

為了建立複雜結構的物件並將型別宣告與表建立分開,DBMS現在支援使用者定義型別 (UDT)。包含了四種集合型別來處理多值型別和屬性,允許指定複雜結構的物件,而不僅僅是簡單的記錄。

要建立UDT,使用者可以使用以下語法將其定義為資料庫模式的一部分:

CREATE TYPE TYPE_NAME AS (<component declarations>);

DBMS中使用引用型別的物件識別符號

可以使用SQL中的引用型別建立唯一物件識別符號。這些識別符號是由系統生成的,並確保每個物件都有不同的識別符號。也可以使用來自基本關係模型的傳統鍵,而不是系統生成的識別符號。

為表中的各個行建立系統生成的 物件識別符號。語法如下:

REF IS <OID_ATTRIBUTE> <VALUE_GENERATION_METHOD>;

這裡,<OID_ATTRIBUTE> 指的是屬性。它將用於標識表中的每個元組。<VALUE_GENERATION_METHOD> 選項是“SYSTEM GENERATED”或“DERIVED”。使用“SYSTEM GENERATED”時,系統會自動為每個元組生成唯一的識別符號。另一方面,當使用“DERIVED”時,將應用使用使用者提供的主鍵值來標識元組的傳統方法。

在DBMS中基於使用者定義型別 (UDT) 建立表

當用戶定義UDT時,可以基於該UDT建立一個或多個表。不可例項化的UDT只能用作屬性型別,不能用作建立表的依據。

操作的封裝

使用者定義型別可以透過在SQL中定義方法來擁有自己的行為規範。指定帶有方法的UDT的語法如下:

CREATE TYPE <TYPE-NAME> (
   <LIST OF COMPONENT ATTRIBUTES AND THEIR TYPES>
   <DECLARATION OF FUNCTIONS (METHODS)>
);

SQL為使用者定義型別提供內建函式。建構函式建立一個新的UDT型別物件,並將每個屬性初始化為其預設值。為每個屬性建立一個觀察器函式以讀取其值。一個更改器函式使用新值更新屬性。這些函式可以阻止公眾使用,需要EXECUTE許可權才能訪問它們。

UDT可以有多個使用者定義函式與其關聯。函式可以是用SQL程式語言編寫的內部SQL函式,也可以是用宿主語言編寫的外部函式。UDT中的屬性和函式可以分為公共(在UDT介面可見)、私有(在UDT介面不可見)和受保護(僅對子型別可見)。虛擬屬性也可以在UDT中定義,它們是使用函式計算和更新的。

指定函式的繼承和過載

SQL使用UNDER關鍵字支援型別繼承。屬性和例項方法都繼承自超型別。UNDER子句中超型別的順序決定了繼承層次結構。子型別可以重新定義其超型別中定義的任何函式,只要簽名保持不變。呼叫函式時,將根據引數的型別選擇最佳匹配。SQL還考慮引數的執行時型別進行動態連結。

表繼承是SQL中的另一個特性,允許子表繼承自超表。這使用UNDER關鍵字指定。當將記錄插入子表時,它也會插入其超表,並且INSERT、DELETE和UPDATE之類的操作會適當地傳播。

透過引用指定關係

一個元組的元件屬性可以使用REF關鍵字作為對另一個表中元組的引用。SCOPE關鍵字指定可以由引用屬性引用的表的名。這類似於外部索引鍵,但使用系統生成的值而不是主鍵值。

要引用元組和行型別的元件屬性,SQL使用點表示法。對於具有REF型別的屬性,使用取消引用符號“->”。例如,查詢SELECT E.Employee->NAME從EMPLOYMENT表中檢索在名為'ABCXYZ'的公司工作的員工的姓名。

SQL提供SCOPE關鍵字,使引用屬性指向相同型別的特定表中的元組,從而允許引用相同型別的多個關係中的元組。

更新於:2023年5月18日

2K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告