數(shù)據(jù)庫上課 第十講 關(guān)系數(shù)據(jù)理論與范式_第1頁
數(shù)據(jù)庫上課 第十講 關(guān)系數(shù)據(jù)理論與范式_第2頁
數(shù)據(jù)庫上課 第十講 關(guān)系數(shù)據(jù)理論與范式_第3頁
數(shù)據(jù)庫上課 第十講 關(guān)系數(shù)據(jù)理論與范式_第4頁
數(shù)據(jù)庫上課 第十講 關(guān)系數(shù)據(jù)理論與范式_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第十講關(guān)系數(shù)據(jù)理論

與范式主講:顧曦電話mail:guxi@數(shù)據(jù)庫系統(tǒng)原理與設(shè)計(jì)主要內(nèi)容1、

問題的提出2、函數(shù)依賴的概念3、函數(shù)依賴?yán)碚?、范式5、模式的分解*21、問題的提出1.1回顧:關(guān)系模式的形式化定義關(guān)系模式是一個(gè)五元組:

R(U,D,DOM,F)R:關(guān)系名U:組成該關(guān)系的屬性名集合D:屬性組U中屬性所來自的域DOM:屬性向域的映象集合F:屬性間數(shù)據(jù)的依賴關(guān)系集合*4簡化表示簡化為一個(gè)三元組:

R(U,F)當(dāng)且僅當(dāng)U上的一個(gè)關(guān)系r滿足F時(shí),r稱為關(guān)系模式R(U,F)的一個(gè)關(guān)系*51.2數(shù)據(jù)冗余定義:同一信息在數(shù)據(jù)庫中存儲(chǔ)了多個(gè)副本。[例5.1]

學(xué)生選課關(guān)系模式SCE(studentNo,courseNo, studentName,courseName,score)若:一個(gè)學(xué)生可選修多門課程一門課程可被多個(gè)學(xué)生選修可能的數(shù)據(jù):*6主碼studentNoStudentNamecourseNocourseNamescoreS0700001李小勇C001高等數(shù)學(xué)98S0700001李小勇C002離散數(shù)學(xué)82S0700001李小勇C006數(shù)據(jù)庫系統(tǒng)原理56S0700002劉方晨C003計(jì)算機(jī)原理69S0700002劉方晨C004C語言程序設(shè)計(jì)87S0700002劉方晨C005數(shù)據(jù)結(jié)構(gòu)77S0700002劉方晨C007操作系統(tǒng)90S0700003王紅敏C001高等數(shù)學(xué)46S0700003王紅敏C002離散數(shù)學(xué)38S0700003王紅敏C007操作系統(tǒng)50出現(xiàn)的問題冗余存儲(chǔ):學(xué)生姓名和課程名被重復(fù)存儲(chǔ)多次;更新異常:當(dāng)修改某學(xué)生的姓名或某課程的課程名時(shí),可能只修改了部分?jǐn)?shù)據(jù);插入異常:如果某學(xué)生沒有選修課程,或某門課程未被任何學(xué)生選修時(shí),則該學(xué)生或該課程信息不能存入數(shù)據(jù)庫,因?yàn)橹鞔a值不能為空;刪除異常:當(dāng)一學(xué)生的所有選修課程信息都被刪除時(shí),則該學(xué)生的信息將被丟失。對(duì)課程也是如此。*7數(shù)據(jù)冗余帶來的問題冗余存儲(chǔ):信息被重復(fù)存儲(chǔ),導(dǎo)致浪費(fèi)大量存儲(chǔ)空間。更新異常:當(dāng)重復(fù)信息的一個(gè)副本被修改,所有副本都必須進(jìn)行同樣的修改。插入異常:只有當(dāng)一些信息事先已經(jīng)存放在數(shù)據(jù)庫中時(shí),另外一些信息才能存入數(shù)據(jù)庫中。刪除異常:刪除某些信息時(shí)可能丟失其它信息。*8數(shù)據(jù)冗余產(chǎn)生原因及解決方法產(chǎn)生問題的原因:該模式中某些屬性之間存在依賴關(guān)系studentNo→studentName(即學(xué)號(hào)決定姓名)courseNo→courseName(即課程編號(hào)決定課程名稱){studentNo,courseNo}→score解決方法:將一個(gè)關(guān)系模式分解為較小的關(guān)系模式。上例分解為三個(gè)關(guān)系模式

