用樹(shù)形結(jié)構(gòu)表示實(shí)體之間聯(lián)系的模型叫層次模型。層次模型是早用于商品數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)模型。其典型代表是于1969問(wèn)世、由IBM公司開(kāi)發(fā)的數(shù)據(jù)庫(kù)管理系統(tǒng)IMS(Information Management System)。
1.2.3.1 層次模型的結(jié)構(gòu)
層次模型的表示方法是:樹(shù)的結(jié)點(diǎn)表示實(shí)體集(記錄的型),結(jié)點(diǎn)之間的連線表示相連兩實(shí)體集之間的關(guān)系,這種關(guān)系只能是“1一M”的。通常把表示1的實(shí)體集放在上方,稱為父結(jié)點(diǎn),表示M的實(shí)體集放在下方,稱為子結(jié)點(diǎn)。層次模型的結(jié)構(gòu)特點(diǎn)是:
(1) 有且僅有一個(gè)根結(jié)點(diǎn)。
(2) 根結(jié)點(diǎn)以外的其它結(jié)點(diǎn)有且僅有一個(gè)父結(jié)點(diǎn)。
因而層次模型只能表示“1一M”關(guān)系,而不能直接表示“M—M”關(guān)系。
在層次模型中,一個(gè)結(jié)點(diǎn)稱為一個(gè)記錄型,用來(lái)描述實(shí)體集。每個(gè)記錄型可以有一個(gè)或多個(gè)記錄值,上層一個(gè)記錄值對(duì)應(yīng)下層一個(gè)或多個(gè)記錄值,而下層每個(gè)記錄值只能對(duì)應(yīng)上層一個(gè)記錄值。例如,系記錄型有:計(jì)算機(jī)系、電信系等記錄值。而計(jì)算機(jī)系的下層記錄值有軟件、結(jié)構(gòu)、應(yīng)用等研究室和數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、數(shù)據(jù)庫(kù)等課程,軟件研究室下層又有員工和項(xiàng)目記錄值,
關(guān)于層次模型中實(shí)體集之間多對(duì)多的聯(lián)系的處理,解決的方法是引入冗余結(jié)點(diǎn)。例如,學(xué)生和課程之間的多對(duì)多的聯(lián)系,引入學(xué)生和課程的冗余結(jié)點(diǎn) 轉(zhuǎn)換為兩棵樹(shù):一棵樹(shù)的根是學(xué)生,子結(jié)點(diǎn)是課程,它表現(xiàn)了一個(gè)學(xué)生可以選多門(mén)課程;一棵樹(shù)的根是課程,子結(jié)點(diǎn)是學(xué)生,它反映了一門(mén)課程可以被多個(gè)學(xué)生選。
1.2.3.2層次模型的數(shù)據(jù)操作
層次模型的數(shù)據(jù)操作大特點(diǎn)是必須從根結(jié)點(diǎn)入手,按層次順序訪問(wèn)。首先介紹層次順序中的兩個(gè)概念。
(1) 記錄類(lèi)型碼 對(duì)層次模型中的記錄型樹(shù),按照從上到下,從左到右的順序給每個(gè)記錄類(lèi)一個(gè)編號(hào),稱為記錄類(lèi)型碼,以表示記錄類(lèi)在樹(shù)中的位置。
(2) 順序域 為了確定同一記錄類(lèi)下的各個(gè)記錄值的位置,指定記錄中某字段的值作為記錄值的排序的依據(jù),該字段稱為順序域。
(3) 層次順序和路徑 有了記錄類(lèi)型碼和順序域,就可以對(duì)所有的記錄值進(jìn)行排序,首先按類(lèi)型碼排序,同一類(lèi)型碼下的各個(gè)記錄值再按順序域排序。這種從上到下、從左到右的排列順序就是層次順序。從根結(jié)點(diǎn)開(kāi)始到目標(biāo)結(jié)點(diǎn)之間所有直系祖先的類(lèi)型碼和順序域組成該結(jié)點(diǎn)的層次路徑。如圖1.19所示,D(Department)、S(Section)、C(Course)、F(Faculty)和P(Project)分別表示系、研究室、課程、員工和項(xiàng)目。D02的層次順序: D02S01F01F02S02F03F04S03F05F06F07023056C01C02C03。
GU DEPT(DEPT#=’D02’)
SECTION(SEC#=’S03’)
FACULTY(FAC#=’F06’)
層次模型中的更新操作之前,一般都先執(zhí)行一個(gè)查詢,再執(zhí)行相應(yīng)操作。所以層次模型數(shù)據(jù)操作的特點(diǎn)是通過(guò)層次路徑定位記錄,僅能訪問(wèn)一條記錄。
1.2.3.4 層次模型的物理存儲(chǔ)
層次模型的物理存儲(chǔ)有兩種實(shí)現(xiàn)方法:
(1) 順序法
按照層次順序把所有的記錄鄰接存放,即通過(guò)物理空間的位置相鄰來(lái)實(shí)現(xiàn)層次順序。
(2) 指針?lè)?BR> 各個(gè)記錄存放時(shí)不是按層次順序,而是用指針按層次順序把它們鏈接起來(lái)。
1.2.3.5 層次模型的約束
層次模型的限制是:
(1) 層次模型的樹(shù)是有序樹(shù)(層次順序)。對(duì)任一結(jié)點(diǎn)的所有子樹(shù)都規(guī)定了先后次序,這一限制隱含了對(duì)數(shù)據(jù)庫(kù)存取路徑的控制。
(2) 樹(shù)中父子結(jié)點(diǎn)之間只存在一種聯(lián)系,因此,對(duì)樹(shù)中的任一結(jié)點(diǎn),只有一條自根結(jié)點(diǎn)到達(dá)它的路徑。
(3) 不能直接表示多對(duì)多的聯(lián)系。
(4) 樹(shù)結(jié)點(diǎn)中任何記錄的屬性只能是不可再分的簡(jiǎn)單數(shù)據(jù)類(lèi)型。
1.2.3.1 層次模型的結(jié)構(gòu)
層次模型的表示方法是:樹(shù)的結(jié)點(diǎn)表示實(shí)體集(記錄的型),結(jié)點(diǎn)之間的連線表示相連兩實(shí)體集之間的關(guān)系,這種關(guān)系只能是“1一M”的。通常把表示1的實(shí)體集放在上方,稱為父結(jié)點(diǎn),表示M的實(shí)體集放在下方,稱為子結(jié)點(diǎn)。層次模型的結(jié)構(gòu)特點(diǎn)是:
(1) 有且僅有一個(gè)根結(jié)點(diǎn)。
(2) 根結(jié)點(diǎn)以外的其它結(jié)點(diǎn)有且僅有一個(gè)父結(jié)點(diǎn)。
因而層次模型只能表示“1一M”關(guān)系,而不能直接表示“M—M”關(guān)系。
在層次模型中,一個(gè)結(jié)點(diǎn)稱為一個(gè)記錄型,用來(lái)描述實(shí)體集。每個(gè)記錄型可以有一個(gè)或多個(gè)記錄值,上層一個(gè)記錄值對(duì)應(yīng)下層一個(gè)或多個(gè)記錄值,而下層每個(gè)記錄值只能對(duì)應(yīng)上層一個(gè)記錄值。例如,系記錄型有:計(jì)算機(jī)系、電信系等記錄值。而計(jì)算機(jī)系的下層記錄值有軟件、結(jié)構(gòu)、應(yīng)用等研究室和數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、數(shù)據(jù)庫(kù)等課程,軟件研究室下層又有員工和項(xiàng)目記錄值,
關(guān)于層次模型中實(shí)體集之間多對(duì)多的聯(lián)系的處理,解決的方法是引入冗余結(jié)點(diǎn)。例如,學(xué)生和課程之間的多對(duì)多的聯(lián)系,引入學(xué)生和課程的冗余結(jié)點(diǎn) 轉(zhuǎn)換為兩棵樹(shù):一棵樹(shù)的根是學(xué)生,子結(jié)點(diǎn)是課程,它表現(xiàn)了一個(gè)學(xué)生可以選多門(mén)課程;一棵樹(shù)的根是課程,子結(jié)點(diǎn)是學(xué)生,它反映了一門(mén)課程可以被多個(gè)學(xué)生選。
1.2.3.2層次模型的數(shù)據(jù)操作
層次模型的數(shù)據(jù)操作大特點(diǎn)是必須從根結(jié)點(diǎn)入手,按層次順序訪問(wèn)。首先介紹層次順序中的兩個(gè)概念。
(1) 記錄類(lèi)型碼 對(duì)層次模型中的記錄型樹(shù),按照從上到下,從左到右的順序給每個(gè)記錄類(lèi)一個(gè)編號(hào),稱為記錄類(lèi)型碼,以表示記錄類(lèi)在樹(shù)中的位置。
(2) 順序域 為了確定同一記錄類(lèi)下的各個(gè)記錄值的位置,指定記錄中某字段的值作為記錄值的排序的依據(jù),該字段稱為順序域。
(3) 層次順序和路徑 有了記錄類(lèi)型碼和順序域,就可以對(duì)所有的記錄值進(jìn)行排序,首先按類(lèi)型碼排序,同一類(lèi)型碼下的各個(gè)記錄值再按順序域排序。這種從上到下、從左到右的排列順序就是層次順序。從根結(jié)點(diǎn)開(kāi)始到目標(biāo)結(jié)點(diǎn)之間所有直系祖先的類(lèi)型碼和順序域組成該結(jié)點(diǎn)的層次路徑。如圖1.19所示,D(Department)、S(Section)、C(Course)、F(Faculty)和P(Project)分別表示系、研究室、課程、員工和項(xiàng)目。D02的層次順序: D02S01F01F02S02F03F04S03F05F06F07023056C01C02C03。
GU DEPT(DEPT#=’D02’)
SECTION(SEC#=’S03’)
FACULTY(FAC#=’F06’)
層次模型中的更新操作之前,一般都先執(zhí)行一個(gè)查詢,再執(zhí)行相應(yīng)操作。所以層次模型數(shù)據(jù)操作的特點(diǎn)是通過(guò)層次路徑定位記錄,僅能訪問(wèn)一條記錄。
1.2.3.4 層次模型的物理存儲(chǔ)
層次模型的物理存儲(chǔ)有兩種實(shí)現(xiàn)方法:
(1) 順序法
按照層次順序把所有的記錄鄰接存放,即通過(guò)物理空間的位置相鄰來(lái)實(shí)現(xiàn)層次順序。
(2) 指針?lè)?BR> 各個(gè)記錄存放時(shí)不是按層次順序,而是用指針按層次順序把它們鏈接起來(lái)。
1.2.3.5 層次模型的約束
層次模型的限制是:
(1) 層次模型的樹(shù)是有序樹(shù)(層次順序)。對(duì)任一結(jié)點(diǎn)的所有子樹(shù)都規(guī)定了先后次序,這一限制隱含了對(duì)數(shù)據(jù)庫(kù)存取路徑的控制。
(2) 樹(shù)中父子結(jié)點(diǎn)之間只存在一種聯(lián)系,因此,對(duì)樹(shù)中的任一結(jié)點(diǎn),只有一條自根結(jié)點(diǎn)到達(dá)它的路徑。
(3) 不能直接表示多對(duì)多的聯(lián)系。
(4) 樹(shù)結(jié)點(diǎn)中任何記錄的屬性只能是不可再分的簡(jiǎn)單數(shù)據(jù)類(lèi)型。