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

1.2 關(guān)系數(shù)據(jù)庫

關(guān)系數(shù)據(jù)庫是當(dāng)前信息管理系統(tǒng)中最常用的數(shù)據(jù)庫,關(guān)系數(shù)據(jù)庫采用關(guān)系模式,應(yīng)用關(guān)系代數(shù)的方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。本節(jié)主要介紹關(guān)系模型、關(guān)系數(shù)據(jù)理論與關(guān)系數(shù)據(jù)庫標準語言。

1.2.1 關(guān)系模型

關(guān)系模型由三部分組成:數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作、關(guān)系的完整性。在介紹三個組成部分之前,先來了解關(guān)系模型的基本術(shù)語。

1.關(guān)系模型的基本術(shù)語

(1)關(guān)系模型:用二維表格結(jié)構(gòu)來表示實體及實體間聯(lián)系的模型稱為“關(guān)系模型”(Relational Model)。

(2)屬性和值域:在二維表中的列(字段、數(shù)據(jù)項)稱為屬性(Attribute),列值稱為屬性值,屬性值的取值范圍稱為值域(Domain)。

(3)關(guān)系模式:在二維表格中,行定義(記錄的型)稱為關(guān)系模式(Relation Schema)。

(4)元組與關(guān)系:在二維表中的行(記錄的值),稱為元組(Tuple),元組的集合稱為關(guān)系,關(guān)系模式通常也稱為關(guān)系。

(5)關(guān)鍵字或碼:在關(guān)系的屬性中,能夠用來唯一標識元組的屬性(或?qū)傩越M合)稱為關(guān)鍵字或碼(Key)。關(guān)系中的元組由關(guān)鍵字的值來唯一確定,并且關(guān)鍵字不能為空。例如,學(xué)生表中的學(xué)號就是關(guān)鍵字。

(6)候選關(guān)鍵字或候選碼:如果一個關(guān)系中,存在著多個屬性(或?qū)傩缘慕M合)都能用來唯一標識該關(guān)系的元組,這些屬性或?qū)傩缘慕M合都稱為該關(guān)系的候選關(guān)鍵字或候選碼(Candidate Key)。

(7)主關(guān)鍵字或主碼:在一個關(guān)系中的若干候選碼中指定為關(guān)鍵字的屬性(或?qū)傩越M合)稱為該關(guān)系的主關(guān)鍵碼(Primary Key)或主碼。

(8)非主屬性或非碼屬性:關(guān)系中不組成碼的屬性均為非主屬性或非碼屬性(Non Primary Attribute)。

(9)外部關(guān)鍵字或外鍵:當(dāng)關(guān)系中的某個屬性或?qū)傩越M合雖不是該關(guān)系的關(guān)鍵字或只是關(guān)鍵字的一部分,但卻是另一個關(guān)系的關(guān)鍵字時,稱該屬性或?qū)傩越M合為這個關(guān)系的外部關(guān)鍵字或外鍵(Foreign Key)。

(10)從表與主表:是指以外鍵相關(guān)聯(lián)的兩個表,以外鍵為主鍵的表稱為主表(主鍵表),外鍵所在的表稱為從表(外鍵表)。例如,學(xué)生(學(xué)號,姓名,出生日期,入學(xué)時間,系)與選課(學(xué)號,課程號,成績)兩個表,對于“選課”表,學(xué)號是外鍵,對于“學(xué)生”表,學(xué)號是主鍵。“學(xué)生”表為主表,“選課”表為從表。

2.關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)

關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)是一種二維表格結(jié)構(gòu),在關(guān)系模型中現(xiàn)實世界的實體與實體之間的聯(lián)系均用二維表格來表示。如表1.1所示。

表1.1 關(guān)系模型數(shù)據(jù)結(jié)構(gòu)

3.關(guān)系操作

關(guān)系模型中給出了關(guān)系操作的能力與特點。關(guān)系操作的特點是集合操作,即操作的對象和結(jié)果都是集合,這種操作稱為一次一個集合的方式。關(guān)系操作的能力有選擇操作(Select)、投影(Project)、連接(Join)、除(Divide)、并(Union)、交(Intersection)、差(Difference)等查詢(Query)操作和插入(Insert)、刪除(Delete)、修改(Update)操作。

(1)數(shù)據(jù)查詢。數(shù)據(jù)查詢是將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫中取出并放入指定內(nèi)存,放入指定內(nèi)存的數(shù)據(jù)可以來自于一個關(guān)系,也可以來自于多個關(guān)系。

(2)數(shù)據(jù)插入。數(shù)據(jù)插入是數(shù)據(jù)添加到指定關(guān)系中,形成關(guān)系中的元組。

(3)數(shù)據(jù)刪除。數(shù)據(jù)刪除的基本單位是一個關(guān)系中的元組,是將指定關(guān)系中的指定元組刪除。

(4)數(shù)據(jù)修改。數(shù)據(jù)修改是在一個關(guān)系中修改指定的元組的指定屬性。數(shù)據(jù)修改包含刪除需要修改的元組和插入修改后的元組兩部分操作。

關(guān)系操作的能力可以用關(guān)系代數(shù)來表示。關(guān)系代數(shù)是一種抽象的查詢語言,這些抽象的語言與具體的DBMS中實現(xiàn)語言并不完全一致。

4.關(guān)系模型的數(shù)據(jù)完整性

數(shù)據(jù)完整性是指關(guān)系模型中數(shù)據(jù)的正確性與一致性。關(guān)系模型允許定義的完整性約束有:實體完整性、域完整性、參照完整性和用戶自定義的完整性約束。關(guān)系型數(shù)據(jù)庫系統(tǒng)提供了對實體完整性、域完整性和參照完整性約束的自動支持,也就是在插入、修改、刪除操作時,數(shù)據(jù)庫系統(tǒng)自動保證數(shù)據(jù)的正確性與一致性。

(1)實體完整性規(guī)則(Entity Integrity Rule)

這條規(guī)則要求關(guān)系中的元組在組成主鍵的屬性上不能為空。例如,學(xué)生表中的學(xué)號屬性不能為空。

(2)域完整性規(guī)則(Domain Integrity Rule)

這條規(guī)則要求表中列的數(shù)據(jù)必須具有正確的數(shù)據(jù)類型、格式以及有效的數(shù)據(jù)范圍。例如,選課表中的成績列的數(shù)值不能小于0,也不能大于100。

(3)參照完整性規(guī)則(Reference Integrity Rule)

這條規(guī)則要求不能引用不存在的元組。例如,在學(xué)生選課表中的學(xué)號列不能引用學(xué)生表中沒有的學(xué)號。

(4)用戶定義的完整性規(guī)則

用戶自定義的完整性規(guī)則是應(yīng)用領(lǐng)域需要遵守的約束條件,體現(xiàn)了具體應(yīng)用領(lǐng)域的語義約束。

1.2.2 關(guān)系數(shù)據(jù)庫中的基本運算

1.SQL語言簡介

SQL(Structured Query Language)語言是關(guān)系數(shù)據(jù)庫的標準語言,它提供了數(shù)據(jù)查詢、數(shù)據(jù)定義和數(shù)據(jù)控制功能。

(1)SQL的數(shù)據(jù)定義功能。SQL的數(shù)據(jù)定義功能包括三部分,SQL的數(shù)據(jù)定義功能可以用于定義和修改模式(如基本表)、定義外模式(如視圖)和內(nèi)模式(如索引)。

① SQL定義基本表的語句有:

CREATE TABLE 創(chuàng)建表

DROP TABLE 刪除表

ALTER TABLE 修改表

② SQL定義視圖的語句有:

CREATE VIEW 創(chuàng)建視圖

DROP VIEW 刪除視圖

③ SQL定義索引的語句有:

CREATE INDEX 創(chuàng)建索引

DROP INDEX 刪除索引

(2)SQL的數(shù)據(jù)查詢功能。SQL的數(shù)據(jù)查詢功能非常強大,它主要是通過SELECT語句來實現(xiàn)的。SQL可以實現(xiàn)簡單查詢、連接查詢、嵌套查詢和視圖查詢等。

(3)SQL的數(shù)據(jù)更新功能。SQL的數(shù)據(jù)更新功能主要包括:INSERT,DELETE,UPDATE三條語句。

(4)SQL的訪問控制功能。SQL的數(shù)據(jù)控制功能是指控制用戶對數(shù)據(jù)的操作權(quán)力。某個用戶對數(shù)據(jù)庫的操作權(quán)力是由數(shù)據(jù)庫管理員來決定和分配的,數(shù)據(jù)庫訪問控制功能保證這些安全政策的正確執(zhí)行。SQL通過授權(quán)語句GRANT和回收語句REVOKE來實現(xiàn)數(shù)據(jù)控制功能。

(5)SQL嵌入式使用方式。SQL具有兩種使用方式,既可以作為獨立的語言在終端交互方式下使用,又可以將SQL語句嵌入在某種高級語言(如C,C++,Java等)之中使用。嵌入SQL的高級語言稱為主語言或宿主語言。

2.關(guān)系數(shù)據(jù)庫中的基本運算

在關(guān)系中訪問所需的數(shù)據(jù)時,需要對關(guān)系進行一定的關(guān)系運算。關(guān)系數(shù)據(jù)庫主要支持選擇、投影和連接關(guān)系運算,它們源于關(guān)系代數(shù)中并、交、差、選擇、投影和連接等運算。

(1)選擇。從一個表中找出滿足指定條件的記錄行形成一個新表的操作稱為選擇。選擇是從行的角度進行運算得到新的表,新表的關(guān)系模式不變,其記錄是原表的一個子集。

【例1.1】從“學(xué)生”表中查詢2006年入學(xué)學(xué)生的信息。即從表1.1所示的表中篩選出入學(xué)時間為“2006-9-18”的記錄,SQL語句如下:

        SELECT *
        FROM  學(xué)生
        WHERE入學(xué)時間='2006-9-18'

其結(jié)果如表1.2所示。

表1.22006年入學(xué)學(xué)生信息表

(2)投影。從一個表中找出若干字段形成一個新表的操作稱為投影。投影是從列的角度進行的運算,通過對表中的字段進行選擇或重組,得到新的表。新表的關(guān)系模式所包含的字段個數(shù)一般比原表少,或者字段的排列順序與原表不同,其內(nèi)容是原表的一個子集。

【例1.2】從“學(xué)生”表中查詢出學(xué)生的學(xué)號、姓名和所在系部信息。即從表1.1所示的表中選出學(xué)生的“學(xué)號”、“姓名”和“系部名稱”信息,SQL語句如下:

        SELECT學(xué)號,姓名,系部名稱
        FROM  學(xué)生

其結(jié)果如表1.3所示。

表1.3 學(xué)生學(xué)號、姓名、系部名稱表

(3)連接。選擇和投影都是對單表進行的運算。在通常情況下,需要從兩個表中選擇滿足條件的記錄。連接就是這樣的運算方式,它是將兩個表中的記錄按一定的條件橫向結(jié)合,形成一個新的表。

連接分為多種類型,自然連接是常用的連接,理解自然連接的基礎(chǔ)是交叉連接。

① 交叉連接。交叉連接是將兩個表不加約束的連接在一起,連接產(chǎn)生的結(jié)果集的記錄為兩個表中記錄的交叉乘積,結(jié)果集的列為兩個表列的和。

表1.4 系部表

【例1.3】設(shè)有“系部”表,如表1.4所示。交叉連接“學(xué)生”表和“系部”表。SQL語句如下:

        SELECT *
        FROM  學(xué)生CROSS JOIN  系部

其結(jié)果如表1.5所示。

表1.5 【例1.3】運算結(jié)果

從結(jié)果集可以看出,交叉連接產(chǎn)生的結(jié)果集沒有實際應(yīng)用的意義。一般用它來幫助理解其他連接查詢。

② 自然連接。當(dāng)兩個表中有相同的字段時,可以使用自然連接將字段值相等的記錄連接起來,并且去掉重復(fù)字段形成新表中的記錄。

