首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

真正的SQL:從關係型到物件導向的數據庫演進思考

     編輯:關於SqlServer

為什麼我們需要ADO或JDO這類中介層?根本原因在於:數據庫查詢語言(SQL)並非程式設計語言的「本地語言」。SQL屬於高階宣告式語言,而應用程式使用的是命令式語言(如Java、C#)。這種語言範式的不匹配,迫使開發者引入API介面來橋接兩者。

相等與同一:兩個容易混淆的概念

在物件導向編程中,「相等」與「同一」是截然不同的概念。若兩個引用指向同一個記憶體位址,它們是「同一」物件;若兩個獨立物件擁有相同的成員值,它們則是「相等」物件。這區別在持久化層設計中至關重要。

物件持久化與ODL

Delphi的二進位表單檔案(.dfm)將控件物件序列化存儲,編譯時再反序列化還原到程式碼,這正是物件持久化的經典案例。專門定義可持久化物件的語言稱為ODL(Object Definition Language),它試圖解決物件模型與存儲模型的映射問題。

OQL的興衰與介面導向程式設計

2002年解散的組織曾制定OQL(Object Query Language),但將其置入OO數據庫卻顯得多餘。因為「為了使用而建立的使用者與使用對象之間的抽象」——即介面導向程式設計——在OO數據庫中本來就不需要額外的查詢語言抽象層。

關係型與物件型數據庫的本質差異

關係型數據庫時代,過程式語言的數據模式與關係模型尚能對應。但進入OO時代後,若仍用關係型數據庫,無異於「把車拆散存進車庫,明早再組裝開走」。車本身是邏輯完整的可運行整體,僅為存儲而拆解屬於不必要的抽象。

OO數據庫直接存儲物件實例,其數據模型邏輯與程式邏輯完全對應,省去了中間查詢語言層,可直接使用程式語言本地語法,並保證編譯期型別安全。反觀關係模式,查詢語句常以字串形式傳遞,雖有存儲過程等機制補救,但難以避免「數據庫存在程式中不存在的實例引用」等問題,唯有型別安全機制才能在編譯期捕獲未被引用的變量。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved