跳轉到內容

結構化查詢語言/資料庫管理系統 (DBMS)

來自華夏公益教科書,為開放世界而開放的書籍


歷史背景

[編輯 | 編輯原始碼]

計算機應用的最初目標之一是將大量資料儲存在海量儲存裝置上,並在以後的某個時間點檢索它們。隨著時間的推移,使用者需求不斷增加,不僅包括順序訪問,還包括對資料記錄的隨機訪問,並行(寫入)程序的併發訪問,硬體和軟體故障後的恢復,高效能,可擴充套件性等等。在 1970 年代和 1980 年代,科學和計算機行業開發了技術來滿足這些需求。

資料庫管理系統包含什麼?

[編輯 | 編輯原始碼]

高效資料儲存的基本要素——也是所有資料庫管理系統 (DBMS) 的核心——是對儲存在中央記憶體和海量儲存裝置(如 B 樹索引順序訪問方法 (ISAM) 以及其他索引技術)中的資料的快速讀寫訪問演算法的實現,以及對髒塊和非髒塊的緩衝。這些演算法並非 DBMS 獨有。它們也適用於檔案系統、某些程式語言、作業系統、應用程式伺服器等等。

除了採用這些例程之外,DBMS 還保證符合 ACID 正規化。這種符合意味著在多使用者環境中,一次事務中對資料的任何更改都將是

原子性:所有更改全部發生,或者都不發生。
一致性:更改將資料庫從一個有效狀態轉換為另一個有效狀態。
隔離性:同時工作於同一資料的不同使用者的交易不會互相影響。
永續性:即使系統隨後崩潰,資料庫仍將保留已提交的更改。

DBMS 設計的分類

[編輯 | 編輯原始碼]

可以區分以下幾代 DBMS 設計和實現

  • 層次式 DBMS:資料結構在層次化的父子模型中設計,其中每個子節點只有一個父節點(根結構除外,它沒有父節點)。結果是資料被建模並存儲為樹。子行在物理上直接儲存在擁有它們的父行之後。因此,無需在子行中儲存父節點的 ID 或類似資訊(XML 實現類似的方法)。如果應用程式以完全相同的層次化方式處理資料,則它速度快且效率高。但如果需要以偏離此順序的順序處理資料,則訪問效率較低。此外,層次式 DBMS 不提供 n:m 關係的建模。另一個缺點是無法直接導航到儲存在較低級別的資料。您必須首先遍歷給定的層次結構才能到達該資料。
最著名的層次式 DBMS 是 IBM 的 IMS
  • 網路型 DBMS:網路模型將資料結構設計為一個複雜的網路,其中從一個或多個父節點到一個或多個子節點都有連結。甚至迴圈也是可能的。不需要單個根節點。通常,術語“父節點”和“子節點”會失去它們的層次化意義,可以稱為“連結源”和“連結目標”。由於這些連結在資料庫中實現為物理連結,因此遵循這些連結的應用程式將表現出良好的效能。
  • 關係型 DBMS關係模型 將資料結構設計為具有屬性(列)的關係(表),以及這些關係之間的關係。該模型中的定義以純宣告式方式表達,不預先確定任何實現問題,如從一個關係到另一個關係的連結或資料庫中行的特定順序。關係完全基於內容。在執行時,所有連結和連線都是透過評估實際資料值來完成的,例如:... WHERE employee.department_id = department.id ...。結果是——除了顯式的外部索引鍵——沒有父/子或所有者/成員的意義。該模型中的關係沒有方向。
關係模型和 SQL 基於 關係代數 的數學理論。
在 1980 年代和 1990 年代,基於關係設計正規化的專有和開源 DBMS 成為市場領導者。
  • 面向物件 DBMS:如今,大多數應用程式都是用面向物件程式語言 (OOP) 編寫的。在這種情況下,如果底層 DBMS 屬於關係型 DBMS 類,則會出現所謂的 物件關係阻抗不匹配。也就是說,與應用程式語言相比,純關係型 DBMS (prDBMS) 不支援 OOP 的核心概念
型別系統:OOP 不僅知道基本資料型別。作為其語言的核心概念,它們提供了定義具有複雜內部結構的類的功能。類構建在基本型別、系統類、對其他類或同一類的引用之上。prDBMS 只知道預定義的型別。次要的 prDBMS 堅持第一正規化,這意味著屬性必須是標量的。在 OOP 中,它們可以是集合、列表或所需型別的陣列。
繼承:OOP 的類可以從其超類繼承屬性和方法。prDBMS 不知道此概念。
多型性:執行時系統可以通過後期繫結來決定將在具有相同名稱和引數型別的多個方法組中呼叫哪個方法。prDBMS 不知道此概念。
封裝:資料和對資料的訪問方法儲存在同一個類中。無法直接訪問資料——唯一的方法是使用該類的訪問方法。prDBMS 不知道此概念。
面向物件 DBMS 被設計用來彌合 prDBMS 和 OOP 之間的差距。在鼎盛時期,它們在 1990 年代中期和後期佔據了較弱的市場地位。之後,它們的一些概念被納入 SQL 標準以及 rDBMS 實現中。
  • NewSQL:這種型別的 DBMS 試圖提供與 NoSQL 系統相同的可擴充套件效能,同時保持 ACID 正規化、關係模型和 SQL 介面。它們試圖透過避免重量級恢復或併發控制來實現可擴充套件性。


華夏公益教科書