數(shù)據(jù)庫系統(tǒng)1-2:網(wǎng)絡(luò)模型

字號:

層次模型和網(wǎng)絡(luò)模型,從邏輯上看都是用結(jié)點(diǎn)表示實(shí)體集,用連線表示實(shí)體之間的聯(lián)系;從物理上看,它們都是用指針來實(shí)現(xiàn)兩個記錄集合(文件)之間的聯(lián)系。網(wǎng)絡(luò)模型中一個結(jié)點(diǎn)可以有多于一個的父結(jié)點(diǎn),允許一個以上的結(jié)點(diǎn)沒有父結(jié)點(diǎn)。網(wǎng)絡(luò)模型是層次模型一般形式,而層次是網(wǎng)絡(luò)的特殊形式。
    網(wǎng)絡(luò)模型典型代表是DBTG(Data Base Task Group)數(shù)據(jù)模型。數(shù)據(jù)庫任務(wù)小組DBTG是美國CODASY(Conference of Data System Language)組織的下屬機(jī)構(gòu),它于1971年提出DBTG報告。DBTG報告是一個網(wǎng)絡(luò)模型的數(shù)據(jù)描述語言和數(shù)據(jù)操縱語言的規(guī)范文本。凡是遵循DBTG報告開發(fā)的網(wǎng)絡(luò)模型的數(shù)據(jù)庫管理系統(tǒng)統(tǒng)稱為DBTG系統(tǒng),以下將介紹DBTG數(shù)據(jù)模型。
    1.2.4.1網(wǎng)絡(luò)模型的結(jié)構(gòu)
    DBTG數(shù)據(jù)模型兩個基本的成分是記錄類型和系類型。以它們?yōu)榛A(chǔ),按照一定的規(guī)則可以構(gòu)造出描述現(xiàn)實(shí)世界中實(shí)體及其聯(lián)系的數(shù)據(jù)模型。
    (1) 記錄類型 
    記錄類型由可命名的數(shù)據(jù)單位組成。數(shù)據(jù)單位除了數(shù)據(jù)項外,還可以是向量(具有相同特征的一維數(shù)據(jù)項的集合)、組項(多個數(shù)據(jù)項的命名序列)和重復(fù)組(一個記錄值中多次出現(xiàn)的數(shù)據(jù)集合,而這些數(shù)據(jù)可以是數(shù)據(jù)項、向量、組項和重復(fù)組)
    其中成績是組項,平時成績、考試成績是向量,也是組項。DBTG的記錄類型可以表示復(fù)雜的實(shí)體。
    (2) 系類型
    系類型是由記錄類型組成的二級樹,其中父結(jié)點(diǎn)稱為系主,子結(jié)點(diǎn)成為成員,父子結(jié)點(diǎn)之間是一對多的關(guān)系?!∠殿愋兔枋隽擞涗涱愋椭g的聯(lián)系。
    (3) 系的構(gòu)成規(guī)則
    系的構(gòu)成規(guī)則主要是:
    ① 一個記錄類型可以出現(xiàn)在多個系類中,即它可以作為多個系的系主,也可作為多個系的成員,還可以既是一些系的系主同時又是另一些系的成員。
    ② 任意兩個記錄類型之間可以定義多個系類型,即具有表示兩個實(shí)體集之間可能存在的多種聯(lián)系的能力。
    ③ 允許奇異系(singular set)的存在,即允許單一記錄類型作為成員類型存在,而系主是虛構(gòu)的,這個系主就是系統(tǒng)。因此一個數(shù)據(jù)庫只允許一個奇異系。
    (4) 系值
    一個系類可以有多個系值,一個系值由一個系主記錄值和其屬下的多個(包括零個)成員記錄值組成。一個成員記錄值可以出現(xiàn)在多個不同系類的多個系值中,如圖1.23所示。
    (5) 多對多聯(lián)系的處理
    由以上可知,DBTG數(shù)據(jù)模型不能直接處理實(shí)體集之間多對多的關(guān)系。對于多對多的關(guān)系,引入連接記錄型,轉(zhuǎn)換成兩個一對多的關(guān)系,如圖1.24所示。從圖中可以看出,學(xué)生和課程這兩個實(shí)體集合之間是“M—M”的聯(lián)系,由于引入了“選課”這個連接記錄型,則轉(zhuǎn)換為兩個“1—M”的聯(lián)系。系1的系主是Student,成員是S-C。系2的系主是Course,成員是S-C。
    學(xué)生及課程都是系主,而選課這個結(jié)點(diǎn)有兩個父結(jié)點(diǎn)。
    1.2.4.2 網(wǎng)絡(luò)模型的數(shù)據(jù)操作
    網(wǎng)絡(luò)模型的數(shù)據(jù)操作和其采取的存取措施和策略緊密相關(guān)。
    (1) 通過數(shù)據(jù)庫碼定位記錄的操作
    數(shù)據(jù)庫碼DBK(Data Base Key)是由系統(tǒng)給每一個記錄值指定的標(biāo)識符,和記錄值本身無關(guān)。記錄的DBK由DBMS在記錄第存儲時指定,是該記錄的永久標(biāo)識,也就是記錄的邏輯地址,因此,可以通過數(shù)據(jù)庫碼直接訪問一條記錄。
    (2) 通過系的導(dǎo)航定位記錄的操作
    DBTG的數(shù)據(jù)描述語言不僅定義系的組成,還規(guī)定了系值選擇方式(選擇記錄型下某個系值)、系序(成員記錄值在系值中的邏輯排列次序)、記錄的定位方式(記錄值存入時或查找時如何確定其物理位置的方法)等,因此訪問可以通過系主找成員,也可以由同一個系值的成員找到其它成員。
    (3) 通過當(dāng)前值定位記錄的操作
    當(dāng)前值表示當(dāng)前正在運(yùn)行的應(yīng)用程序(運(yùn)行單位)操作數(shù)據(jù)庫的近情況,由DBMS建立并維護(hù)的一個“當(dāng)前狀態(tài)表”,指出各種當(dāng)前值,例如,系的當(dāng)前值、記錄的當(dāng)前值等。這些當(dāng)前值就是系類中或記錄類中近被存取的記錄的DBK,使得每次定位操作不必從頭開始。
    因此,DBTG系統(tǒng)數(shù)據(jù)操作不僅要指明操作的對象,還要規(guī)定存取路徑,具體操作較煩瑣,不詳細(xì)列舉。
    1.2.4.3 網(wǎng)絡(luò)模型的物理存儲
    網(wǎng)絡(luò)模型的物理存儲體現(xiàn)為系的物理存儲,其實(shí)現(xiàn)方式有兩種方法:鏈接法(CHAIN)和指針陣列法(POINTER ARRAY)
    1.2.4.4 網(wǎng)絡(luò)模型約束
    網(wǎng)絡(luò)模型約束主要表現(xiàn)為系型約束和系值約束。
    (1) 系型約束
    一個記錄型不能同時作為同一個系型的首記錄和成員記錄,即不能直接表示同一個實(shí)體集內(nèi)部實(shí)體之間的聯(lián)系。解決的方法是引入連接記錄,用作自身聯(lián)系的中間記錄。例如,在零件(PART)實(shí)體內(nèi)部存在多對多的聯(lián)系:一種零件可由多種零件構(gòu)成,而一種零件也可以作為多種零件的配件??梢砸胍粋€配件(L-P)記錄型,以零件作系主,配件作成員,構(gòu)造兩個系。第一個系表示一個零件需要哪些零件作配件,第二個系表示一個零件可以作哪些零件的配件。其中,實(shí)線表示系1的一個系值,虛線表示系2的一個系值。在具體實(shí)現(xiàn)時,連接記錄L-P可以存放一些其它信息,如一個零件所需要的另一種零件(配件)的個數(shù),也可以沒有其它信息而僅存放指針。
    (2) 系值約束
    一個記錄值不能出現(xiàn)在同一系型的不同系值中。例如,班級和學(xué)生組成的系中,班級是系主,學(xué)生是成員。某學(xué)生屬于計算機(jī)2002-1班,就不能又屬于計算機(jī)2002-2班。
    此外還有系的成員籍(成員記錄值進(jìn)入和移出系值的規(guī)則)的約束,不再詳細(xì)列舉。
    網(wǎng)絡(luò)模型使用了大量的數(shù)據(jù)指針,一般情況下,數(shù)據(jù)指針?biāo)紦?jù)的存儲空間為數(shù)據(jù)庫存儲容量的1/3,極端情況下占據(jù)1/2。因此,網(wǎng)絡(luò)模型的數(shù)據(jù)庫的數(shù)據(jù)獨(dú)立性差,數(shù)據(jù)操作復(fù)雜,其大的優(yōu)點(diǎn)是存取效率高。