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

