(二)數(shù)據(jù)模型
1.?dāng)?shù)據(jù)模型的基本概念
數(shù)據(jù)是現(xiàn)實世界符號的抽象,而數(shù)據(jù)模型是數(shù)據(jù)特征的抽象,它從抽象層次上描述了系統(tǒng)的靜態(tài)特征、動態(tài)行為和約束條件,為數(shù)據(jù)庫系統(tǒng)的信息表示與操作提供了一個抽象的框架。
數(shù)據(jù)模型描述的三個部分:數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作與數(shù)據(jù)約束。
(1)數(shù)據(jù)結(jié)構(gòu)
描述數(shù)據(jù)的類型、內(nèi)容、性質(zhì)及數(shù)據(jù)間的聯(lián)系等。
(2)數(shù)據(jù)操作
主要描述在相應(yīng)的數(shù)據(jù)結(jié)構(gòu)上的操作類型與操作方式。
(3)數(shù)據(jù)約束
主要描述數(shù)據(jù)結(jié)構(gòu)內(nèi)數(shù)據(jù)間的語法、語義聯(lián)系,它們之間的制約與依存關(guān)系,以及數(shù)據(jù)動態(tài)變化的規(guī)則,以保證數(shù)據(jù)的正確、有效與相容。
邏輯數(shù)據(jù)模型又稱數(shù)據(jù)模型,較為成熟的有:層次模型、網(wǎng)狀模型和關(guān)系模型。
物理數(shù)據(jù)模型又稱物理模型,是面向計算機(jī)物理表示的模型。
2.E-R模型
1)E-R模型的基本概念
E-R模型(Entity—Relationship model),即實體聯(lián)系模型。
(1)實體
在現(xiàn)實生活中客觀存在且又能相互區(qū)別的事物,稱為實體。
具有共性的實體可組成一個集合稱為實體集。
(2)屬性
屬性是用來描述實體的特征。一個實體有許多個屬性。
每個屬性都可以有值,一個屬性的取值范圍稱為該屬性的值域或值集。
(3)聯(lián)系
反映事物之間的關(guān)聯(lián)稱為聯(lián)系。
實體集之間的聯(lián)系有多種,就實體集個數(shù)而言,有:
兩個實體集間的聯(lián)系
多個實體集之間的聯(lián)系
一個實體集內(nèi)部的聯(lián)系
兩個實體集間的聯(lián)系即實體集間的函數(shù)關(guān)系,有如下幾種關(guān)系:
一對一的聯(lián)系
一對多的聯(lián)系
多對多的聯(lián)系
2)E-R模型三個基本概念之間的聯(lián)系關(guān)系
(1)實體集與屬性之間的聯(lián)接關(guān)系
實體是概念世界中的基本單位,屬性附屬于實體,它本身并不構(gòu)成獨(dú)立性單位。
一個實體可以有若干個屬性,實體與它所有屬性構(gòu)成了實體的一個完整描述。實體與屬性間有一定的聯(lián)系。
實體有型與值的區(qū)分,一個實體的所有屬性的集合,稱為實體型,而實體中屬性值的集合,即構(gòu)成該實體的值。
(2)實體與聯(lián)系
實體集之間通過聯(lián)系建立聯(lián)接關(guān)系。
3)E-R模型的圖示法
用矩形表示實體集,在矩形內(nèi)部標(biāo)出實體集的名稱
用橢圓形表示屬性,在橢圓上標(biāo)出屬性的名稱
用菱形表示聯(lián)系,在菱形上標(biāo)出聯(lián)系名
屬性依附于實體,它們之間用無向線段聯(lián)接
屬性也依附于聯(lián)系,它們之間用無向線段聯(lián)接
實體集與聯(lián)系之間的聯(lián)接關(guān)系,通過無向線段表示
3.層次模型
若用圖來表示,層次模型是一棵倒立的樹。在數(shù)據(jù)庫中,滿足以下兩個條件的數(shù)據(jù)模型稱為層次模型:
有且僅有一個結(jié)點(diǎn)無父結(jié)點(diǎn),這個結(jié)點(diǎn)稱為根結(jié)點(diǎn)
其他結(jié)點(diǎn)有且僅有一個父結(jié)點(diǎn)
在層次模型中,結(jié)點(diǎn)層次從根開始定義,根為第一層,根的子結(jié)點(diǎn)為第二層,根為其子結(jié)點(diǎn)的父結(jié)點(diǎn),同一父結(jié)點(diǎn)的子結(jié)點(diǎn)稱為兄弟結(jié)點(diǎn),沒有子結(jié)點(diǎn)的結(jié)點(diǎn)稱為葉結(jié)點(diǎn)。
層次模型表示的是一對多的關(guān)系,即一個父節(jié)點(diǎn)可以對應(yīng)多個子節(jié)點(diǎn)。這種模型的優(yōu)點(diǎn)是簡單、直觀、處理方便、算法規(guī)范;缺點(diǎn)是不能表達(dá)含有多對多關(guān)系的復(fù)雜結(jié)構(gòu)。
R1是根節(jié)點(diǎn),R2、R3是R1的子結(jié)點(diǎn),它們互為兄弟結(jié)點(diǎn);R4、R5為R2的子結(jié)節(jié)點(diǎn),它們也互為兄弟節(jié)點(diǎn);R3、R4、R5是葉子結(jié)點(diǎn)。
其中,每一個節(jié)點(diǎn)都代表一個實體型,各實體型由上而下是1:n的聯(lián)系。
支持層次模型的DBMS稱為層次數(shù)據(jù)庫管理系統(tǒng),在這種數(shù)據(jù)庫系統(tǒng)中建立的數(shù)據(jù)庫是層次數(shù)據(jù)庫。
層次數(shù)據(jù)模型支持的操作主要有:查詢、插入、刪除和更新。
4.網(wǎng)狀模型
若用圖來表示,網(wǎng)狀模型是一個網(wǎng)絡(luò)。在數(shù)據(jù)庫中,滿足以下兩個條件的數(shù)據(jù)模型稱為網(wǎng)狀模型。
允許一個以上的結(jié)點(diǎn)無父結(jié)點(diǎn)
一個結(jié)點(diǎn)可以有一個以上的父結(jié)點(diǎn)
允許兩個結(jié)點(diǎn)間有兩種以上的聯(lián)系,即允許結(jié)點(diǎn)間有復(fù)合鏈,用網(wǎng)絡(luò)表示某種聯(lián)系
由于在網(wǎng)狀模型中子結(jié)點(diǎn)與父結(jié)點(diǎn)的聯(lián)系不是的,所以要為每個聯(lián)系命名,并指出與該聯(lián)系有關(guān)的父結(jié)點(diǎn)和子結(jié)點(diǎn)。
網(wǎng)狀模型的優(yōu)點(diǎn)是可以表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu),存取數(shù)據(jù)的效率比較高;缺點(diǎn)是結(jié)構(gòu)復(fù)雜,每個問題都有其相對的特殊性,實現(xiàn)的算法難以規(guī)范化。
在抽象網(wǎng)狀模型中,R1與R4之間的聯(lián)系被命名為L1,R1與R3之間的聯(lián)系被命名為L2,R2與R3之間的聯(lián)系被命名為L3,R3與R5之間的聯(lián)系被命名為L4,R4與R5之間的聯(lián)系被命名為L5。R1為R3和R4的父結(jié)點(diǎn),R2也是R3的父結(jié)點(diǎn)。R1和R2沒有父結(jié)點(diǎn)。
網(wǎng)狀模型是一個不加任何條件限制的無向圖。它沒有層次模型那樣需要滿足嚴(yán)格的條件,相對比較靈活。
通常的操作方式是將網(wǎng)狀模型分解成若干個二級樹,即只有兩個層次的樹。
在網(wǎng)狀模型標(biāo)準(zhǔn)中,基本結(jié)構(gòu)簡單二級樹叫做系,系的基本數(shù)據(jù)單位是記錄,它相當(dāng)于E-R模型中的實體集;記錄又可由若干數(shù)據(jù)項組成,它相當(dāng)于E-R模型中的屬性。
5.關(guān)系模型
1)關(guān)系的數(shù)據(jù)結(jié)構(gòu)
關(guān)系模型是利用二維表來表示,簡稱表。
表頭即屬性的集合,在表中每一行存放數(shù)據(jù),稱為元組。
二維表要求滿足的條件:
二維表中元組的個數(shù)有限
元組在二維表中的性,在同一個表中不存在完全相同的兩個元組
二維表中元組的順序無關(guān),可以任意調(diào)換
元組中的各分量不能再分解
二維表中各屬性名
二維表中各屬性的順序無關(guān)
二維表屬性的分量具有與該屬性相同的值域
鍵:能夠確定元組的屬性或?qū)傩缘慕M合。例如,在學(xué)生基本情況表中,可以用學(xué)號來標(biāo)識某個學(xué)生,即學(xué)號可以作為該表的鍵。鍵具有標(biāo)識元組、建立元組間聯(lián)系等重要作用。
在二維表中凡是能夠標(biāo)識元組的最小屬性集稱為該表的鍵或碼。二維表中可能有若干個鍵,稱為候選碼或候選健。從二維表的所有候選鍵中選取一個作為用戶使用的鍵稱為主鍵或主碼。
外鍵:如果表中的一個字段不是本表的鍵或候選鍵,而是另外一個表的鍵或候選鍵,則稱該字段為外鍵或外碼。
表中一定有鍵。
在關(guān)系中一般支持空值,空值表示未知的值或不可能出現(xiàn)的值,一般用NULL表示。關(guān)系的主鍵中不允許出現(xiàn)空值,因為如主鍵為空值則失去了其元組標(biāo)識的作用。
關(guān)系模式支持子模式,關(guān)系子模式是關(guān)系數(shù)據(jù)庫模式中用戶所見到的那部分?jǐn)?shù)據(jù)模式描述。
2)關(guān)系操作
關(guān)系模型的數(shù)據(jù)操縱是建立在關(guān)系上的數(shù)據(jù)操縱,一般有查詢、增加、刪除和修改。
(1)數(shù)據(jù)查詢
在一個關(guān)系中查詢數(shù)據(jù),操作方式是先定位,然后再操作。
在多個關(guān)系中查詢數(shù)據(jù),先將多個關(guān)系合并為一個關(guān)系,再在合并后的新關(guān)系中進(jìn)行定位,然后再操作。
(2)數(shù)據(jù)刪除
數(shù)據(jù)刪除操作是在一個關(guān)系中刪除元組的操作。操作方式也是先定位,然后再刪除操作。
(3)數(shù)據(jù)插入
數(shù)據(jù)插入也是僅對一個關(guān)系的操作。即在指定的關(guān)系中插入一個或多個元組。
(4)數(shù)據(jù)修改
數(shù)據(jù)修改是在一個關(guān)系中修改指定的元組與屬性。數(shù)據(jù)修改不是一個基本的操作,可分解為刪除要修改的元組,再插入修改后的元組兩個基本操作。
關(guān)系的基本操作:
關(guān)系的屬性指定
關(guān)系的元組選擇
兩個關(guān)系合并
一個或多個關(guān)系的查詢
關(guān)系中元組的插入
關(guān)系中元組的刪除
3)關(guān)系中的數(shù)據(jù)約束
數(shù)據(jù)約束:實體完整性約束、參照完整性約束和用戶定義的完整性約束。
(1)實體完整性約束
要求關(guān)系的主鍵中屬性值不能為空值,主鍵的惟一決定元組的惟一性。
(2)參照完整性約束
關(guān)系之間相關(guān)聯(lián)的基本約束,不允許關(guān)系引用不存在的元組。
(3)用戶定義的完整性約束
用戶根據(jù)具體的數(shù)據(jù)環(huán)境與應(yīng)用環(huán)境具體設(shè)置約束。關(guān)系數(shù)據(jù)庫系統(tǒng)提供完整性約束語言,用戶利用該語言寫出的約束條件,運(yùn)行時由系統(tǒng)自動檢查。