開啟主選單

求真百科

層次模型,在數據庫中定義滿足:(1)有且只有一個結點沒有雙親結點,這個結點稱為根結點;(2)根以外的其他結點有且只有一個雙親結點兩個條件的記錄以及它們之間聯繫的集合為層次模型 。它的基本邏輯結構可以用一棵倒置的樹表示 。層次數據模型中最基本的數據關係是基本層次關係,它代表兩條記錄之間一對多(包括一對一)的聯繫 。數據庫中有且僅有一條記錄無雙親,稱為根結點,其他記錄有且僅有一個雙親 。層次模型是最早用於商用數據庫管理系統的數據模型

層次模型

現實世界中許多實體之間的聯繫本來就呈現出一種很自然的層次關系,如行政關係家族關係等 。用層次模型對具有一對多的層次聯繫的部門描述非常自然、直觀,容易理解,這是層次數據庫的突出優點 。[1]

目錄

基本信息

中文名稱 層次模型 [2]

外文名稱 Hierarchical Model

邏輯結構 樹形結構

適用範圍 一對多聯繫

存儲結構 鄰接法、鏈接法

應用溯源

層次模型誕生於20世紀60年代,主要用於複雜製造項目的大量數據管理,如1969年阿波羅火箭登錄月球 。層次模型是數據庫系統中最早出現的數據模型,層次數據庫系統採用層次模型作為數據的組織方式 。層次數據庫的典型代表是IBM公司的IMS(Information Management System),這是1968年IBM公司推出的第一個大型商用數據庫管理系統,曾經得到廣泛的使用 。

定義

在數據庫中定義滿足下面兩個條件的記錄以及它們之間聯繫的集合為層次模型:(1)有且只有一個結點沒有雙親結點,這個結點稱為根結點;(2)根以外的其他結點有且只有一個雙親結點 。

相關概念

在層次模型中,每個結點表示一個記錄類型,記錄類型之間的聯繫用結點之間的連線(有向邊)表示,這種聯繫是父子之間的一對多的聯繫。這就使得層次數據庫系統只能處理一對多的實體聯繫 。

每個記錄類型可包含若干個字段,這裡記錄類型描述的是實體,字段描述實體的屬性。每個記錄類型及其字段都必須命名。各個記錄類型、同一記錄類型中各個字段不能同名。每個記錄類型可以定義一個排序字段,也稱碼字段,如果定義該排序字段的值是唯一的,則它能唯一地標識一個記錄值 。

一個層次模型在理論上可以包含任意有限個記錄類型和字段,但任何實際的系統都會因為存儲容量或實現複雜度而限制層次模型中包含的記錄類型個數和字段個數 。

在層次模型中,同一雙親的子女結點稱為兄弟結點,沒有子女結點的結點稱為葉結點 。

特徵

層次模型的一個基本的特點是,任何一個給定的記錄值只能按其層次路徑查看,沒有一個子女記錄值能夠脫離雙親記錄值而獨立存在 。

舉例

下面是一個教員學生層次模型。該層次模型有4個記錄類型 。分別是:

(1)記錄類型"系"是根結點,由系編號、系名、辦公地點3個字段組成。它有兩個子女結點"教研室"和"學生" 。

(2)記錄類型"教研室"是"系"的子結點,同時又是"教員"的雙親結點。它由教研室編號和教研室名兩個字段組成 。

(3)記錄類型"學生"由學號、姓名、成績3個字段組成 。

(4)記錄類型"教員"由職工號、姓名、研究方向3個字段組成 。

"學生"與"教員"是葉結點,他們沒有子女結點。由"系"到"教研室"、"教研室"到"教員"、"系"到"學生"都是一對多的聯繫 。

數據操縱和完整性約束

層次模型的數據操縱主要有查詢、插入、刪除和更新。進行插入、刪除、更新操作時要滿足層次模型的完整性約束條件 。具體如下:

(1)進行插入操作時,如果沒有相應的雙親結點值就不能插入它的子女結點值。例如,在上例的層次數據庫中,如果新調入一名教員,但尚未分配到某個教研室,這時就不能將新教員插入到數據庫中 。

(2)進行刪除操作時,如果刪除雙親結點值,則相應的子女結點值也被同時刪除。例如,在上例的層次數據庫中,如果刪除網絡教研室,則該教研室所有教員的數據將全部丟失 。

(3)進行更新操作時, 應更新所有相應記錄,以保證數據的一致性 。

存儲結構

層次模型數據的存儲常常是和數據之間聯繫的存儲結合在一起的 。常用的實現方法有兩種:

(1)鄰接法

按照層次樹前序遍歷的順序把所有記錄值依次鄰接存放,即通過物理空間的位置相鄰來實現層次順序 。

(2)鏈接法

用指針來反映數據之間的層次聯繫 。

優缺點

優點

層次模型的優點主要有:

(1)層次模型的數據結構比較簡單清晰 。

(2)層次數據庫查詢效率高。因為層次模型中記錄之間的聯繫用有向邊表示,這種聯繫在數據庫管理系統中常常用指針來實現。因此這種聯繫也就是記錄之間的存取路徑。當要存取某個結點的記錄值,數據庫管理系統就沿着這一條路徑很快找到該記錄值,所以層次數據庫的性能優於關係數據庫, 不低於網狀數據庫 。

(3)層次數據模型提供了良好的完整性支持 。

缺點

層次模型的缺點主要有:

(1)現實世界中很多聯繫是非層次性的,如結點之間具有多對多聯繫,不適合用層次模型表示 。

(2)如果一個結點具有多個雙親結點等,用層次模型表示這類聯繫就很笨拙,只能通過引入冗餘數據(易產生不一致性)或創建非自然的數據結構(引入虛擬結點)來解決 。

(3)對數據的插入和刪除操作的限制比較多,因此應用程序的編寫比較複雜 。

(4)查詢子女結點必須通過雙親結點 。

(5)由於結構嚴密,層次命令趨於程序化 。

參考來源