官术网_书友最值得收藏!

2.1 關(guān)系模型概述

【案例2-1】關(guān)系模型的提出。1970年E.F. Codd在美國計(jì)算機(jī)學(xué)會(huì)會(huì)刊《Communications of the ACM》上發(fā)表了題為A Relational Model of Data for Shared Data Banks的論文,首次系統(tǒng)地提出了關(guān)系模型的相關(guān)理論,該論文和他后續(xù)發(fā)表的多篇論文奠定了關(guān)系數(shù)據(jù)的理論基礎(chǔ)。E.F.Codd也因其杰出貢獻(xiàn),于1981年獲得ACM圖靈獎(jiǎng)。

2.1.1 關(guān)系模型的基本概念

關(guān)系模型是近50年來最重要、應(yīng)用最廣泛的數(shù)據(jù)庫模型,大型數(shù)據(jù)庫如Oracle、DB2、SQL Server和Sybase等都是基于關(guān)系模型設(shè)計(jì)研發(fā)的,其數(shù)據(jù)結(jié)構(gòu)可統(tǒng)一用一張二維表來表示現(xiàn)實(shí)世界中的實(shí)體與實(shí)體之間的聯(lián)系。

1.關(guān)系及關(guān)系模型的常用概念

下面對關(guān)系模型中最常用的重要概念進(jìn)行逐一解釋。

1)關(guān)系。關(guān)系是一張二維表,它表示數(shù)據(jù)的邏輯結(jié)構(gòu),將現(xiàn)實(shí)世界中實(shí)體之間的聯(lián)系歸結(jié)為簡單的二維關(guān)系,其中,表中的每一行代表一個(gè)元組(記錄),每一列代表一個(gè)域(屬性),可以用下面更一般的形式定義

D1×D2×...×Dn的子集稱為域D1,D2,…,Dn上的關(guān)系,表示為R(D1,D2,…,Dn),其中R表示關(guān)系名,n是關(guān)系的目或度

2)元組、屬性。在關(guān)系模型中,二維表(關(guān)系)中的行稱為元組(或稱為記錄)。二維表的列稱為屬性。每個(gè)屬性對應(yīng)表中的一個(gè)字段,屬性名也就是字段名,屬性值為各行的字段值。

3)域。域(Domain)是一組具有相同數(shù)據(jù)類型值的集合。用域表示屬性的取值范圍,屬性A的域可以用DOM(A)表示,每個(gè)屬性對應(yīng)一個(gè)域,不同的屬性可以對應(yīng)同一個(gè)域。

【案例2-2】不同域示例。D1={1,2,3,4,5,6,...}表示自然數(shù)集合。D2={男,女}表示性別集合。D3={星期一,星期二,星期三,星期四,星期五,星期六,星期日}表示一周中各天名稱的集合。

4)關(guān)系模型。關(guān)系模型(Relation Model)是指以二維表結(jié)構(gòu)表示的實(shí)體關(guān)系,用鍵表示實(shí)體間聯(lián)系的數(shù)據(jù)模型,其中鍵唯一標(biāo)識一個(gè)元組,并且鍵可以是單一屬性或?qū)傩缘慕M合。

關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合和關(guān)系完整性約束3部分組成。關(guān)系模型是關(guān)系數(shù)據(jù)庫的構(gòu)建基礎(chǔ),所有關(guān)系數(shù)據(jù)庫都支持關(guān)系模型。在關(guān)系模型中,無論實(shí)體還是實(shí)體之間的聯(lián)系均用二維表結(jié)構(gòu)表示,即用關(guān)系呈現(xiàn),每個(gè)關(guān)系對應(yīng)一張二維表。例如,學(xué)生實(shí)體用學(xué)生關(guān)系表示,見【案例2-3】。

【案例2-3】學(xué)生信息表。學(xué)生信息表包含以下信息:學(xué)號、姓名、性別、專業(yè)、出生日期和家庭地址。表頭表示關(guān)系型,從第二行開始以下各行都是一個(gè)關(guān)系型的實(shí)例,如表2-1所示。

表2-1 學(xué)生信息表

5)元數(shù)和基數(shù)。元數(shù)是指關(guān)系中屬性的個(gè)數(shù)。基數(shù)是指元組的個(gè)數(shù)。表2-1所示的關(guān)系的元數(shù)和基數(shù)分別為6和5。

2.鍵、主鍵和外鍵