【例1.4】自然連接“學(xué)生”表和“系部”表。SQL語句如下:

        SELECT學(xué)號,姓名,性別,出生日期,入學(xué)時間,系部.系部名稱,系主任
        FROM  學(xué)生JOIN  系部
        ON學(xué)生.系部名稱= 系部.系部名稱

其結(jié)果如表1.6所示。

表1.6 【例1.4】運算結(jié)果

1.2.3 關(guān)系數(shù)據(jù)理論

前面討論了數(shù)據(jù)庫系統(tǒng)的一些基本概念、關(guān)系模型的三個部分以及關(guān)系數(shù)據(jù)庫的標準語言。那么,針對一個具體數(shù)據(jù)庫應(yīng)用問題,應(yīng)該構(gòu)造幾個關(guān)系模式,每個關(guān)系由那些屬性組成,即如何構(gòu)造適合于它的數(shù)據(jù)模式,這是關(guān)系數(shù)據(jù)庫邏輯設(shè)計的問題。為了使數(shù)據(jù)庫設(shè)計的方法走向規(guī)范,1971年E.F.Codd提出了規(guī)范化理論,目前規(guī)范化理論的研究已經(jīng)取得了很多的成果。關(guān)系數(shù)據(jù)理論就是指導(dǎo)產(chǎn)生一個具有確定的、好的數(shù)據(jù)庫模式的理論體系。

1.問題的提出

首先來看不規(guī)范設(shè)計的關(guān)系模式所存在的問題。

例如,給出一組如下關(guān)系實例:

學(xué)生關(guān)系:學(xué)生(學(xué)號,姓名,性別,出生日期,入學(xué)時間,系)

課程關(guān)系:課程(課程號,課程名,學(xué)時數(shù))

選課關(guān)系:選課(學(xué)號,課程號,成績)

可能有以下兩種數(shù)據(jù)模式:

① 只有一個關(guān)系模式:

學(xué)生—選課—課程(學(xué)號,姓名,性別,出生日期,入學(xué)時間,系,課程號,課程名,學(xué)時數(shù),成績)

② 用三個關(guān)系模式:學(xué)生,課程,選課。

比較這兩種設(shè)計方案。

第一種設(shè)計可能有下述問題。

? 數(shù)據(jù)冗余:如果學(xué)生選多門課程時,則每選一門課程就必須存儲一次學(xué)生信息的細節(jié),當(dāng)一門課程被多個同學(xué)選學(xué)時,也必須多次存儲課程的細節(jié),這樣就有很多的數(shù)據(jù)冗余。

? 修改異常:由于數(shù)據(jù)冗余,當(dāng)修改某些數(shù)據(jù)項(例如“姓名”)時,可能有一部分有關(guān)元組被修改,而另一部分元組卻沒有被修改。

? 插入異常:當(dāng)需要增加一門新課程,而這門課程還沒有被學(xué)生選學(xué)時,則該課程不能進入數(shù)據(jù)庫中。因為在學(xué)生—選課—課程關(guān)系模式中,(學(xué)號,課程號)是主鍵,此時學(xué)號為空,數(shù)據(jù)庫系統(tǒng)會根據(jù)實體完整性約束規(guī)則拒絕該元組的插入。

? 刪除異常:如果某個學(xué)生的選課記錄都被刪除了,那么,此學(xué)生的細節(jié)信息也一起被刪除了,這樣就無法找到這個學(xué)生的信息了。

第二種設(shè)計方案不存在上述問題。

數(shù)據(jù)冗余消除了,插入、刪除、修改異常消除了。即使學(xué)生沒選任何課程,學(xué)生的細節(jié)信息也仍然保存在學(xué)生關(guān)系中;即使課程沒有被任何學(xué)生選學(xué),課程的細節(jié)信息也仍然保存在課程關(guān)系中。解決了冗余及操作異常問題,又出來了另外一些問題,如果要查找選修語文課程的學(xué)生姓名,則需要進行三個關(guān)系的連接操作,這樣代價很高。相比之下,學(xué)生—選課—課程關(guān)系直接投影、選擇就可以完成,代價較低。