S(studentNo,studentName)C(courseNo,courseName)E(studentNo,courseNo,score)*9如何分解[例5.2]設(shè)一關(guān)系模式STU(studentNo,studentName,sex,birthday,native,classNo),其中studentNo為主碼。假設(shè)將STU分解為以下兩個(gè)子模式:STU1(studentNo,studentName)STU2(studentName,sex,birthday,native,classNo)分解后會(huì)發(fā)生什么問題?*10studentNostudnetNamesexbirthdaynativeclassNoS0700005王紅男1992-4-26江西省南昌市CS0702S0800005王紅女1995-8-10湖北省武漢市CP0802studentNostudnetNameS0700005王紅S0800005王紅studnetNamesexbirthdaynativeclassNo王紅男1992-4-26江西省南昌市CS0702王紅女1995-8-10湖北省武漢市CP0802studentNostudnetNameSexbirthdaynativeclassNoS0700005王紅男1992-4-26江西省南昌市CS0702S0700005王紅女1995-8-10湖北省武漢市CP0802S0800005王紅男1992-4-26江西省南昌市CS0702S0800005王紅女1995-8-10湖北省武漢市CP0802*11模式分解存在的問題有損分解:兩個(gè)分解后的關(guān)系通過連接運(yùn)算還原得到的信息與原來關(guān)系的信息不一致。如果能夠通過連接分解后所得到的較小關(guān)系完全還原被分解關(guān)系的所有實(shí)例,稱之為無損分解(losslessdecomposition),也稱該分解具有無損連接特性。依賴關(guān)系丟失:sex、birthday、age、native、classNo等與屬性studentNo依賴關(guān)系不再存在。如果被分解關(guān)系模式上的所有依賴關(guān)系都在分解得到的關(guān)系模式上保留,稱該分解為保持依賴分解。一個(gè)“好”的關(guān)系模式數(shù)據(jù)冗余盡可能少不發(fā)生插入異常、刪除異常、更新異常等問題。模式分解時(shí),分解后的模式應(yīng)具有無損連接、保持依賴等特性。*13問題?為什么模式分解能解決數(shù)據(jù)冗余問題?什么樣的關(guān)系模式需要進(jìn)一步分解?是否所有的模式分解都是有益的?如何分解?*142、函數(shù)依賴與碼2.1函數(shù)依賴定義函數(shù)依賴(functionaldependency,簡稱FD):

一種完整性約束,是事物屬性之間的一種制約關(guān)系。定義5.1設(shè)r(R)為關(guān)系模式,屬性集R,R。對(duì)任意合法關(guān)系r及其中任兩個(gè)元組ti和tj,ij,當(dāng)ti[]=tj[]時(shí),則ti[]=tj[],則稱函數(shù)確定或函數(shù)依賴于,記作。函數(shù)依賴圖*16返回例如圖所示的是滿足函數(shù)依賴ABC的關(guān)系模式r(A,B,C,D)的一個(gè)關(guān)系實(shí)例。對(duì)于任意兩個(gè)在屬性集{A,B}上取值相同的元組,它們?cè)趯傩訡上的取值也相同。ABCDa1b1c1d1a1b1c1d2a1b2c2d1a2b1c3d1

滿足函數(shù)依賴ABC的一個(gè)關(guān)系實(shí)例問:如果在圖中再增加一個(gè)元組(a1,b1,c2,

d1),ABC

還成立嗎?函數(shù)依賴說明函數(shù)依賴指關(guān)系模式r(R)的所有關(guān)系實(shí)例均要滿足的約束條件。函數(shù)依賴是語義范疇的概念,只能根據(jù)數(shù)據(jù)的語義來確定函數(shù)依賴,是不能夠被證明的。數(shù)據(jù)庫設(shè)計(jì)者可以對(duì)現(xiàn)實(shí)世界作強(qiáng)制的規(guī)定。碼約束是函數(shù)依賴的一個(gè)特例。碼屬性(集)相當(dāng)于定義“”中的,關(guān)系中的所有屬性相當(dāng)于定義。*182.2平凡與非平凡函數(shù)依賴定義5.2