鍵也稱為碼,在關(guān)系中由唯一可標(biāo)識元組的屬性或?qū)傩越M合構(gòu)成,如學(xué)生的學(xué)號、公民的身份證號等。

1)候選鍵。若關(guān)系表中的某一屬性或?qū)傩越M合的值可唯一確定一個(gè)元組,則稱該屬性或?qū)傩越M為候選碼

2)主鍵。主鍵(primary key)是在候選鍵中選定一個(gè)鍵作為元組標(biāo)識,稱為主鍵。一般情況下,若不加以說明,鍵指主鍵(碼),如果關(guān)系中有多個(gè)候選鍵,可取其中一個(gè)作為該關(guān)系的主鍵,主鍵不允許為空值(非零和空格)。

3)外鍵。外鍵是指若在關(guān)系R中包含另一個(gè)關(guān)系S的主鍵所對應(yīng)的屬性或?qū)傩越MK,則稱K為R的外鍵(碼)

注意:外鍵表示的是另一個(gè)關(guān)系的主鍵,但不是本關(guān)系的主鍵。關(guān)系數(shù)據(jù)庫的表間關(guān)系需要借助外鍵來建立。此外,外鍵需要滿足外鍵約束條件,也就是說外鍵要么為空值,要么是另外一個(gè)關(guān)系已存元組的主鍵。

關(guān)系模型中主鍵和外鍵為現(xiàn)實(shí)世界中實(shí)體之間的聯(lián)系建立了橋梁。基本關(guān)系R稱為參照關(guān)系,基本關(guān)系S稱為被參照關(guān)系目標(biāo)關(guān)系

2.1.2 關(guān)系的類型與性質(zhì)

關(guān)系有3種類型:基本關(guān)系(又稱為基本表或基表)、查詢表和視圖表。基本表是實(shí)際存在的表,是實(shí)際存儲(chǔ)數(shù)據(jù)的邏輯表示。查詢表是查詢結(jié)果對應(yīng)的表。視圖表是由基本表或其他視圖表導(dǎo)出的表,是虛表,不對應(yīng)實(shí)際存儲(chǔ)的數(shù)據(jù)。

基本關(guān)系有以下6條性質(zhì)

1)關(guān)系中的列是同質(zhì)的(Homogeneous),也就是說每一列中的分量是同一類型的數(shù)據(jù),也可以說具有相同的域。

2)不同的列可以來自同一域,即列的類型相同,不同的列要給予不同的列名(屬性名)加以區(qū)分,表明是不同的列。

3)關(guān)系中的列沒有先后順序之分,即列的次序可以任意交換。

4)任意元組的候選碼不能相同,也就是說任意兩行元組不能完全相同,如果完全相同則說明數(shù)據(jù)存在重復(fù),會(huì)造成存儲(chǔ)空間的浪費(fèi)和查詢統(tǒng)計(jì)結(jié)果的不一致或錯(cuò)誤。因此,數(shù)據(jù)庫中應(yīng)該避免元組的重復(fù)現(xiàn)象,保證實(shí)體的唯一性和完整性。

5)關(guān)系中任意兩行元組的次序是可以交換的,即元組無先后順序之分。

6)關(guān)系中的屬性(列)必須是原子值,即每個(gè)屬性都必須是不可分的數(shù)據(jù)項(xiàng)。

關(guān)系模型要求關(guān)系必須是規(guī)范化的,即要求關(guān)系必須滿足必要的規(guī)范條件。這些規(guī)范條件中最基本的一條是,關(guān)系的每一個(gè)分量必須是一個(gè)不可分的數(shù)據(jù)項(xiàng)。

比較【案例2-3】和【案例2-4】中學(xué)生信息表的“出生日期”屬性的設(shè)計(jì),【案例2-3】中的“出生日期”使用一個(gè)日期類型的數(shù)據(jù)進(jìn)行存儲(chǔ),該屬性不可分,而【案例2-4】中的“出生日期”包含小表,即出生日期由年、月、日3分部分組成,雖然看上去更清晰,但是該屬性設(shè)計(jì)與關(guān)系中屬性必須是原子值(不可再分)的原則相沖突,是一種不恰當(dāng)和不規(guī)范的關(guān)系數(shù)據(jù)庫設(shè)計(jì)。

【案例2-4】學(xué)生信息表。學(xué)生信息表包含以下信息:學(xué)號、姓名、性別、專業(yè)、出生日期(年、月、日)和家庭地址。表頭表示關(guān)系型,從第二行開始以下各行都是一個(gè)關(guān)系型的實(shí)例,如表2-2所示。

