上一篇文章簡單介紹了概念數據模型、邏輯數據模型、物理數據模型的基本概念、特性以及三者所對應的數據庫的開發階段。如今針對邏輯數據模型中所用到的三種數據模型---層次數據模型、網狀數據模型以及關係數據模型作一個相信的介紹與對比分析。數據庫
定義:層次數據模型是用樹狀<層次>結構來表示實體類型和實體間聯繫的數據模型。(來自百度百科)數據結構
其實層次數據模型就是的圖形表示就是一個倒立生長的樹,由基本數據結構中的樹(或者二叉樹)的定義可知,每棵樹都有且僅有一個根節點,其他的節點都是非根節點。每一個節點表示一個記錄類型對應與實體的概念,記錄類型的各個字段對應實體的各個屬性。各個記錄類型及其字段都必須記錄。框架
特徵:樹的性質決定了樹狀數據模型的特徵優化
1. 整個模型中有且僅有一個節點沒有父節點,其他的節點必須有且僅有一個父節點,可是全部的節點均可以不存在子節點;.net
2. 全部的子節點不能脫離父節點而單獨存在,也就是說若是要刪除父節點,那麼父節點下面的全部子節點都要同時刪除,可是能夠單獨刪除一些葉子節點;指針
3. 每一個記錄類型有且僅有一條從父節點通向自身的路徑;對象
實例:blog
如圖1,以學校某個系的組織結構爲例,說明層次數據模型的結構。開發
1. 記錄類型系是根節點,其屬性爲系編號和系名;get
2. 記錄類型教研室和學生分別構成了記錄類型系的子節點,教研室的屬性有教研室編號和教研室姓名,學生的屬性分別是學號、姓名和成績;
3. 記錄類型教師是教研室這一實體的子節點,其屬性由教師的編號,教師的姓名,教師的研究方向。
優勢:
1. 層次數據模型的結構簡單、清晰、明朗,很容易看到各個實體之間的聯繫;
2. 操做層次數據類型的數據庫語句比較簡單,只須要幾條語句就能夠完成數據庫的操做;(百度百科)
3. 查詢效率較高,在層次數據模型中,節點的有向邊表示了節點之間的聯繫,在DBMS中若是有向邊藉助指針實現,那麼依據路徑很容易找到待查的記錄;
4. 層次數據模型提供了較好的數據完整性支持,正如上所說,若是要刪除父節點,那麼其下的全部子節點都要同時刪除;如圖1,若是想要刪除教研室,則其下的全部教師都要刪除;
缺點:
1. 層次數據模型只能表示實體之間的1:n的關係,不能表示m:n的複雜關係,所以現實世界中的不少模型不能經過該模型方便的表示;
2. 查詢節點的時候必須知道其雙親節點的,所以限制了對數據庫存取路徑的控制;
圖 1. 院系人員組成結構圖
定義:用有向圖表示實體和實體之間的聯繫的數據結構模型稱爲網狀數據模型。
其實,網狀數據模型能夠看作是放鬆層次數據模型的約束性的一種擴展。網狀數據模型中全部的節點容許脫離父節點而存在,也就是說說在整個模型中容許存在兩個或多個沒有根節點的節點,同時也容許一個節點存在一個或者多個的父節點,成爲一種網狀的有向圖。所以節點之間的對應關係再也不是1:n,而是一種m:n的關係,從而克服了層次狀數據模型的缺點。
特徵:
1. 能夠存在兩個或者多個節點沒有父節點;
2. 容許單個節點存在多於一個父節點;
網狀數據模型中的,每一個節點表示一個實體,節點之間的有向線段表示實體之間的聯繫。網狀數據模型中須要爲每一個聯繫指定對應的名稱。
實例:
一樣是以教務管理系統爲例,下面說明了院系的組成中,教師、學生、課程之間的關係。
圖 2. 院系的教務管理系統
由上圖中能夠看出課程(實體)的父節點由專業、教研室、學生。以課程和學生之間的關係來講,他們是一種m:n的關係,也就是說一個學生可以選修多門課程,一門課程也能夠被多個學生同時選修。
優勢:
1. 網狀數據模型能夠很方便的表示現實世界中的不少複雜的關係;
2. 修改網狀數據模型時,沒有層次狀數據模型的那麼多的嚴格限制,能夠刪除一個節點的父節點而依舊保留該節點;也容許插入一個沒有任何父節點的節點,這樣的插入在層次狀數據模型中是不被容許的,除非是首先插入的是根節點;
3. 實體之間的關係在底層中能夠藉由指針指針實現,所以在這種數據庫中的執行操做的效率較高;
缺點:
1. 網狀數據模型的結構複雜,使用不易;
2. 網狀數據模型數據之間的彼此關聯比較大,該模型其實一種導航式的數據模型結構,不只要說明要對數據作些什麼,還說明操做的記錄的路徑;
關係型數據模型對應的數據庫天然就是關係型數據庫了,這是是目前筆者最熟悉的數據庫。
定義:使用表格表示實體和實體之間關係的數據模型稱之爲關係數據模型。
關係型數據庫是目前最流行的數據庫,同時也是被廣泛使用的數據庫,如MySQL就是一種流行的數據庫。支持關係數據模型的數據庫管理系統稱爲關係型數據庫管理系統。
特徵:
1. 關係數據模型中,不管是是實體、仍是實體之間的聯繫都是被映射成統一的關係---一張二維表,在關係模型中,操做的對象和結果都是一張二維表;
2. 關係型數據庫可用於表示實體之間的多對多的關係,只是此時要藉助第三個關係---表,來實現多對多的關係,以下例子中的學生選課系統中學生和課程之間表現出一種多對多的關係,那麼須要藉助第三個表,也就是選課表將兩者聯繫起來;
3. 關係必須是規範化的關係,即每一個屬性是不可分割的實體,不容許表中表的存在;
實例:
下面以學生選課系統爲例進行說明。學生選課系統的實體包括:學生、教師、課程;其聯繫通常爲學生與課程之間是一種多對多的關係,教師與課程之間是多對多的關係。學生能夠同時選擇多門課程,一門課程也能夠同時被多個學生同時選擇;一位教師能夠教授多門課程,一門可能能夠由多個教師教授。所以他們之間的聯繫以下:
圖 3 學生選課系統示意圖
將該圖映射爲關係數據模型中的表格爲圖4。從中能夠看到學生與課程之間的聯繫以及教師和課程之間的多對多聯繫都被映射成了表格。其中選課表中的sut_id和cour_id分別是引用學生表和課程表的cour_id的外鍵;教課表也是如此。
圖 4 關係數據模型的表格
優勢:
1. 結構簡單,關係數據模型是一些表格的框架,實體的屬性是表格中列的條目,實體之間的關係也是經過表格的公共屬性表示,結構簡單明瞭;
2. 關係數據模型中的存取路徑對用戶而言是徹底隱蔽的,是程序和數據具備高度的獨立性,其數據語言的非過程化程度較高;
3. 操做方便,在關係數據模型中操做的基本對象是集合而不是某一個元祖;
4. 有堅實的數學理論作基礎,包括邏輯計算、數學計算等;
缺點:
1. 查詢效率低,關係數據模型提供了較高的數據獨立性和非過程化的查詢功能(查詢的時候只需指明數據存在的表和須要的數據所在的列,不用指明具體的查找路徑),所以加大了系統的負擔;
2. 因爲查詢效率較低,所以須要數據庫管理系統對查詢進行優化,加大了DBMS的負擔;
關係數據模型的三種約束完整性:
關係數據模型定義了三種約束完整性:實體完整性、參照完整性以及用戶定義完整性。
實體完整性:實體完整性是指實體的主屬性不能取空值。實體完整性規則規定實體的全部主屬性都不能爲空。實體完整性針對基本關係而言的,一個基本關係對應着現實世界中的一個主題,例如上例中的學生表對應着學生這個實體。現實世界中的實體是能夠區分的,他們具備某種惟一性標誌,這種標誌在關係模型中稱之爲主碼,主碼的屬性也就是主屬性不能爲空。
參照完整性:在關係數據庫中主要是值得外鍵參照的完整性。若A關係中的某個或者某些屬性參照B或其餘幾個關係中的屬性,那麼在關係A中該屬性要麼爲空,要麼必須出現B或者其餘的關係的對應屬性中。如上表中的選課關係的stu_id和cour_id分別是參考學生和課程的外鍵,那麼對於現實的系統而言,stu_id和cour_id必須分別出如今學生和課程關係中,這就是外鍵參考的完整性,同時刪除的時候根據設置的不一樣有不一樣的處理方式。
用戶定義完整性:用戶定義完整性是針對某一個具體關係的約束條件。它反映的某一個具體應用所對應的數據必須知足必定的約束條件。例如,某些屬性必須取惟一值,某些值的範圍爲0-100等。