在關(guān)系模式r(R)中,R,R。若,但,則稱是非平凡函數(shù)依賴。否則,若,則稱是平凡函數(shù)依賴。對(duì)于任一關(guān)系模式,平凡函數(shù)依賴總是成立的。(a)非平凡函數(shù)依賴(b)平凡函數(shù)依賴*192.3完全函數(shù)依賴和部分函數(shù)依賴定義5.3

在關(guān)系模式r(R)中,R,R,且。若對(duì)任意的,都不成立,則稱是完全函數(shù)依賴,簡稱完全依賴,記作

F

。當(dāng)是單屬性時(shí),則完全函數(shù)依賴總是成立的。否則,若存在非空的,且成立,則稱是部分函數(shù)依賴,簡稱部分依賴,記作

P

。部分依賴可能會(huì)導(dǎo)致數(shù)據(jù)冗余及產(chǎn)生各種異常。*20舉例例如,在關(guān)系SCESCE(studentNo,courseNo, studentName,courseName,score)中完全依賴:studentNostudentNamecourseNocourseName{studentNo,courseNo}score部分依賴:{studentNo,courseNo}studentName{studentNo,courseNo}courseName*212.4傳遞函數(shù)依賴定義5.4

在關(guān)系模式r(R)中,R,R,,R。若,,,則必存在函數(shù)依賴,并稱是傳遞函數(shù)依賴,簡稱傳遞依賴,→。與部分依賴一樣,傳遞依賴也可能會(huì)導(dǎo)致數(shù)據(jù)冗余及產(chǎn)生各種異常。傳遞*22傳遞[例5.4]關(guān)系模式SCI(studentNo,classNo,institute)存在下列函數(shù)依賴:studentNoclassNoinstitutestudentNoinstitute(傳遞函數(shù)依賴)關(guān)系模式SCI中存在傳遞依賴studentNoinstitute,因此可能導(dǎo)致數(shù)據(jù)冗余、更新異常、插入異常及刪除異常(p166)。*232.5碼定義

設(shè)K為R<U,F>中的屬性或?qū)傩越M合。若K

U,則K稱為R的侯選碼(CandidateKey)。候選碼多于一個(gè),則選定其中的一個(gè)做為主碼(PrimaryKey)。侯選碼的超集稱為超碼。F*24主屬性與非主屬性主屬性(Primeattribute):包含在任何一個(gè)候選碼中的屬性。非主屬性(非碼屬性):不包含在任何碼中的屬性全碼:整個(gè)屬性組是碼,稱為全碼(All-key)*25例:Student(StudentNo,sex,native)中:單個(gè)屬性StudentNo是碼,StudentNo是主屬性。SC(StudentNo,CourseNo,score):(StudentNo,CourseNo)是碼,StudentNo是主屬性,score是非主屬性。關(guān)系模式R(P,W,A)。其中

P:演奏者W:作品A:聽眾一個(gè)演奏者可以演奏多個(gè)作品某一作品可被多個(gè)演奏者演奏聽眾可以欣賞不同演奏者的不同作品碼為(P,W,A),即All-Key*262.6外部碼定義

關(guān)系模式R中屬性或?qū)傩越MX并非R的碼,但X是另一個(gè)關(guān)系模式S的碼,則稱X是R的外部碼(Foreignkey)也稱外碼如在SC(StudentNo,CourseNo,score)中,StudentNo不是碼,但StudentNo是關(guān)系模式Student(StudentNo,sex,native)的碼,則StudentNo是關(guān)系模式SC的外部碼

主碼與外部碼一起提供了表示關(guān)系間聯(lián)系的手段*273、函數(shù)依賴?yán)碚?283.1函數(shù)依賴集閉包對(duì)于給定關(guān)系模式r(R)及其函數(shù)依賴集F,需要考慮在r(R)上總是成立的所有函數(shù)依賴。[例5.5]

