邏輯數據模型之層次數據模型、網狀數據模型和關系數據模型(轉)


  上一篇文章簡單介紹了概念數據模型、邏輯數據模型、物理數據模型的基本概念、特性以及三者所對應的數據庫的開發階段。現在針對邏輯數據模型中所用到的三種數據模型---層次數據模型、網狀數據模型以及關系數據模型做一個相信的介紹與對比分析。

  一、層次數據模型

  定義:層次數據模型是用樹狀<層次>結構來表示實體類型和實體間聯系的數據模型。(來自百度百科)

  其實層次數據模型就是的圖形表示就是一個倒立生長的樹,由基本數據結構中的樹(或者二叉樹)的定義可知,每棵樹都有且僅有一個根節點,其余的節點都是非根節點。每個節點表示一個記錄類型對應與實體的概念,記錄類型的各個字段對應實體的各個屬性。各個記錄類型及其字段都必須記錄。

  特征:樹的性質決定了樹狀數據模型的特征

     1. 整個模型中有且僅有一個節點沒有父節點,其余的節點必須有且僅有一個父節點,但是所有的節點都可以不存在子節點;

     2. 所有的子節點不能脫離父節點而單獨存在,也就是說如果要刪除父節點,那么父節點下面的所有子節點都要同時刪除,但是可以單獨刪除一些葉子節點;

     3. 每個記錄類型有且僅有一條從父節點通向自身的路徑;

  實例

     如圖1,以學校某個系的組織結構為例,說明層次數據模型的結構。

     1.  記錄類型系是根節點,其屬性為系編號和系名;

     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等。

轉載自:https://blog.csdn.net/GDJ0001/article/details/80137412


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM