層次數據庫
- 層次模型的概念:層次模型是數據處理中發展較早、技木上也比較成熟的一種數據模型。
- 層次數據庫系統采用層次模型作為數據的組織方式。
- 層次數據庫系統的典型代表是IBM公司的IMSDBMS,這是1968年IBM公司推出的第一個大型的商用DBMS,曾經得到廣泛的使用。
- 層次模型的數據結構:層次模型用樹形結構來表示各類實體以及實體間的聯系。現實世界中許多實體之間的聯系本來就呈現出一種很自然的層次關系,如行政機構、家族關系等。其特點是將數據組織成有向有序的樹結構層,由處於不同層次的各個結點組成。在數據庫中定義滿足下面兩個條件的基本層次聯系的集合為層次模型:
- 有且只有一個結點沒有雙親結點,這個結點稱為根結點。
- 除根結點外,其余各結點有且僅有一個上一層結點作為其“雙親”,而位於其下的較低一層的若干個結點作為其“子女”。
- 層次模型的特點
在層次模型中,每個結點表示一個記錄類型,用來描述實體集,記錄(類型)之間的聯系用結點之間的連線(有向邊)表示,這種聯系是父子之間的一對多聯系。- 實體型:用記錄類型描述。每個結點表示一個記錄類型。
- 屬性:用字段描述。每個記錄類型可包含若干個字段。
- 聯系:用結點之間的連線表示記錄(類)型之間的 一對多的聯系
- 這使得層次數據庫只能處理一對多的實體聯系,而不能直接處理多對多的實體聯系。
- 層次模型的數據表示方法
層次模型中實體集之間多對多的聯系的處理,解決的方法是引入冗余結點。
例如,學生和課程之間的多對多的聯系,引入學生和課程的冗余結點(如圖3-23中虛線所畫),轉換為兩棵樹:一棵樹的根是學生,子結點是課程,它表現了一個學生可以選多門課程;另一棵樹的根是課程,子結點是學生,它反映了一門課程可以被多個學生選。
-
層次模型的數據操作
層次模型的數據操作最大特點是必須從根結點入手,按層次順序訪問。- 記錄類型碼:對層次模型中的記錄型樹,按照從上到下,從左到右的順序給每個記錄類一個編號,稱為記錄類型碼,以表示記錄類在樹中的位置。
- 順序域:為了確定同一記錄類下的各個記錄值的位置,指定記錄中某字段的值作為記錄值的排序的依據,該字段稱為順序域。
- 層次順序和路徑:有了記錄類型碼和順序域,就可以對所有的記錄值進行排序,首先按類型碼排序,同一類型碼下的各個記錄值再按順序域排序。這種從上到下、從左到右的排列順序就是層次順序。從根結點開始到目標結點之間所有直系祖先的類型碼和順序域組成該結點的層次路徑。
-
層次模型的完整性約束條件
- 在進行插入記錄值操作時,如果沒有指明相應的雙親記錄值,則不能插入子女記錄值。
- 進行刪除記錄操作時,如果刪除雙親記錄值,則相應的子女結點值也同時被刪除。
- 進行修改記錄操作時,應修改所有相應記錄,以保證數據的一致性。
-
層次模型反映了現實世界中實體間的層次關系,層次結構是眾多空間對象的自然表達形式,並在一定程度上支持數據的重構。但其應用時存在以下問題:
- 由於層次結構的嚴格限制,對任何對象的查詢必須始於其所在層次結構的根,使得低層次對象的處理效率較低,並難以進行反向查詢。數據的更新涉及許多指針,插入和刪除操作也比較復雜。父結點的刪除意味着其所有子結點均被刪除,必須慎用刪除操作。
- 層次命令具有過程式性質,它要求用戶了解數據的物理結構,並在數據操縱命令中顯式地給出存取路徑。
- 不能直接表示多對多的聯系,而模擬多對多聯系時導致物理存貯上的冗余。
- 數據獨立性較差。
網狀模型的概念
-
現實世界中,許多事物之間的聯系是非層次結構的,它們需要使用網狀模型來表示。網狀數據庫系統是采用網狀模型作為數據組織方式的數據庫系統。
-
網狀數據庫系統的典型代表是DBTG系統,也稱CODASYL系統。它是20世紀70年代數據系統語言研究會CODASYL下屬的數據庫任務組DBTG提出的一個系統方案。DBTG雖然不是實際的數據庫軟件系統,但是它提出的基本概念、方法和技術,對於網狀數據庫系統的研制和發展起了重大的影響,后來不少的數據庫系統都采用了DBTG模型。例如,HP公司的IMAGE、Univac公司的DBS1100、Honeywell公司的IDS/2、Cullinet Software公司的IDMS等。
-
網狀模型的數據結構
一般將滿足以下兩個條件的基本層次聯系的集合稱為網狀模型:
- 有一個以上的結點沒有雙親。
- 結點可以有多於一個的雙親。
-
網狀模型的特點
網狀模型的特點主要包括以下方面:
- 網狀模型只能處理一對多的實體聯系。
- 每個記錄類型定義一個排序自動,也稱為碼字段。
- 任何記錄值只有按其路徑查看時,才能顯示它的全部意義。
-
網狀模型的數據表示方法
同層次模型一樣,網狀模型也使用記錄和記錄值表示實體集和實體。
- 每個結點也表示一個記錄,每個記錄可包含若干個字段。
- 網狀模型中的聯系用結點間的有向線段表示。
- 每個有向線段表示一個記錄間的一對多聯系。
- 網狀模型中的聯系簡稱為系。 由於網狀模型中的系比較復雜,兩個記錄之間可以存在多種系,一個記錄允許有多個雙親記錄,所以網狀模型中的系必須命名,用系名標識不同的系。
-
網狀模型的數據操作
網狀模型的數據操作主要包括查詢、插入、刪除和更新。
- 進行插入操作時,允許插入尚未確定雙親結點值的子結點值。
- 進行刪除操作時,只允許刪除雙親結點值。
- 進行更新操作時只需更新指定記錄即可。
-
網狀模型的完整性約束條件
網狀數據模型記錄間的聯系比較復雜,一般來說,它沒有層次模型那樣嚴格的完整性約束條件,但具體的網狀數據庫系統對數據操縱都加了一些限制,提供了一定的完整性約束。
-
如DBTG在數據定義語言中,提供了定義DBTG數據庫完整性的若干個概念和語句,它們是:
- 支持記錄碼的概念,碼即唯一標識記錄之間的一對多聯系。
- 保證一個聯系中雙親記錄和子女記錄之間的一對多的聯系。
- 可以支持雙親記錄和子女記錄之間的某些約束條件。