如何找到一個好的數(shù)據(jù)庫模式?如何判斷是否消除了上述四種問題?這就是關(guān)系數(shù)據(jù)理論研究的問題。關(guān)系數(shù)據(jù)理論主要包括三個方面的內(nèi)容:數(shù)據(jù)依賴,范式,模式設(shè)計方法,其中數(shù)據(jù)依賴起核心作用。

2.數(shù)據(jù)依賴

現(xiàn)實世界隨著時間在不斷地變化,因而從現(xiàn)實世界經(jīng)過抽象而得到的關(guān)系模式的關(guān)系也會有所變化。但是,現(xiàn)實世界的許多已有事實限定了關(guān)系模式所有可能的關(guān)系必須滿足一定的完整性約束條件。這些約束條件通過對屬性取值范圍的限定反映出來,稱之為依賴于值域元素語義的限制,例如,學(xué)生出生日期為1986而入學(xué)時間也為1986,這顯然是不合理的;這些約束條件通過對屬性值之間的相互關(guān)聯(lián)(主要體現(xiàn)在值的相等與否)反映出來,這類限制統(tǒng)稱為數(shù)據(jù)依賴,而其中最重要的是函數(shù)依賴和多值依賴,它是數(shù)據(jù)模式設(shè)計的關(guān)鍵。關(guān)系模式應(yīng)當(dāng)刻畫出這些完整性約束條件。

(1)函數(shù)依賴。函數(shù)依賴普遍存在于現(xiàn)實生活中,比如描述一個學(xué)生的關(guān)系,學(xué)生(學(xué)號,姓名,系名),由于一個學(xué)號只對應(yīng)一個學(xué)生,一個學(xué)生只在一個系學(xué)習(xí),因而,當(dāng)學(xué)號值確定之后,姓名和該學(xué)生所在的系名的值也就唯一地確定了,這樣就稱“學(xué)號”函數(shù)決定“姓名”和“系名”,或者說“姓名”和“系名”函數(shù)依賴于“學(xué)號”,記為:學(xué)號→姓名,學(xué)號→系名。

函數(shù)依賴的定義:設(shè)R(U)是屬性集U上的關(guān)系模式,X與Y是U的子集,若對于R(U)的任意一個當(dāng)前值r,如果對r中的任意兩個元組t和s,都有t[X]≡s[X],就必有t[Y]≡s[Y](即若它們在X上的屬性值相等,在Y上的屬性值也一定相等),則稱“X函數(shù)決定Y”或“Y函數(shù)依賴與X”,記做:X→Y,并稱X為決定因素。

函數(shù)依賴和其他數(shù)據(jù)依賴一樣,是語義范疇的概念,只能根據(jù)語義來確定一個函數(shù)依賴,而不能試圖用數(shù)學(xué)來證明。

(2)函數(shù)依賴的分類。關(guān)系數(shù)據(jù)庫中函數(shù)依賴主要有如下幾種:

① 平凡函數(shù)依賴和非平凡函數(shù)依賴。

設(shè)有關(guān)系模式R(U),X→Y是R的一個函數(shù)依賴。若對任何X、Y∈U,此函數(shù)依賴對R的任何一個當(dāng)前值都成立,則稱X→Y是一個平凡函數(shù)依賴。

若X→Y,但Y?X,則稱X→Y是非平凡函數(shù)依賴,若不特別聲明,都是討論非平凡函數(shù)依賴。

② 完全函數(shù)依賴和部分函數(shù)依賴。

設(shè)有關(guān)系模式R(U),X→Y是R的一個函數(shù)依賴,且對于任何X′∈X,X′→Y都不成立,則稱X→Y是一個完全函數(shù)依賴。

反之,如果X′→Y成立,則稱X→Y是一個部分函數(shù)依賴。

③ 傳遞函數(shù)依賴。

設(shè)有關(guān)系模式R(U),X,Y,Z∈U,如果X→Y,Y→Z,且Y?X,Y不函數(shù)決定X,有X→Z,則Z傳遞函數(shù)依賴于X。

