面向對象數據庫簡介

面向對象數據的定義

面向對象數據庫(OODB)是一個基於面向對象編程語言(OOP)的數據庫,其數據都是以對象/類的形式表示並存儲在面向對象數據庫中。簡單來講,面向對象數據庫 = 面向對象編程語言 + 關係型數據庫特性。在這個公式裏面,面向對象編程語言的三個特性爲繼承、多態、封裝;而關係型數據庫特性的三個特性:實體完整性、併發、查詢處理,因此可用下圖[1]表示面向對象數據庫。
在這裏插入圖片描述

關係型數據庫的問題

傳統的關係型數據庫存在一些約束:

  • 數據以簡單的二維表形式將數據存儲,每個元組的字段不可分。
  • 類型必須爲內置的有限幾種類型。
  • 不能用一個獨立的單元表示一個複雜實體。
  • 不能定義屬於某個類型的複雜處理操作。

因爲以上提出的約束,在傳統關係型數據中,應用程序不能直接使用SQL查詢返回的結果,需要執行裝箱和拆箱操作:即需要顯式地將返回的字節序列轉換到相應編程語言下的類型 (拆箱),當數據需要存儲回數據庫前 ,也需要完成上述轉換的逆過程(裝箱)。舉個例子[2],假設在數據庫中存有一個零件表格part:

create table part ( //零件關係part的schema
    int Pno,
    char(15) pname,
    char(10) psize,
    char(5) pcolor
);

應用程序使用C語言訪問pno = 16的零件,需要按照如下僞代碼地形式預處理:

Define cursor P as Select * From Part Where pno = 16; //用遊標讀取數據庫
struct Part { //應用程序訪問時需定義Part類型
    int number;
    char* name;
    char* bigness;
    char* color;
} Example_part;
//將打開的part表格的遊標轉換到Example_part類型上去
Open P into Example_part Until no-more{
    Fetch P (
    Example_part.number = pno,
    Example_name = pname,
    Example_part.bigness = psize,
    Example_part.color = pcolor);
}
//對訪問的結果進行後續操作

上述例子表明,由於SQL查詢返回的結果獨立於任何編程語言,應用程序訪問SQL查詢結果時必須先將結果綁定到應用程序中的自定義類型上去,隨後才能對數據執行操作。並且SQL中的數據類型不能爲每種實體定義相應的複雜操作,應用程序需要手動實現這些對實體數據的操作代碼。此外,由於不能自定義數據類型以及封裝處理數據對象的操接口, 用戶必須顯式地管理不同數據表格之間的關聯關係,爲了保證完整性需要定義主鍵,爲複雜的數據操作和事務寫相應存儲過程

面向對象數據庫的應用場景

一般的數據庫應用程序例如銀行,教務處等需要應對的數據類型結構簡潔,進行數據庫設計和應用程序設計時負擔較小。但是對於那些不得不與複雜,特殊化的數據結構打交道的新型的數據庫應用,例如衛星數據應用,CAD建模應用,多媒體數據庫應用,讓應用程序顯式地管理數據表格之間的關聯關係、定義複雜的主鍵、實現複雜的存儲過程無疑是不現實的。在這些應用場景下,傳統關係型數據庫性能較差,例如實現一個最近鄰查找可能都需要引入join操作。

面向對象數據庫在1985年左右應運而生,主要是希望解決上述問題,他們主要以工程應用軟件作爲其市場[2]。當然,由於OODB缺乏數據保護、訪問控制機制、查詢處理和事務處理系統,大部分OODB並不將商業數據處理作爲他們市場,這也是OODB數據庫無法獲得較高數據庫市場佔有率的根本原因。

面向對象數據庫以對象作爲存儲的基本單位,多個類型相同的對象的集合成爲一個類。現實世界的任一實體都被統一地模型化爲一個對象,每個對象有一個唯一的標識,稱爲對象標識。藉助持久性編程語言的底層特性,任何對象從磁盤讀入內存和寫回磁盤均能隱式地保證,在內存中的數據只是數據庫中該對象的臨時副本,應用程序可以調用屬於該對象的接口,處理封裝在對象內部的數據,類似C++和java那樣。

面向對象數據庫的優缺點

最後總結而言,面向對象數據庫相比關係型數據庫的優缺點如下[3]:

優勢

  • 數據模型爲語義數據模型,基於現實世界。
  • 對象訪問不需要裝箱和拆箱操作,節省編程和執行時間。
  • 更好的併發控制 – 對象的層次結構可能被鎖定。
  • 在分佈式架構狀態下可以很好的工作。

劣勢

  • 關係表更簡單易懂,數據結構的存儲較爲簡單。
  • 數據間的關係相對簡單時,面向對象數據庫效率較低。
  • 關係數據庫有更多的工具,對事務處理,分析型數據處理任務的支持更好。
  • 關係型數據庫擁有統一的標準,相應的服務和支持更加穩定。

參考文獻

[1]. What is an Object-Oriented Database, https://study.com/academy/lesson/what-is-an-object-oriented-database.html 2020,2,24

[2]. Joseph M. Hellerstein and Michael Stonebraker. What Goes Around Comes Around. Readings in Database Systems, 4th Edition (2005)

[3]. 面向對象數據庫,https://tson.com/object-oriented-databases-translate/ 2020,2,24

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章