表2-2 學(xué)生信息表

2.1.3 關(guān)系模式的表示

關(guān)系模式(Relation schema)是對關(guān)系的描述,可形式化地表示如下。

R(U,D,DOM,F(xiàn))

其中R為關(guān)系名,U為組成該關(guān)系的屬性(列)名集合,D為屬性組U中屬性所來自的域,DOM為屬性域的映像集合,F(xiàn)為屬性間數(shù)據(jù)的依賴關(guān)系集合。

關(guān)系模式通常可以簡記為R(U)或R(A1,A2,…,An),其中R為關(guān)系名,A1,A2,…,An為屬性名。例如,學(xué)生關(guān)系的關(guān)系模式(數(shù)據(jù)表)可表示為:

學(xué)生(學(xué)號,姓名,性別,專業(yè),出生日期,家庭地址)

關(guān)系模式是對關(guān)系的描述,關(guān)系模式主要描述兩方面的內(nèi)容

1)關(guān)系模式指明關(guān)系二維表中元組集合的結(jié)構(gòu),也就是它由哪些屬性構(gòu)成,這些屬性來自哪些域(在具體的關(guān)系數(shù)據(jù)庫中體現(xiàn)為屬性的數(shù)據(jù)類型和長度),以及屬性與域之間的映射關(guān)系。

2)關(guān)系模式應(yīng)該說明屬性間的相互關(guān)聯(lián)關(guān)系和屬性本身的約束條件。對于屬性的約束條件,可以通過以下兩個(gè)示例體現(xiàn)。例1,男性職工年齡一般小于60歲(60歲以后退休,當(dāng)前實(shí)行延遲退休的男性職工除外);例2,百分制成績必須為0~100。對于屬性間的相互關(guān)聯(lián)關(guān)系具體表現(xiàn)為外鍵,在以后的章節(jié)中將詳細(xì)說明。

2.1.4 E-R圖與關(guān)系模型之間的轉(zhuǎn)換

1.轉(zhuǎn)換規(guī)則

E-R圖由實(shí)體、實(shí)體的屬性和實(shí)體間的聯(lián)系3個(gè)要素組成,而關(guān)系模型是用二維表呈現(xiàn)現(xiàn)實(shí)世界中實(shí)體之間的聯(lián)系,即關(guān)系模式集合,所以將E-R圖轉(zhuǎn)換為關(guān)系模型,就是將E-R圖轉(zhuǎn)換成關(guān)系模式集合的過程。實(shí)體類型和二元聯(lián)系類型的轉(zhuǎn)換規(guī)則如下。

1)實(shí)體轉(zhuǎn)換關(guān)系規(guī)則。將每一個(gè)實(shí)體轉(zhuǎn)換成一個(gè)關(guān)系模式時(shí),實(shí)體的屬性就是關(guān)系的屬性,實(shí)體的標(biāo)識符就是關(guān)系的鍵,如【案例2-3】中的學(xué)生信息實(shí)體的學(xué)號為關(guān)系模式中的鍵。

2)二元聯(lián)系類型的轉(zhuǎn)換規(guī)則如下。①若實(shí)體間的聯(lián)系為一對一(1:1),則將兩個(gè)實(shí)體類型轉(zhuǎn)換成兩個(gè)關(guān)系模式的過程中,任選一個(gè)屬性或?qū)傩越M在其中加入另一個(gè)關(guān)系模式的鍵和聯(lián)系類型的屬性。②若實(shí)體間的聯(lián)系是一對多(1:n),則在多的一端實(shí)體的關(guān)系模式中,加上一的一端實(shí)體類型的鍵和聯(lián)系類型的屬性。③若實(shí)體間的聯(lián)系是多對多(m:n),則將聯(lián)系類型也轉(zhuǎn)換為關(guān)系模式,其屬性為兩端實(shí)體類型的鍵加上聯(lián)系類型的屬性,而鍵為兩端實(shí)體鍵的組合。

2.轉(zhuǎn)換方法

下面分別對一對一(1:1)、一對多(1:n)和多對多(m:n)3種情況的聯(lián)系轉(zhuǎn)換方法舉例說明。