給定關(guān)系模式r(R)=r(A,B,C)及函數(shù)依賴集F={AB,BC},證明AC成立。證明:假設(shè)對(duì)于關(guān)系實(shí)例r中的任意元組ti,tj,ij,滿足ti[A]=tj[A]。由于存在AB,則可推出ti[B]=tj[B]。又由于BC,則又可推出ti[C]=tj[C]。因此,ti[A]=tj[A]

ti[C]=tj[C]。按定義5.1有AC。證畢。函數(shù)依賴集閉包定義5.5

若給定函數(shù)依賴集F,可以證明其他函數(shù)依賴也成立,則稱這些函數(shù)依賴被F邏輯蘊(yùn)涵。定義5.6

令F為一函數(shù)依賴集,F(xiàn)邏輯蘊(yùn)涵的所有函數(shù)依賴組成的集合稱為F的閉包,記為F+。函數(shù)依賴集F的閉包計(jì)算方法Armstrong公理的推理規(guī)則Armstrong公理及推論Armstrong公理自反律(reflexivityrule):若存在,則有增補(bǔ)律(augmentationrule):若存在,則有傳遞律(transitivityrule):若存在且,則有Armstrong公理三個(gè)推論合并律(unionrule):若有且,則有分解律(decompositionrule):若有,則有和偽傳遞律(pseudotransitivityrule):若有且,則有函數(shù)依賴集閉包計(jì)算舉例[例5.6]

令r(R)=r(A,B,C,G,H,I),函數(shù)依賴集F={AB,AC,CGH,CGI,BH},計(jì)算F+中的依賴。由傳遞律可得AH,因?yàn)锳B且BH;由合并律可得CGHI,因?yàn)镃GH,CGI;由偽傳遞律可得AGI,因?yàn)锳C且CGI。還可以使用上述規(guī)則推導(dǎo)出更多的函數(shù)依賴。

3.2屬性集閉包定義5.7令r(R)為關(guān)系模式,F(xiàn)為函數(shù)依賴集,屬性集AR,則稱在函數(shù)依賴集F下由A函數(shù)確定的所有屬性的集合為F下A的閉包,記為A+。屬性集閉包計(jì)算舉例[例5.7]r(R)=r(A,B,C,G,H,I),

F={AB,AC,CGH,CGI,BH},計(jì)算(AG)+。

算法:

步驟

FD

closure

1.初值A(chǔ)G2.

ABABG3.ACABCG4.CGHABCGH5.CGIABCGHI6.BHABCGHI第一次循環(huán)結(jié)果:closure=ABCGHI。算法第二次循環(huán)后的結(jié)果為closure=ABCGHI,沒有變化,算法終止。屬性集AG的閉包:(AG)+=ABCGHI。計(jì)算屬性集閉包的作用驗(yàn)證是否在F+中:看是否有+。判斷是否為r(R)的超碼:通過計(jì)算+,看其是否包含R的所有屬性。例如,(AG)+=ABCGHI,則AG為r(R)的超碼。判斷是否為r(R)的候選碼:若是超碼,可檢驗(yàn)包含的所有子集的閉包是否包含R的所有屬性。若不存在任何這樣的屬性子集,則是r(R)的候選碼。計(jì)算F+。對(duì)于任意R,可通過找出+,對(duì)任意的S+,可輸出一個(gè)S。判斷屬性集是否為候選碼舉例[例5.8]

r(R)和F定義同例5.7,判斷AG是否為r(R)的候選碼。例5.7已計(jì)算出(AG)+=ABCGHI,則還要進(jìn)一步分別計(jì)算A+和G+。經(jīng)計(jì)算得,A+=ABCH、G+=G,它們都不包含R的所有屬性。因此,AG為r(R)的候選碼。3.3無關(guān)屬性定義5.8

給定函數(shù)依賴集F及→F,如果去除或的一個(gè)屬性不會(huì)改變F+,則稱該屬性是無關(guān)的。定義5.9

給定函數(shù)依賴集F及→F,若A,且F邏輯蘊(yùn)涵(F-{→}){(-A)

}(即,沒有產(chǎn)生新的函數(shù)依賴),則屬性A在中是無關(guān)的(左無關(guān))。定義5.10

