第五章
一、關(guān)系數(shù)據(jù)庫系統(tǒng)概述(一)關(guān)系數(shù)據(jù)庫系統(tǒng)
關(guān)系數(shù)據(jù)庫系統(tǒng)是支持關(guān)系數(shù)據(jù)模型的數(shù)據(jù)庫系統(tǒng)。關(guān)系數(shù)據(jù)庫應(yīng)用數(shù)學(xué)方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。最早提出將這類方法用于數(shù)據(jù)處理的是1962年CODASYL發(fā)表的“信息代數(shù)”一文,之后有1968年David Child在7090機(jī)上實現(xiàn)的集合論數(shù)據(jù)結(jié)構(gòu),但系統(tǒng)而嚴(yán)格地提出關(guān)系模型的是美國IBM公司的E.F.Codd。1970年E.F.Codd連續(xù)發(fā)表了多篇論文,奠定了關(guān)系數(shù)據(jù)庫的理論基礎(chǔ)。
(二)關(guān)系數(shù)據(jù)模型
關(guān)系數(shù)據(jù)模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合和關(guān)系完整性約束3大要素組成。
(1)關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)單一,在關(guān)系模型中,現(xiàn)實世界的實體以及實體間的各種聯(lián)系均用關(guān)系來表示。在用戶看來,關(guān)系模型中數(shù)據(jù)的邏輯結(jié)構(gòu)是一張二維表。
(2)關(guān)系操作集合關(guān)系模型中常用的關(guān)系操作包括:選擇(select)、投影(project)、連接(join)、除(divide)、并(union)、交(intersection)、差(difference)等,以及查詢(query)操作和增(insert)、刪(delete)、改(update)操作兩大部分。查詢的表達(dá)能力是其中最主要的部分。關(guān)系操作的特點(diǎn)是集合操作方式,即操作的對象和結(jié)果都是集合。這種操作方式也稱為一次一個集合(set-at-a-time)的方式。相應(yīng)地,非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操作方式則為一次一個記錄(record-at-a-time)的方式。關(guān)系模型給出了關(guān)系操作的能力和特點(diǎn),關(guān)系操作通過關(guān)系語言實現(xiàn)。關(guān)系語言的特點(diǎn)(它的優(yōu)點(diǎn))是高度非過程化,所謂非過程化是指:①用戶不必請求DBA為他建立特殊的存取路徑,存取路徑的選擇由DBMS的優(yōu)化機(jī)制來完成。②用戶也不必求助于循環(huán),遞歸來完成數(shù)據(jù)的重復(fù)操作。
(3)關(guān)系的完整性約束數(shù)據(jù)庫的數(shù)據(jù)完整性是指數(shù)據(jù)庫中數(shù)據(jù)的正確性和相容性,那是一種語義概念,包括兩個方面:①與現(xiàn)實世界中應(yīng)用需求的數(shù)據(jù)的相容性和正確性。②數(shù)據(jù)庫內(nèi)數(shù)據(jù)之間的相容性和正確性。
二、關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)(一)關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)和基本術(shù)語
在關(guān)系數(shù)據(jù)模型(relation model)中,數(shù)據(jù)結(jié)構(gòu)用單一的二維表結(jié)構(gòu)來表示實體及實體間的聯(lián)系。
(1)關(guān)系(relation):一個關(guān)系對應(yīng)一個二維表,二維表就是關(guān)系名。
(2)屬性(attribute)和值域(domain):在二維表中的列(字段),稱為屬性。屬性的個數(shù)稱為關(guān)系的元數(shù),列的值稱為屬性值;屬性值的取值范圍稱為值域。
(3)關(guān)系模式(relation schema):在二維表中的行定義(記錄的型),即對關(guān)系的描述稱為關(guān)系模式,一般表示為:關(guān)系名(屬性1,屬性2,…,屬性n)
(4)元組(tuple):在二維表中的一行(記錄的值),稱為一個元組。關(guān)系模式和元組的集合通稱為關(guān)系。
(5)分量(component):元組中的一個屬性值
(6)候選碼(candidate key)或候選鍵:如果在一個關(guān)系中,存在多個屬性(或?qū)傩越M合)都能用來惟一標(biāo)識該關(guān)系的元組,這些屬性(或?qū)傩越M合)都稱為該關(guān)系的候選碼或候選鍵。
(7)主碼(primary key)或主鍵:在一個關(guān)系的若干個候選碼中指定一個用來惟一標(biāo)識該關(guān)系的元組,這個被指定的候選碼稱為該關(guān)系的主碼或主鍵。
(8)主屬性(primary attribute)和非主屬性(nonprimary attribute):關(guān)系中包含在任何一個候選碼中的屬性稱為主屬性或碼屬性,不包含在任何一個候選碼中的屬性稱為非主屬性或非碼屬性。
(9)外碼(foreign key)或外鍵:當(dāng)關(guān)系中的某個屬性(或?qū)傩越M)雖然不是該關(guān)系的主碼或只是主碼的一部分,但卻是另一個關(guān)系的主碼時,稱該屬性(或?qū)傩越M)為這個關(guān)系的外碼。
(10)參照關(guān)系(referencing relation)與被參照關(guān)系(referencing relation):參照關(guān)系也稱從關(guān)系,被參照關(guān)系也稱主關(guān)系,它們是指以外碼相關(guān)聯(lián)的兩個關(guān)系。以外碼作為主碼的關(guān)系稱為被參照關(guān)系;外碼所在的關(guān)系稱為參照關(guān)系或目標(biāo)關(guān)系(target relation)。由此可見,被參照關(guān)系與參照關(guān)系是通過外碼相聯(lián)系的,這種聯(lián)系通常是1:n的聯(lián)系。對于數(shù)據(jù)庫要分清型(type)和值(value)的概念,數(shù)據(jù)庫的型是指對數(shù)據(jù)庫的結(jié)構(gòu)和屬性的說明,關(guān)系數(shù)據(jù)庫的型即對關(guān)系數(shù)據(jù)庫結(jié)構(gòu)的描述,它包括若干關(guān)系集合。數(shù)據(jù)庫的值是型的一個具體賦值,關(guān)系數(shù)據(jù)庫的值是這些關(guān)系模式在某一時刻對應(yīng)的關(guān)系的集合。所以,數(shù)據(jù)庫的型亦稱為數(shù)據(jù)庫的內(nèi)涵(intention),數(shù)據(jù)庫的值亦稱為數(shù)據(jù)庫的外延(extensive)。數(shù)據(jù)庫的型是穩(wěn)定的,而數(shù)據(jù)庫的值是隨時間不斷變化的,因為數(shù)據(jù)庫中的數(shù)據(jù)在不斷變更。
(二)關(guān)系的形式定義和關(guān)系數(shù)據(jù)庫對關(guān)系的限定
1.關(guān)系的形式定義
從數(shù)學(xué)的觀點(diǎn)定義關(guān)系稱為關(guān)系的形式定義。有如下兩種定義方法:
(1)用集合論的觀點(diǎn)定義關(guān)系:關(guān)系是一個元數(shù)為K的元組集合,即這個關(guān)系有若干個元組,每個元組有K個屬性值(把關(guān)系看成一個集合,集合中的元素是元組)。
(2)用值域的概念來定義關(guān)系:關(guān)系是屬性值域笛卡爾積的一個子集。設(shè)一個關(guān)系的屬性是A 1 ,…,An,其對應(yīng)的值域為D 1 …,D n (也可以有相同的),定義D 1 ,…,D n 的笛卡爾積D=D 1 ×D 2 …×D n ={(d 1 ,…,d n )|d i ∈Di,1≤i≤n}。D中的每一個子集稱為關(guān)系。這里D的元素(d , …,d n )就是一個n元元組(n-tuple),元素中的每一個值di稱為元組的一個分量。若Di(i=1,2…,,n)為有限集,其基數(shù)(Cardinal numder)為mi(i=1,2,…,n),則D 1 ×D 2 ×…D n 的基數(shù)M為 M=- n i=1 mi笛卡爾積可表示為一個二維表,表中的每行對應(yīng)一個元組,表中的每列對應(yīng)一個域。
2.關(guān)系數(shù)據(jù)庫對關(guān)系的限定
(1)每一個屬性是不可分解的。這是關(guān)系數(shù)據(jù)庫對關(guān)系的最基本的一條限定,要求關(guān)系的每一個分量必須是一個不可分的數(shù)據(jù)項,也就是說,不允許表中還有表。
(2)每一個關(guān)系模式中屬性的數(shù)據(jù)類型以及屬性的個數(shù)是固定的,并且每個屬性必須命名,在同一個關(guān)系模式中,屬性名必須是不同的。
(3)每一個關(guān)系僅僅有一種記錄類型,即一種關(guān)系模式。
(4)在關(guān)系中元組的順序(即行序)是無關(guān)緊要的。
(5)在關(guān)系中屬性的順序可任意交換,交換時應(yīng)連同屬性名一起交換才行,否則順序是重要的。
(6)同一個關(guān)系中不允許出現(xiàn)完全相同的元組。
一、關(guān)系數(shù)據(jù)庫系統(tǒng)概述(一)關(guān)系數(shù)據(jù)庫系統(tǒng)
關(guān)系數(shù)據(jù)庫系統(tǒng)是支持關(guān)系數(shù)據(jù)模型的數(shù)據(jù)庫系統(tǒng)。關(guān)系數(shù)據(jù)庫應(yīng)用數(shù)學(xué)方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。最早提出將這類方法用于數(shù)據(jù)處理的是1962年CODASYL發(fā)表的“信息代數(shù)”一文,之后有1968年David Child在7090機(jī)上實現(xiàn)的集合論數(shù)據(jù)結(jié)構(gòu),但系統(tǒng)而嚴(yán)格地提出關(guān)系模型的是美國IBM公司的E.F.Codd。1970年E.F.Codd連續(xù)發(fā)表了多篇論文,奠定了關(guān)系數(shù)據(jù)庫的理論基礎(chǔ)。
(二)關(guān)系數(shù)據(jù)模型
關(guān)系數(shù)據(jù)模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合和關(guān)系完整性約束3大要素組成。
(1)關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)單一,在關(guān)系模型中,現(xiàn)實世界的實體以及實體間的各種聯(lián)系均用關(guān)系來表示。在用戶看來,關(guān)系模型中數(shù)據(jù)的邏輯結(jié)構(gòu)是一張二維表。
(2)關(guān)系操作集合關(guān)系模型中常用的關(guān)系操作包括:選擇(select)、投影(project)、連接(join)、除(divide)、并(union)、交(intersection)、差(difference)等,以及查詢(query)操作和增(insert)、刪(delete)、改(update)操作兩大部分。查詢的表達(dá)能力是其中最主要的部分。關(guān)系操作的特點(diǎn)是集合操作方式,即操作的對象和結(jié)果都是集合。這種操作方式也稱為一次一個集合(set-at-a-time)的方式。相應(yīng)地,非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操作方式則為一次一個記錄(record-at-a-time)的方式。關(guān)系模型給出了關(guān)系操作的能力和特點(diǎn),關(guān)系操作通過關(guān)系語言實現(xiàn)。關(guān)系語言的特點(diǎn)(它的優(yōu)點(diǎn))是高度非過程化,所謂非過程化是指:①用戶不必請求DBA為他建立特殊的存取路徑,存取路徑的選擇由DBMS的優(yōu)化機(jī)制來完成。②用戶也不必求助于循環(huán),遞歸來完成數(shù)據(jù)的重復(fù)操作。
(3)關(guān)系的完整性約束數(shù)據(jù)庫的數(shù)據(jù)完整性是指數(shù)據(jù)庫中數(shù)據(jù)的正確性和相容性,那是一種語義概念,包括兩個方面:①與現(xiàn)實世界中應(yīng)用需求的數(shù)據(jù)的相容性和正確性。②數(shù)據(jù)庫內(nèi)數(shù)據(jù)之間的相容性和正確性。
二、關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)(一)關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)和基本術(shù)語
在關(guān)系數(shù)據(jù)模型(relation model)中,數(shù)據(jù)結(jié)構(gòu)用單一的二維表結(jié)構(gòu)來表示實體及實體間的聯(lián)系。
(1)關(guān)系(relation):一個關(guān)系對應(yīng)一個二維表,二維表就是關(guān)系名。
(2)屬性(attribute)和值域(domain):在二維表中的列(字段),稱為屬性。屬性的個數(shù)稱為關(guān)系的元數(shù),列的值稱為屬性值;屬性值的取值范圍稱為值域。
(3)關(guān)系模式(relation schema):在二維表中的行定義(記錄的型),即對關(guān)系的描述稱為關(guān)系模式,一般表示為:關(guān)系名(屬性1,屬性2,…,屬性n)
(4)元組(tuple):在二維表中的一行(記錄的值),稱為一個元組。關(guān)系模式和元組的集合通稱為關(guān)系。
(5)分量(component):元組中的一個屬性值
(6)候選碼(candidate key)或候選鍵:如果在一個關(guān)系中,存在多個屬性(或?qū)傩越M合)都能用來惟一標(biāo)識該關(guān)系的元組,這些屬性(或?qū)傩越M合)都稱為該關(guān)系的候選碼或候選鍵。
(7)主碼(primary key)或主鍵:在一個關(guān)系的若干個候選碼中指定一個用來惟一標(biāo)識該關(guān)系的元組,這個被指定的候選碼稱為該關(guān)系的主碼或主鍵。
(8)主屬性(primary attribute)和非主屬性(nonprimary attribute):關(guān)系中包含在任何一個候選碼中的屬性稱為主屬性或碼屬性,不包含在任何一個候選碼中的屬性稱為非主屬性或非碼屬性。
(9)外碼(foreign key)或外鍵:當(dāng)關(guān)系中的某個屬性(或?qū)傩越M)雖然不是該關(guān)系的主碼或只是主碼的一部分,但卻是另一個關(guān)系的主碼時,稱該屬性(或?qū)傩越M)為這個關(guān)系的外碼。
(10)參照關(guān)系(referencing relation)與被參照關(guān)系(referencing relation):參照關(guān)系也稱從關(guān)系,被參照關(guān)系也稱主關(guān)系,它們是指以外碼相關(guān)聯(lián)的兩個關(guān)系。以外碼作為主碼的關(guān)系稱為被參照關(guān)系;外碼所在的關(guān)系稱為參照關(guān)系或目標(biāo)關(guān)系(target relation)。由此可見,被參照關(guān)系與參照關(guān)系是通過外碼相聯(lián)系的,這種聯(lián)系通常是1:n的聯(lián)系。對于數(shù)據(jù)庫要分清型(type)和值(value)的概念,數(shù)據(jù)庫的型是指對數(shù)據(jù)庫的結(jié)構(gòu)和屬性的說明,關(guān)系數(shù)據(jù)庫的型即對關(guān)系數(shù)據(jù)庫結(jié)構(gòu)的描述,它包括若干關(guān)系集合。數(shù)據(jù)庫的值是型的一個具體賦值,關(guān)系數(shù)據(jù)庫的值是這些關(guān)系模式在某一時刻對應(yīng)的關(guān)系的集合。所以,數(shù)據(jù)庫的型亦稱為數(shù)據(jù)庫的內(nèi)涵(intention),數(shù)據(jù)庫的值亦稱為數(shù)據(jù)庫的外延(extensive)。數(shù)據(jù)庫的型是穩(wěn)定的,而數(shù)據(jù)庫的值是隨時間不斷變化的,因為數(shù)據(jù)庫中的數(shù)據(jù)在不斷變更。
(二)關(guān)系的形式定義和關(guān)系數(shù)據(jù)庫對關(guān)系的限定
1.關(guān)系的形式定義
從數(shù)學(xué)的觀點(diǎn)定義關(guān)系稱為關(guān)系的形式定義。有如下兩種定義方法:
(1)用集合論的觀點(diǎn)定義關(guān)系:關(guān)系是一個元數(shù)為K的元組集合,即這個關(guān)系有若干個元組,每個元組有K個屬性值(把關(guān)系看成一個集合,集合中的元素是元組)。
(2)用值域的概念來定義關(guān)系:關(guān)系是屬性值域笛卡爾積的一個子集。設(shè)一個關(guān)系的屬性是A 1 ,…,An,其對應(yīng)的值域為D 1 …,D n (也可以有相同的),定義D 1 ,…,D n 的笛卡爾積D=D 1 ×D 2 …×D n ={(d 1 ,…,d n )|d i ∈Di,1≤i≤n}。D中的每一個子集稱為關(guān)系。這里D的元素(d , …,d n )就是一個n元元組(n-tuple),元素中的每一個值di稱為元組的一個分量。若Di(i=1,2…,,n)為有限集,其基數(shù)(Cardinal numder)為mi(i=1,2,…,n),則D 1 ×D 2 ×…D n 的基數(shù)M為 M=- n i=1 mi笛卡爾積可表示為一個二維表,表中的每行對應(yīng)一個元組,表中的每列對應(yīng)一個域。
2.關(guān)系數(shù)據(jù)庫對關(guān)系的限定
(1)每一個屬性是不可分解的。這是關(guān)系數(shù)據(jù)庫對關(guān)系的最基本的一條限定,要求關(guān)系的每一個分量必須是一個不可分的數(shù)據(jù)項,也就是說,不允許表中還有表。
(2)每一個關(guān)系模式中屬性的數(shù)據(jù)類型以及屬性的個數(shù)是固定的,并且每個屬性必須命名,在同一個關(guān)系模式中,屬性名必須是不同的。
(3)每一個關(guān)系僅僅有一種記錄類型,即一種關(guān)系模式。
(4)在關(guān)系中元組的順序(即行序)是無關(guān)緊要的。
(5)在關(guān)系中屬性的順序可任意交換,交換時應(yīng)連同屬性名一起交換才行,否則順序是重要的。
(6)同一個關(guān)系中不允許出現(xiàn)完全相同的元組。

