1.5 數據模型和數據存儲

數據庫管理系統的用戶最終關心的是某個現實世界中的企業,在數據庫管理系統中存儲的數據描述了該企業的方方面面。比如,在一個大學裏,有學生、教師、課程等實體。在大學數據庫中的數據描述了這些實體及其之間的關係

一個數據模型就是一個由高級數據描述結構組成的集合,隱藏了許多底層的存儲細節。數據庫管理系統允許用戶使用數據模型的術語來定義要存儲的數據。本書重點介紹的是關係數據模型,它是今天許多數據庫管理系統的基礎。

雖然數據模型隱藏了很多細節,但是跟用戶如何看待蘊含的企業相比,數據模型還是更接近數據庫管理系統如何存儲數據。

一個語義數據模型是一個更抽象的高級數據模型,使得用戶能夠更容易地構想出一個良好的有關企業數據的初始描述。

這些模型包含了許多對描述企業實際場景有幫助的結構。數據庫管理系統並不打算直接支持所有的結構,它是圍繞僅有幾個基礎結構的數據模型構建的,比如關係模型。

使用語義模型描述的數據庫設計可以作爲一個很好的開始,並在接下來被轉換成使用數據庫管理系統實際支持的數據模型描述的數據庫設計。

一個廣泛使用的語義模型是實體-關係模型,允許我們圖形化描述實體及其之間的關係,詳情請看第2章。

1.5.1 關係數據模型

本小節簡單介紹了關係模型。

在關係模型中,核心的數據描述結構是關係,關係可被認爲是一個由記錄組成的集合。

一個schema就是使用數據模型提供的術語對數據進行的一個描述。

在關係模型中,一個關係的schema描述了關係的名字、每個字段的名字、每個字段的類型。比如,在一個大學數據庫中的學生信息可能存儲在一個有如下schema的關係中:

Student(sid:string,name:string,login :string,age:integer,gpa:real)

上述schema說的是在Student關係中的每個記錄有5個字段,且指出了每個字段的名字和類型。

在Student關係中的每一行是一條描述了一個學生的記錄。注意,雖然這份描述是不完整的,但是對一個大學數據庫的潛在應用已經足夠了。每行遵守了Student關係的schema。因此,可以認爲schema是描述一個學生的模板。

通過應用在一個關係中的每個記錄必須要滿足的完整性約束,我們可以更精確地描述多個學生組成的集合。比如,我們可以要求:每個學生必須有唯一的sid。注意到,簡單地向Student關係中添加一個字段是不能實現前述要求的。對一個字段的值的唯一性描述會提升數據描述的精確性。可用的描述完整性約束的結構是一個數據模型中很重要的方面。

其他的數據模型

除了關係模型外,還有分層模型、網絡模型、面向對象數據模型、對象關係數據模型。雖然有許多數據庫使用層級和網絡模型,基於面向對象與對象關係模型的數據庫系統在市場上不斷獲得認可,但是佔主導位置的模型依然是關係模型。

在這本書中,我們的重點是關係模型,因爲它的廣泛使用和重要性。確實,對象-關係模型正在努力地整合關係模型和麪向對象的基本特徵,理解關係模型對理解對象關係概念是必須的,詳情請看第23章。

1.5.2 分層抽象

在數據庫管理系統中,通過三個抽象層來描述數據。數據庫描述是由在每個抽象層上的一個schema組成的。這3個抽象層依次是概念層、物理層、外部層。

使用數據定義語言DDL來定義外部schema和概念schema。我們將在第3章中討論SQL的DDL。雖然所有數據庫管理系統都支持命令來描述物理schema,但是這些命令不是SQL語言標準的一部分。有關概念schema、外部schema、物理schema的信息被保存在系統目錄中,詳情請看12.1節。本節剩餘部分討論3個抽象層。

概念schema

概念schema是用數據庫管理系統的數據模型術語來描述被存儲的數據。