給定函數(shù)依賴集F及→F,若A,且(F-{}){((-A)}邏輯蘊(yùn)涵F,則屬性A在中是無關(guān)的(右無關(guān))。

(-A)

=>

[例5.9]設(shè)F={AB→CD,A→E,E→C},證明C在AB→CD中為無關(guān)屬性。證明:步驟:計(jì)算F'F‘={AB→D,A→E,E→C}下(AB)+:(AB)+=ABCDE;所以,F(xiàn)‘邏輯蘊(yùn)含AB→CD,即F‘邏輯蘊(yùn)含F(xiàn)。因此,C是AB→CD中的無關(guān)屬性。證畢。無關(guān)屬性檢測算法(p169圖5-9)思路:

由于C是AB→CD依賴關(guān)系中的右邊屬性,需證明F‘={AB→D,A→E,E→C}邏輯蘊(yùn)含F(xiàn),即證明F‘邏輯蘊(yùn)含F(xiàn)’中沒有的函數(shù)依賴:AB→CD3.4正則覆蓋定義5.11

正則覆蓋(canonicalcover)Fc是一個(gè)依賴集,使得F邏輯蘊(yùn)涵Fc中的所有依賴,F(xiàn)c邏輯蘊(yùn)涵F中的所有依賴,而且必須具有下列特性:Fc中的任何函數(shù)依賴都不包含無關(guān)屬性;Fc中函數(shù)依賴的左半部都是唯一的,即Fc中不存在兩個(gè)依賴1→1和1→2。計(jì)算F的正則覆蓋Fc的步驟合并函數(shù)依賴將F中所有形如1→1、1→2的函數(shù)依賴合并為1→12,得到新函數(shù)依賴集F'。去除無關(guān)屬性對(duì)F'中的每個(gè)函數(shù)依賴,依次判斷是否包含無關(guān)屬性。若發(fā)現(xiàn)無關(guān)屬性,則用去除無關(guān)屬性后的函數(shù)依賴代替F'中的原函數(shù)依賴。*40關(guān)于驗(yàn)證無關(guān)屬性的方法左屬性無關(guān)算去掉驗(yàn)證屬性的左屬性集閉包包含右,則無關(guān)*41算左看右右屬性無關(guān)去掉驗(yàn)證屬性,得F’算左屬性集閉包包含原右,則無關(guān)計(jì)算正則覆蓋舉例[例5.10]考慮關(guān)系模式r(R)=r(A,B,C)和函數(shù)依賴集F={A→BC,B→C,A→B,AB→C},計(jì)算F的正則覆蓋Fc。解題步驟合并函數(shù)依賴:將A→BC和A→B合并為A→BC。

F'={A→BC,B→C,AB→C}。去除無關(guān)屬性:對(duì)于AB→C,根據(jù)圖5-9(a)的算法可檢測A是無關(guān)的。因此,去除無關(guān)屬性A后,AB→C變?yōu)锽→C,而B→C已在F'中存在,則F'={B→C,A→BC}。對(duì)于B→C,由于其左右兩邊都為單屬性,故不存在無關(guān)屬性。對(duì)于A→BC,根據(jù)圖5-9(b)的算法可檢測C是無關(guān)的。因此,去除無關(guān)屬性C后,A→BC變?yōu)锳→B,則F'={B→C,A→B}。F'中的函數(shù)依賴左半部都是唯一的,且都不存在無關(guān)屬性,因此Fc={B→C,A→B}。*43正則覆蓋說明Fc與F具有相同的閉包;Fc不包含無關(guān)屬性,每個(gè)依賴是最小的,且是必要的;正則覆蓋不一定唯一。函數(shù)依賴小結(jié)函數(shù)依賴是指關(guān)系模式中屬性之間存在的一種約束關(guān)系這種約束關(guān)系既可以是現(xiàn)實(shí)世界事物或聯(lián)系的屬性之間客觀存在的約束,也可以是數(shù)據(jù)庫設(shè)計(jì)者根據(jù)應(yīng)用需求或設(shè)計(jì)需要強(qiáng)加給數(shù)據(jù)的一種約束。正確了解數(shù)據(jù)的意義及確定屬性之間的函數(shù)依賴關(guān)系,對(duì)設(shè)計(jì)一個(gè)好的關(guān)系模式是十分重要的。*454、設(shè)計(jì)范式(規(guī)范化)*46

范式概述范式是符合某一種級(jí)別的關(guān)系模式的集合關(guān)系數(shù)據(jù)庫中的關(guān)系必須滿足一定的要求。滿足不同程度要求的為不同范式范式的種類:

*47第一范式(1NF)第二范式(2NF)第三范式(3NF)BC范式(BCNF)第四范式(4NF)第五范式(5NF)各種范式之間存在聯(lián)系某一關(guān)系模式R為第n范式,可簡記為R∈nNF。一個(gè)低一級(jí)范式的關(guān)系模式,通過模式分解可以轉(zhuǎn)換為若干個(gè)高一級(jí)范式的關(guān)系模式的集合,這種過程就叫規(guī)范化

*484.1第一范式(1NF)——碼定義5.16

如果一關(guān)系模式r(R)的每個(gè)屬性對(duì)應(yīng)的域值都是不可分的(即原子的),則稱r(R)屬于第一范式,記為r(R)1NF。第一范式的目標(biāo)是:將基本數(shù)據(jù)劃分成稱為實(shí)體集或表的邏輯單元,當(dāng)設(shè)計(jì)好每個(gè)實(shí)體后,需要為其指定主碼。studentNostudentNamesexbirthdayageaddressclassNoprovincecitystreet圖5-10非規(guī)范化的關(guān)系模式studentNostudentNamesexbirthdayageprovincecitystreetclassNo圖5-111NF規(guī)范化后的關(guān)系模式問題:例4.1(參考教材p175)關(guān)系模式S-L-C(Sno,Cno,Sdept,Sloc,Score),Sloc為學(xué)生住處假設(shè):,假設(shè)每個(gè)系的學(xué)生住在同一個(gè)地方。關(guān)系S-L-C的碼為(Sno,Cno)關(guān)系S-L-C滿足第一范式。*50非主屬性Sdept和Sloc部分函數(shù)依賴于碼(Sno,Cno)*51函數(shù)依賴包括:(Sno,Cno)FScoreSno→Sdept(Sno,Cno)PSdeptSno→Sloc(Sno,Cno)PSlocSdept→Sloc...出現(xiàn)的問題:(1)插入異常:未選課的學(xué)生無法加入。(2)刪除異常:只選一門課的學(xué)生取消選擇時(shí),該學(xué)生信息(元組)被刪除。(3)數(shù)據(jù)冗余度大:多選課時(shí),學(xué)生信息多次錄入。(4)修改復(fù)雜:學(xué)生轉(zhuǎn)系時(shí),需多處修改Sloc。*52原因:

Sdept、Sloc部分依賴于碼4.2第二范式(2NF)——全部碼定義5.18

若R∈1NF,且每一個(gè)非主屬性完全函數(shù)依賴于碼,則R∈2NF。第二范式的目標(biāo)是:將只部分依賴于主碼(即依賴于主碼的部分屬性)的數(shù)據(jù)移到其他表中。在滿足第一范式的實(shí)體中,如果有復(fù)合主碼(即多個(gè)屬性共同構(gòu)成主碼),那么所有非主屬性必須依賴于全部的主碼,而不能只是依賴于部分的主碼屬性。違背了2NF的模式,即存在非主屬性對(duì)候選碼的部分依賴,則可能導(dǎo)致例5.1所述的數(shù)據(jù)冗余及異常問題*53修改例4.1*54SnoCnoScoreSCS-LSnoSdeptSloc

S-L-C分解為兩個(gè)關(guān)系模式,以消除這些部分函數(shù)依賴SC(Sno,Cno,Score)S-L(Sno,Sdept,Sloc)關(guān)系模式SC的碼為(Sno,Cno)關(guān)系模式S-L的碼為Sno非主屬性對(duì)碼都是完全函數(shù)依賴;

SC∈2NF、S-L∈2NF函數(shù)依賴圖問題:如果學(xué)生轉(zhuǎn)系,或某系更換住處,會(huì)發(fā)生什么情況?*55S-LSnoSdeptSloc函數(shù)依賴:

Sno→SdeptSdept→Sloc

Sno→Sloc,即S-L中存在非主屬性對(duì)碼的傳遞函數(shù)依賴4.3第三范式(3NF)——僅僅是碼定義

關(guān)系模式R(U,F(xiàn))

中若不存在這樣的碼X、屬性組Y及非主屬性Z(ZY),使得X→Y,Y→Z成立,

Y→X,則稱R(U,F(xiàn))∈3NF。若R∈3NF,則每一個(gè)非主屬性既不部分依賴于碼也不傳遞依賴于碼。*56第三范式的目標(biāo)是:去掉表中不依賴于主碼的數(shù)據(jù)。在滿足第二范式的實(shí)體中,非主屬性不能依賴于另一個(gè)非主屬性,即所有的非主屬性應(yīng)該直接依賴于全部的主屬性(即必須完全依賴,這是2NF的要求),并且彼此之間無相互依賴關(guān)系(即不能存在部分依賴,這是3NF的要求)。換一句話說,非主屬性不能包括它們自己的屬性,如果屬性不包括屬性,則它們就是真正的實(shí)體。*57例3NF解決辦法采用投影分解法(以決定性的非主屬性為碼),把S-L分解為兩個(gè)關(guān)系模式,以消除傳遞函數(shù)依賴:S-D(Sno,Sdept)D-L(Sdept,Sloc)S-D的碼為Sno,D-L的碼為Sdept。分解后的關(guān)系模式S-D與D-L中不再存在傳遞依賴*58SnoSdeptS-DSdeptSlocD-L問題:在關(guān)系模式STJ(S,T,J)中,S表示學(xué)生,T表示教師,J表示課程。每個(gè)教師只教一門課。每門課有若干教師,某一學(xué)生選定某門課,就對(duì)應(yīng)一個(gè)固定的教師。函數(shù)依賴:(S,J)→T,(S,T)→J,T→J(S,J)和(S,T)是候選碼∵一個(gè)非主屬性都沒有∴R∈3NF*59SJTSTJ問題:插入異常:(無法存放沒有選的課和老師)刪除異常:(刪除選課信息時(shí),丟失課程和老師的對(duì)應(yīng)信息)修改復(fù)雜:(如修改課程對(duì)應(yīng)的老師)*60BCNFBCNF是由Boyce和Codd提出的,比3NF又進(jìn)了一步,通常認(rèn)為是修正的第三范式.定義5.19

給定關(guān)系模式r(R)及函數(shù)依賴集F,若F+中的所有函數(shù)依賴

(R,R)至少滿足下列條件之一:是平凡函數(shù)依賴(即);是r(R)的一個(gè)超碼(

+包含R的全部屬性,起決定作用的屬性必須是超碼)。則稱r(R)屬于Boyce-Codd范式,記為r(R)BCNF。即:*61推論在關(guān)系模式r(R)中,如果F+中的每一個(gè)非平凡函數(shù)依賴的決定屬性集都包含候選碼,則r(R)BCNF。所有非主屬性對(duì)每一個(gè)碼都是完全函數(shù)依賴(3NF)所有的主屬性對(duì)每一個(gè)不包含它的碼都是完全函數(shù)依賴沒有任何屬性完全函數(shù)依賴于非碼的一組屬性*623NF的問題函數(shù)依賴:(S,J)→T,(S,T)→J,T→J(每個(gè)教師只教一門課)(S,J)和(S,T)是候選碼主屬性J部分依賴碼(S,T)解決方法:可分解為ST(S,T)與TJ(T,J)它們都是BCNF。*63BC范式判斷舉例[例5.13]

r(R)=r(A,B,C),F(xiàn)={A→B,B→C},候選碼為A。r(R)BCNF,因?yàn)楹瘮?shù)依賴B→C中的決定屬性B不是超碼。[例5.14]