(3)多值依賴。多值依賴普遍存在于現(xiàn)實生活中,比如學(xué)校中的某一門課程由多個教師講授,他們使用同一套參考書,每個教師可以講授多門課程,每種參考書可以供多門課程使用。關(guān)系模式“授課”如表1.7所示。

表1.7 授課表

在關(guān)系模型“授課”中,當(dāng)物理課程增加一名講課教師{馬紅}時,必須插入多個元組:{物理,馬紅,普通物理};{物理,馬紅,物理習(xí)題集}。同樣,某一門課程是{數(shù)學(xué)}要去掉一本參考書{微分方程}時,則必須刪除多個元組:{數(shù)學(xué),楊靖康,微分方程};{數(shù)學(xué),王麗,微分方程}。此表中對數(shù)據(jù)的修改很不方便,數(shù)據(jù)的冗余也很明顯。仔細考察這個關(guān)系模式,發(fā)現(xiàn)他們存在著多值依賴,也就是對于一個{物理,普通物理}有一組(教師)值{楊靖康,王麗},這組值僅僅決定于(課程)上的值,而與(參考書)的值沒有關(guān)系。下面是稱為多值依賴的數(shù)據(jù)依賴的定義:

設(shè)R(U)是屬性集U上的一個關(guān)系模式。X,Y,Z是U的一個子集,并且Z=U?X?Y。當(dāng)且僅當(dāng)對R(U)的任一關(guān)系r,給定的一對(x,z)值,有一組Y的值,這組值僅僅決定于x值而與z的值無關(guān),則關(guān)系模式R(U)中多值依賴X→→Y成立。

3.關(guān)系模式的規(guī)范化

在介紹了關(guān)系數(shù)據(jù)理論的一些基本概念之后,下面討論如何根據(jù)屬性間依賴情況來判定關(guān)系是否具有某些不合適的性質(zhì),按屬性間的依賴情況來區(qū)分關(guān)系規(guī)范化的程度為第一范式、第二范式、第三范式和第四范式等,以及如何將具有不合適性質(zhì)的關(guān)系轉(zhuǎn)換為更合適的形式。

關(guān)系數(shù)據(jù)庫中的關(guān)系要滿足一定的要求,滿足不同程度要求的為不同范式,滿足最低要求的叫第一范式,簡稱1NF,在第一范式中進一步滿足一些要求的為第二范式,其余范式依此類推。

不是1NF的關(guān)系都是非規(guī)范化關(guān)系,滿足1NF的關(guān)系稱為規(guī)范化的關(guān)系。數(shù)據(jù)庫理論研究的關(guān)系都是規(guī)范化的關(guān)系。1NF是關(guān)系數(shù)據(jù)庫的關(guān)系模式應(yīng)滿足的最起碼的條件。

(1)第一范式。如果關(guān)系模式R的每一個屬性都是不可分解的,則R為第一范式的模式,記為:R∈1NF模式。

例如有關(guān)系:學(xué)生1(學(xué)號,姓名,性別,出生日期,系名,入學(xué)時間,家庭成員)。關(guān)系“學(xué)生1”不滿足第一范式,因為屬性(家庭成員)可以再分解為(父親)、(母親)等屬性。

解決的方法是將“學(xué)生1”關(guān)系分解為:學(xué)生(學(xué)號,姓名,性別,出生日期,系名,入學(xué)時間);家庭(學(xué)號,家庭成員姓名,親屬關(guān)系)兩個關(guān)系。

(2)第二范式。如果關(guān)系模式R是第一范式,且每個非碼屬性都完全函數(shù)依賴于碼屬性,則稱R為滿足第二范式的模式,記為:R∈2NF模式。

例如有關(guān)系:選課1(學(xué)號,課程號,系名,出生日期,成績)。關(guān)系“選課1”不滿足第二范式,因為屬性“成績”完全依賴于主碼(學(xué)號,課程號),而屬性(系名),(出生日期)只依賴于部分主碼(學(xué)號),所以,不是每一個非碼屬性都完全函數(shù)依賴于碼屬性,如圖1.5所示。

