天天看點

《資料庫原理與應用(第3版)》——2.3 組織層資料模型

本節書摘來自華章出版社《資料庫原理與應用(第3版)》一 書中的第2章,第2.3節,作者:何玉潔,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

組織層資料模型是從資料的組織形式的角度來描述資訊,目前,在資料庫技術的發展過程中用到的組織層資料模型主要有:層次模型(hierarchical model)、網狀模型(network model)、關系模型(relational model)、面向對象模型(object oriented model)和對象關系模型(object relational model)。組織層資料模型是按組織資料的邏輯結構來命名的,比如層次模型采用樹形結構。而且各資料庫管理系統也是按其所采用的組織層資料模型來分類的,比如層次資料庫管理系統就是按層次模型來組織資料,而網狀資料庫管理系統就是按網狀模型來組織資料。

1970年,美國ibm公司研究員e.f.codd首次提出了資料庫系統的關系模型,開創了關系資料庫和關系資料理論的研究,為關系資料庫技術奠定了理論基礎。關系模型從20世紀70~80年代開始到現在已經發展得非常成熟,本書的重點也是介紹關系模型。20世紀80年代以來,計算機廠商推出的資料庫管理系統幾乎都支援關系模型,非關系系統的産品也大都加上了關系接口。

一般将層次模型和網狀模型統稱為非關系模型。非關系模型的資料庫系統在20世紀70年代至80年代初曾非常流行,在資料庫管理系統的産品中占主導地位,但現在已逐漸被采用關系模型的資料庫管理系統所取代。20世紀80年代以來,面向對象的方法和技術在計算機各個領域,包括程式設計語言、軟體工程、資訊系統設計、計算機硬體設計等方面都産生了深遠的影響,也促進了資料庫中面向對象資料模型的研究和發展。

層次資料模型(層次模型)是資料庫管理系統中最早出現的資料模型。層次資料庫管理系統采用層次模型作為資料的組織方式。層次資料庫管理系統的典型代表是ibm公司的ims(information management system),這是ibm公司1968年推出的第一個大型的商用資料庫管理系統。

層次資料模型用樹形結構表示實體和實體之間的聯系。現實世界中許多實體之間的聯系本身就呈現出一種自然的層次關系,如行政機構、家族關系等。

構成層次模型的樹由節點和連線組成,節點表示實體,節點中的項表示實體的屬性,連線表示相連的兩個實體間的聯系,這種聯系是一對多的。通常把表示“一”的實體放在上方,稱為父節點;把表示“多”的實體放在下方,稱為子節點。将不包含任何子節點的節點稱為葉節點,如圖2-4所示。

層次模型可以直接、友善地表示一對多的聯系。但在層次模型中有以下兩點限制:

1)有且僅有一個節點無父節點,這個節點即為樹的根。

2)其他節點有且僅有一個父節點。

層次模型的一個基本特點是,任何一個給定的記錄值隻有從層次模型的根部開始按路徑檢視時,才能明确其含義,任何子節點都不能脫離父節點而存在。

圖2-5說明了一個具有層次結構的學校組織機構資料模型,該模型有4個節點,“學院”是根節點,由學院編号、學院名稱和辦公地點三項組成。“學院”節點下有兩個子節點,分别為“教研室”和“學生”。“教研室”節點由“教研室名”、“室主任”和“室人數”三項組成,“學生”節點由“學号”“姓名”“性别”和“年齡”四項組成。“教研室”節點下又有一個子節點“教師”,是以,“教研室”是“教師”的父節點,“教師”是“教研室”的子節點。“教師”節點由“教師号”“教師名”和“職稱”項組成。

《資料庫原理與應用(第3版)》——2.3 組織層資料模型

圖2-6是圖2-5資料模型對應的一個值。

《資料庫原理與應用(第3版)》——2.3 組織層資料模型

圖2-6 學院層次資料庫的一個值

層次資料模型隻能表示一對多聯系,不能直接表示多對多聯系。但如果把多對多聯系轉換為一對多聯系,又會出現一個子節點有多個父節點的情況(如圖2-7所示,學生和課程原本是一個多對多聯系,在這裡将其轉換為兩個一對多聯系),這顯然不符合層次資料模型的要求。一般常用的解決辦法是把一個層次模型分解為兩個層次模型,如圖2-8所示。

層次資料庫是由若幹個層次模型構成的,或者說它是一個層次模型的集合。