r(R)=r(A,B,C),候選碼為AB或BC,F(xiàn)={AB→C,C→A}。r(R)BCNF,因?yàn)镃→A的決定屬性C不是超碼。[例5.15]

r(R)=r(A,B,C),F(xiàn)={AB→C,BC→A}。候選碼為AB或BC。r(R)BCNF,因?yàn)閮蓚€(gè)函數(shù)依賴中的決定屬性AB或BC都是r(R)的候選碼。*643NF與BCNF比較BCNF比3NF嚴(yán)格。BCNF要求所有的非平凡函數(shù)依賴中的是超碼,而3NF則放松了該約束,允許不是超碼。若關(guān)系模式屬于BCNF范式就一定屬于3NF范式。反之,則不一定成立。3NF存在數(shù)據(jù)冗余和異常問題,而BCNF是基于函數(shù)依賴?yán)碚撃軌蜻_(dá)到的最好關(guān)系模式。*65關(guān)系模式規(guī)范化的基本步驟*66規(guī)范化小結(jié)規(guī)范化程度越高的關(guān)系模式不一定就越好在設(shè)計(jì)數(shù)據(jù)庫模式結(jié)構(gòu)時(shí),必須對(duì)現(xiàn)實(shí)世界的實(shí)際情況和用戶應(yīng)用需求作進(jìn)一步分析,確定一個(gè)合適的、能夠反映現(xiàn)實(shí)世界的模式上面的規(guī)范化步驟可以在其中任何一步終止*675、模式的分解5.1無損連接分解5.2保持依賴分解模式的分解的概念把低一級(jí)的關(guān)系模式分解為若干個(gè)高一級(jí)的關(guān)系模式的方法不是唯一的只有能夠保證分解后的關(guān)系模式與原關(guān)系模式等價(jià),分解方法才有意義即:分解既要保持函數(shù)依賴,又要具有無損連接性*695.1無損連接分解定義5.12