圖1.5 不符合第二范式的函數(shù)依賴示例

解決的方法是將“選課1”關(guān)系投影分解為:選課(學(xué)號,課程號,成績),學(xué)生(學(xué)號,姓名,性別,出生日期,系名,入學(xué)時間)兩個關(guān)系模式。

(3)第三范式。如果關(guān)系模式R是第二范式,且沒有一個非碼屬性是傳遞函數(shù)依賴于候選碼屬性,則稱R為滿足第三范式的模式,記為:R∈3NF模式。

例如有關(guān)系:學(xué)生2(學(xué)號,姓名,性別,出生日期,系名,入學(xué)時間,系宿舍樓)。關(guān)系“學(xué)生2”不滿足第三范式,因為屬性(系宿舍樓)依賴于主碼(學(xué)號),但也可以從非碼屬性(系名)導(dǎo)出,即(系宿舍樓)傳遞依賴(學(xué)號),如圖1.6所示。

圖1.6 學(xué)生2中的函數(shù)依賴

解決的方法同樣是將關(guān)系“學(xué)生2”分解為:學(xué)生(學(xué)號,姓名,性別,出生日期,系名,入學(xué)時間);宿舍樓(系名,宿舍樓)兩個關(guān)系模式。

(4)擴充第三范式。如果關(guān)系模式R是第三范式,且每一個決定因素都包含有碼,則稱R為滿足擴充第三范式的模式,記為:R∈BCNF模式。

例如有關(guān)系:教學(xué)(學(xué)生,教師,課程)。每位教師只教一門課。每門課有若干個教師教,學(xué)生選定某門課程,就對應(yīng)一個固定的教師。由語義可得到如圖1.7所示的函數(shù)依賴。

圖1.7 教學(xué)中的函數(shù)依賴

“教學(xué)”關(guān)系不屬于BCNF模式,因為(教師)是一個決定因素,而(教師)不包含碼。

解決的方法是將關(guān)系“教學(xué)”分解為:學(xué)生選教師(學(xué)生,教師);教師任課(教師,課程)兩個關(guān)系模式。

(5)第四范式。如果關(guān)系模式R是第一范式,且每個非平凡多值依賴X→→Y(Y?X),X都含有碼,則稱R為滿足第四范式的模式,記為:R∈4NF模式。

例如有關(guān)系:授課(課程,教師,參考書)。每位教師可以上多門課,每門課可以由若干教師講授,一門課程有多種參考書。在“授課”關(guān)系中,課程→→教師,課程→→參考書,它們都是非平凡的多值依賴。而(課程)不是碼,關(guān)系模式“授課”的碼是(課程,教師,參考書),因此關(guān)系模式“授課”不屬于第四范式。

解決的方法是將“授課”關(guān)系分解為:任課(課程,教師);教參(課程,參考書)兩個關(guān)系。

4.關(guān)系規(guī)范化小結(jié)

關(guān)系模式規(guī)范化的過程是通過對關(guān)系模式的分解,把低一級的關(guān)系模式分解為若干個高一級的關(guān)系模式,逐步消除數(shù)據(jù)依賴中的不合理部分,使模式達到某種程度的分離,即“一個關(guān)系表示一事或一物”。所以規(guī)范化的過程又稱為“單一化”。關(guān)系規(guī)范化的過程如圖1.8所示。

圖1.8 各種范式及規(guī)范化過程

主站蜘蛛池模板: 绥阳县| 攀枝花市| 株洲县| 崇阳县| 措美县| 五寨县| 奈曼旗| 栾城县| 苗栗市| 丹凤县| 赤城县| 乐至县| 巴青县| 商丘市| 五原县| 漳州市| 三穗县| 平遥县| 呼和浩特市| 板桥市| 嘉善县| 钦州市| 樟树市| 万宁市| 鲜城| 芜湖县| 青岛市| 阳信县| 烟台市| 嘉祥县| 隆林| 成都市| 抚顺县| 朝阳市| 建瓯市| 永济市| 祥云县| 大新县| 西林县| 永兴县| 搜索|