在現實世界中事物之間的聯系更多的是非層次的,用層次資料模型表達現實世界中存在的聯系有很多限制。如果去掉層次模型中的兩點限制,即允許一個以上的節點無父節點,并且每個節點可以有多個父節點,便構成了網狀模型。

用圖形結構表示實體和實體之間的聯系的資料模型稱為網狀資料模型(網狀模型)。在網狀模型中,同樣使用父節點和子節點這樣的術語,并且同樣一般把父節點放置在子節點的上方。圖2-9所示為幾個不同形式的網狀模型形式。

《資料庫原理與應用(第3版)》——2.3 組織層資料模型

從圖2-9可以看出,網狀模型父節點與子節點之間的聯系可以不唯一,是以,就需要為每個聯系命名。如圖2-9a中,節點r3有兩個父節點r1和r2,是以,将r1與r3之間的聯系命名為l1,将r2與r3之間的聯系命名為l2。圖2-9b和c與此類似。

由于網狀模型沒有層次模型的兩點限制,是以可以直接表示多對多聯系。但在網狀模型中多對多的聯系實作起來太複雜,是以一些支援網狀模型的資料庫管理系統對多對多聯系還是進行了限制。例如,網狀模型的典型代表codasyl(conference on data system language)就隻支援一對多聯系。

網狀模型和層次模型在本質上是一樣的。從邏輯上看,它們都是用連線表示實體之間的聯系,用節點表示實體;從實體上看,它們都是用指針來實作檔案以及記錄之間的聯系,其差别僅在于網狀模型中的連線或指針更複雜,更縱橫交錯,進而使資料結構更複雜。

網狀模型的典型代表是codasyl,它是codasyl組織的标準建議的具體實作。層次模型是按層次組織資料,而codasyl是按系(set)組織資料。所謂“系”可以了解為命名了的聯系,它由一個父記錄型和一個或若幹個子記錄型組成。圖2-10為網狀模型的一個示例,其中包含四個系,s-g系由學生和選課記錄構成,c-g系由課程和選課記錄構成,c-c系由課程和授課記錄構成,t-c系由教師和授課記錄構成。實際上,圖2-7所示的具有兩個父節點的結構也屬于網狀模型。

《資料庫原理與應用(第3版)》——2.3 組織層資料模型

關系資料模型是目前最重要的一種資料模型,關系資料庫就是采用關系資料模型作為資料的組織方式。關系資料模型源于數學,它把資料看作二維表中的元素,而這個二維表在關系資料庫中就稱為關系。關于關系的詳細讨論将在第3章進行。

用關系(表格資料)表示實體和實體之間的聯系的模型就稱為關系資料模型。在關系資料模型中,實體本身以及實體和實體之間的聯系都用關系來表示,實體之間的聯系不再通過指針來實作。

表2-1和表2-2所示分别為“學生”和“選課”關系模型的資料結構,其中“學生”和“選課”間的聯系是靠“學号”列實作的。

《資料庫原理與應用(第3版)》——2.3 組織層資料模型

在關系資料庫中,記錄值僅僅構成關系,關系之間的聯系是靠語義相同的字段(稱為連接配接字段)值表達的。了解關系和連接配接字段(即列)的思想在關系資料庫中非常重要。例如,要查詢“劉晨”的考試成績,則首先要在“學生”關系中得到“劉晨”的學号值,然後根據這個學号值再在“選課”關系中找出該學生的所有考試記錄值。

對于使用者來說,關系的操作應該很簡單,但關系資料庫管理系統本身是很複雜的。關系操作之是以對使用者很簡單,是因為它把大量的工作交給了資料庫管理系統來實作。盡管在層次資料庫和網狀資料庫誕生之時,就有了關系資料庫的設想,但研制和開發關系資料庫管理系統卻花費了比人們想象要長得多的時間。關系資料庫管理系統真正成為商品并投入使用要比層次資料庫和網狀資料庫晚十幾年。但關系資料庫管理系統一經投入使用,便顯示出了強大的活力和生命力,并逐漸取代了層次資料庫和網狀資料庫。現在耳熟能詳的資料庫管理系統幾乎都是關系資料庫管理系統,比如microsoft sql server、oracle、ibm db2、access等。

關系資料模型易于設計、實作、維護和使用,它與層次資料模型和網狀資料模型的最根本差別是,關系資料模型不依賴于導航式的資料通路系統,資料結構的變化不會影響對資料的通路。