【案例2-5】每個(gè)學(xué)生只有一個(gè)身份證,每個(gè)身份證只屬于一個(gè)學(xué)生,學(xué)生和身份證之間的關(guān)系為一對一關(guān)系。學(xué)生與身份證實(shí)體關(guān)系圖如圖2-1所示。在學(xué)生端加入身份證號作為聯(lián)系屬性,在兩者之間建立一對一關(guān)系。

學(xué)生(學(xué)號,身份證號,姓名,性別,專業(yè),出生日期,家庭地址),其中學(xué)號為主鍵(PK),身份證號為外鍵(FK),關(guān)聯(lián)到關(guān)系身份證。

身份證(身份證號,簽發(fā)機(jī)關(guān),有效期始,有效期止),身份證號為主鍵。

1)一對一聯(lián)系的轉(zhuǎn)換方法。

2)一對多聯(lián)系的轉(zhuǎn)換方法。

方法一:將聯(lián)系與多的一端實(shí)體所對應(yīng)的關(guān)系模式合并,加上一的一端實(shí)體的主鍵和聯(lián)系的屬性。

方法二:將聯(lián)系轉(zhuǎn)換為一個(gè)獨(dú)立關(guān)系模式,其屬性包含聯(lián)系自身的屬性及相連接的兩端實(shí)體的主鍵。

【案例2-6】訂單和訂單項(xiàng)之間的一對多關(guān)系。每一個(gè)訂單包含一個(gè)或多個(gè)訂單項(xiàng),同時(shí),一個(gè)或多個(gè)訂單項(xiàng)組成一個(gè)訂單。訂單和訂單項(xiàng)的關(guān)系定義如下。訂單和訂單項(xiàng)的E-R圖如圖2-2所示。

訂單表(訂單ID,會(huì)員ID,是否付款,運(yùn)送方式,運(yùn)費(fèi),提交時(shí)間)。

訂單項(xiàng)表(訂單項(xiàng)ID,訂單ID,商品ID,商品數(shù)量)。

圖2-1 學(xué)生與身份證實(shí)體關(guān)系圖

圖2-2 訂單與訂單項(xiàng)一對多聯(lián)系

3)多對多聯(lián)系的轉(zhuǎn)換方法。

對于實(shí)體之間是多對多的聯(lián)系情況,各個(gè)實(shí)體可以直接轉(zhuǎn)換為關(guān)系模式,聯(lián)系則獨(dú)立轉(zhuǎn)換為一個(gè)關(guān)系模式,其屬性包括聯(lián)系自身的屬性和相連各實(shí)體的主鍵。

圖2-3 學(xué)生選課關(guān)系多對多E-R圖

【案例2-7】學(xué)生選課聯(lián)系。一個(gè)學(xué)生可以選多門課程,一門課程可以被多個(gè)學(xué)生選修,學(xué)生的選課聯(lián)系是多對多的聯(lián)系。在轉(zhuǎn)換過程中,將學(xué)生實(shí)體和課程實(shí)體轉(zhuǎn)換為相應(yīng)的獨(dú)立關(guān)系模式,同時(shí)選課聯(lián)系轉(zhuǎn)換為一個(gè)單獨(dú)的關(guān)系模式。其E-R圖如圖2-3所示。具體的關(guān)系模式如下。

學(xué)生(學(xué)號,身份證號,姓名,性別,專業(yè),出生日期,家庭地址),其中學(xué)號為主鍵(PK)。

課程(課程代碼,系部編號,學(xué)期,課程名稱,課程類型,學(xué)分),其中課程代碼為主鍵。

學(xué)生選課(學(xué)號,課程代碼,成績),學(xué)號和課程代碼為組合主鍵,學(xué)號外鍵,課程代碼為外鍵。

討論思考:

1)什么是關(guān)系模式?它的形式化表示是什么?

2)關(guān)系應(yīng)該具有哪些性質(zhì)?

主站蜘蛛池模板: 永川市| 太原市| 渝中区| 阿克苏市| 修武县| 杂多县| 儋州市| 鄢陵县| 英超| 高尔夫| 汉川市| 正蓝旗| 海阳市| 苍溪县| 阿克| 高阳县| 石景山区| 隆安县| 林周县| 克拉玛依市| 苗栗市| 灵寿县| 平泉县| 湟源县| 涿鹿县| 姚安县| 栾川县| 惠安县| 波密县| 涟水县| 镇平县| 龙游县| 宁强县| 太湖县| 礼泉县| 五常市| 平武县| 富裕县| 永春县| 上栗县| 新晃|