在關係數據庫系統中,概念schema描述了在數據庫中存儲的所有關係。在我們簡單的大學示例中,這些關係包括了有關實體的信息,比如學生和教師等實體,以及實體之間的關係,比如學生註冊課程等關係。如前面所示,使用Student關係中的記錄來描述所有學生的實體。實際上,每個由實體組成的集合以及每個由關係組成的集合都可用一個關係來描述,得到了如下所示的概念schema:

選擇關係及其字段並不是那麼的顯然,獲取一個良好的概念schema的過程就是概念數據庫設計,詳情請看第2、19章。

物理schema

物理schema描述了額外的存儲細節。從本質上看,物理schema總結了在概念schema中描述的數據是如何被保存在諸如硬盤等二級存儲設備中的。

我們必須決定使用什麼樣的文件組織來存儲關係。爲了加速數據檢索操作,我們必須創建索引這類額外的數據結構。

大學數據庫的物理schema示例如下所示:

  • 在無序的記錄文件中存儲所有的關係。注意,在數據庫管理系統中的文件要麼是由記錄組成的集合,要麼是有頁組成的集合,不是像在操作系統中由字符組成的字符串的那樣。
  • 在Students、Faculty、Courses等關係的第一列、Faculty的sal列、Rooms上的capacity列上創建索引。

基於對如何訪問數據的理解,做出有關物理schema的決定。達到一個良好的物理schema的過程就是物理數據庫設計,詳情請看第20章。

外部schema

外部schema也是用數據庫管理系統的數據模型來描述的,允許數據被獨立的用戶或者用戶羣自定義訪問。

任何一個給定的數據庫有且只有一個概念schema和一個物理schema,因爲雖然它僅有一個存儲的關係集,但是它可能有多個爲特定用戶羣組自定義的外部schema。

每個外部schema是由一個或者多個視圖及來自概念schema的關係組成的集合。

從概念上講,一個視圖就是一個關係,但是在數據庫管理系統中不存儲它的記錄。視圖的記錄是使用視圖的定義、通過存儲在DBMS中的關係計算出來的。詳情請看第3章、第25章。

終端用戶的需求指導着外部shema的設計。比如,假設要找出所有教課的教師姓名以及課程註冊人數。可定義如下視圖:

Courseinfo(rid:string, fname:string, enrollment:integer)

用戶把視圖看做是關係,對視圖中的記錄提出問題。視圖中的記錄不是被顯式地被存儲,是被按需計算出來的。因爲能根據來自概念schema的關係中計算出Courseinfo,且額外存儲Courseinfo是多餘的,所以概念schema中不包括Courseinfo。這樣的冗餘不僅浪費空間,而且會導致不一致。比如,有可能出現:向Enrolled關係中插入一條記錄表明某個學生註冊了某門課,但是沒有增加Courseinfo中的enrollment字段的值。

1.5.3 數據獨立性

使用DBMS的一個非常重要的優點是它提供了數據獨立性,即應用程序不受數據結構和存儲方式變化的影響

通過使用3層數據抽象可以實現數據獨立性,尤其是概念shecma和外部schema爲數據獨立性提供了明顯的好處。

從原理上看,在外部shema(視圖關係)中的關係是按需從概念schema的關係中生成。如果底層的數據被重新組織了,即概念schema發生了變化,則可以修改視圖關係的定義來使得:可以向之前一樣來計算同樣的視圖關係。

比如,在我們的大學數據庫中的Faculty關係被如下兩個關係取代:

Faculty_public(fid:string, fname:string, office:integer)
Faculty_private(fid:string, sal:real)

從直覺上看,有關教師的一些保密信息被放到了一張單獨的表裏,並增加了有關office的信息。Courseinfo視圖關係可以用Faculty_public和Faculty_private來重新定義,以便一個查詢Courseinfo的用戶可跟之前一樣得到相同的答案。

因此,用戶是被屏蔽了數據的邏輯結構的改變,或者選擇存儲哪些關係的改變。這種性質就是邏輯數據獨立性

接着,概念schema向用戶屏蔽了物理存儲細節的改變,比如數據在硬盤上如何放置、文件結構、索引的選擇等細節,這種性質就是物理數據獨立性。只要概念schema保持一樣,則我們就可以改變存儲細節而不用改變應用。

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