給定關(guān)系模式r(R)及函數(shù)依賴集F,若r(R)的任意一個(gè)滿足函數(shù)依賴集F的關(guān)系實(shí)例r都有

=r,其中r1(R1)、r2(R2)分別為分解后的子模式,則稱該分解對(duì)于F是無損連接的。無損連接分解能夠根據(jù)分解后的關(guān)系通過連接來還原原來的關(guān)系實(shí)例。具有無損連接性的分解保證不丟失信息.如何判定一分解是否是無損的?*70無損連接分解判斷方法定義5.13

給定關(guān)系模式r(R)及函數(shù)依賴集F,則將r(R)分解成r1(R1)、r2(R2)的分解是無損連接分解,當(dāng)且僅當(dāng)F+包含函數(shù)依賴R1R2→R1或R1R2→R2。即,當(dāng)一個(gè)關(guān)系模式分解為兩個(gè)關(guān)系模式時(shí),該分解為無損連接分解的充要條件是兩分解關(guān)系的公共屬性包含r1(R1)的碼或r2(R2)的碼。*715.2保持依賴分解[例5.12]

設(shè)關(guān)系模式r(R)=r(A,B,C),F(xiàn)={AB,BC},有兩種分解:r1(R1)=r1(A,B)、r2(R2)

=r2(B,C)r1(R1)=r1(A,B)、r2(R2)=r2(A,C)。分解1是保持依賴分解;分解2不是保持依賴分解(函數(shù)依賴BC丟失)因?yàn)榉纸夂?,函?shù)依賴BC既不能從F在R1的投影F1中推導(dǎo)出來,也不能從F在R2的投影F2中推導(dǎo)出來。*726、模式求精*73定義模式求精:運(yùn)用關(guān)系理論(如函數(shù)依賴?yán)碚?、多值依賴?yán)碚摰?對(duì)已有關(guān)系模式進(jìn)行結(jié)構(gòu)調(diào)整、分解、合并和優(yōu)化,以滿足應(yīng)用系統(tǒng)的功能及性能等需求。模式求精步驟基于函數(shù)依賴?yán)碚摰哪J角缶襟E:確定函數(shù)依賴。確定關(guān)系模式所屬范式。分析是否滿足應(yīng)用需求。模式分解。根據(jù)范式要求(是選擇BCNF還是3NF),運(yùn)用規(guī)范化方法將關(guān)系模式分解成所要

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論