設(shè)計(jì)理論2函數(shù)依賴與范式zff分析_第1頁
設(shè)計(jì)理論2函數(shù)依賴與范式zff分析_第2頁
設(shè)計(jì)理論2函數(shù)依賴與范式zff分析_第3頁
設(shè)計(jì)理論2函數(shù)依賴與范式zff分析_第4頁
設(shè)計(jì)理論2函數(shù)依賴與范式zff分析_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

設(shè)計(jì)理論2

函數(shù)依賴與范式目錄1、規(guī)范化問題的提出2、函數(shù)依賴3、范式4、關(guān)系模式的分解1、規(guī)范化問題的提出在關(guān)系數(shù)據(jù)庫系統(tǒng)中,關(guān)系模型包括一組關(guān)系模式,并且各個(gè)關(guān)系不是完全孤立的。如何設(shè)計(jì)一個(gè)合適的關(guān)系數(shù)據(jù)庫系統(tǒng),關(guān)鍵是關(guān)系數(shù)據(jù)庫模式的設(shè)計(jì),一個(gè)好的關(guān)系數(shù)據(jù)庫模式應(yīng)該包括多少關(guān)系模式,而每一個(gè)關(guān)系模式又應(yīng)該包括哪些屬性,又如何將這些相互關(guān)聯(lián)的關(guān)系模式組建成一個(gè)適合的關(guān)系模型,這些工作決定了整個(gè)系統(tǒng)運(yùn)行的效率。也是系統(tǒng)成敗的關(guān)鍵所在,所以必須在關(guān)系數(shù)據(jù)庫的規(guī)范化理論的指導(dǎo)下逐步完成。關(guān)系數(shù)據(jù)庫的規(guī)范化理論最早是由關(guān)系數(shù)據(jù)庫的創(chuàng)始人E.F.Codd提出的,后經(jīng)許多專家學(xué)者對(duì)關(guān)系數(shù)據(jù)庫理論作了深入的研究和發(fā)展,形成了一整套有關(guān)關(guān)系數(shù)據(jù)庫設(shè)計(jì)的理論。關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論對(duì)數(shù)據(jù)庫邏輯設(shè)計(jì)有重要的指導(dǎo)作用,它主要包括三個(gè)方面的內(nèi)容:數(shù)據(jù)依賴、范式和模式設(shè)計(jì)方法,其中數(shù)據(jù)依賴起著核心作用。例子要求設(shè)計(jì)教學(xué)管理數(shù)據(jù)庫,其關(guān)系模式,SCD如下:SCD(SNO,SN,AGE,DEPT,MN,CNO,SCORE)其中SNO表示學(xué)生學(xué)號(hào),SN表示學(xué)生姓名,

AGE表示學(xué)生年齡,DEPT表示學(xué)生所在系別,

MN表示系主任姓名,CNO表示課程號(hào),

SCORE表示成績。SNOSNAGEDEPTMNCNOSCORES1趙軍17計(jì)算機(jī)劉軍航C190S1趙軍17計(jì)算機(jī)劉軍航C285S2錢進(jìn)18信息王平C557S2錢進(jìn)18信息王平C680S2錢進(jìn)18信息王平C7

S2錢進(jìn)18信息王平C470S3張偉20信息王平C10S3張偉20信息王平C270S3張偉20信息王平C485S4李平20自動(dòng)化劉軍航C193(1)

一個(gè)系有若干個(gè)學(xué)生,但一個(gè)學(xué)生只屬于一個(gè)系;(2)

一個(gè)系只有一名系主任,但一個(gè)系主任可以同時(shí)兼幾個(gè)系的系主任;(3)

一個(gè)學(xué)生可以選修多門功課,每門課程可被若干個(gè)學(xué)生選修;(4)每個(gè)學(xué)生學(xué)習(xí)的課程有一個(gè)成績。在此關(guān)系模式中填入一部分具體的數(shù)據(jù),則可得到SCD關(guān)系模式的實(shí)例,即一個(gè)教學(xué)管理數(shù)據(jù)庫,如下圖所示。

SNOSNAGEDEPTMNCNOSCORES1趙軍17計(jì)算機(jī)劉軍航C190S1趙軍17計(jì)算機(jī)劉軍航C285S2錢進(jìn)18信息王平C557S2錢進(jìn)18信息王平C680S2錢進(jìn)18信息王平C7

S2錢進(jìn)18信息王平C470S3張偉20信息王平C10S3張偉20信息王平C270S3張偉20信息王平C485S4李平20自動(dòng)化劉軍航C193根據(jù)實(shí)際情況,這些數(shù)據(jù)有以下語義規(guī)定:

根據(jù)上述的語義規(guī)定并分析以上關(guān)系中的數(shù)據(jù),我們可以看出,(SNO,CNO)屬性的組合能唯一標(biāo)識(shí)一個(gè)元組,所以(SNO,CNO)是該關(guān)系模式的主鍵。但在進(jìn)行數(shù)據(jù)庫的操作時(shí),會(huì)出現(xiàn)以下幾方面的問題。(1)數(shù)據(jù)冗余。每個(gè)系名和系主任的名字存儲(chǔ)的次數(shù)等于該系的學(xué)生人數(shù)乘以每個(gè)學(xué)生選修的課程,同時(shí)學(xué)生的姓名、年齡也都要重復(fù)存儲(chǔ)多次,數(shù)據(jù)的冗余度很大,浪費(fèi)了存儲(chǔ)空間。(2)插入異常。如果某個(gè)新系沒有招生,尚無學(xué)生時(shí),則系名和系主任的信息無法插入到數(shù)據(jù)庫中。因?yàn)樵谶@個(gè)關(guān)系模式中,(SNO,CNO)是主關(guān)系鍵。根據(jù)關(guān)系的實(shí)體完整性約束,組關(guān)系鍵的值不能為空,而這時(shí)沒有學(xué)生,SNO和CNO均無值,因此不能進(jìn)行插入操作,另外,當(dāng)某個(gè)學(xué)生尚未選課,即CNO未知,實(shí)體完整性約束還對(duì)規(guī)定,主關(guān)系鍵的值不能部分為空,同樣也不能進(jìn)行插入操作。(3)刪除異常。當(dāng)某系學(xué)生全部畢業(yè)而沒有招生后時(shí),要?jiǎng)h除全部學(xué)生的信息,這時(shí)系名、系主任也隨之刪除,而現(xiàn)實(shí)是這個(gè)系仍然存在,但在數(shù)據(jù)庫中卻無法找到該系的信息。另外,如果某個(gè)學(xué)生不再選修C1

課程,本應(yīng)該只刪去C1,但C1是主關(guān)系鍵的一部分,為保證實(shí)體完整性,必須將整個(gè)元組一起刪掉,這樣,有關(guān)學(xué)生的所有句路的其他信息也隨之丟失。(4)更新異常。如果某學(xué)生改名,則該學(xué)生的所有記錄都要逐一修改SN的值;又如某系更換系主任,則屬于該系的學(xué)生記錄都要修改MN的內(nèi)容,稍有不慎,就有可能漏改某些記錄,這就會(huì)造成數(shù)據(jù)庫的不一致性,破壞了數(shù)據(jù)的完整性。

由于存在以上問題,我們說,SCD是一個(gè)不好的關(guān)系模式。產(chǎn)生上述問題的原因,直觀地說,是因?yàn)殛P(guān)系中“包羅萬象”,內(nèi)容太復(fù)雜了。那么,怎樣才能得到一個(gè)好的關(guān)系模式呢?我們把關(guān)系模式SCD分解為

學(xué)生關(guān)系S(SNO,SN,AGE,DEPT)選修課SC(SNO,CNO,SCORE)系關(guān)系D(DEPT,MN)三個(gè)結(jié)構(gòu)簡單的關(guān)系模式。SNOSNAGEDEPTS1趙軍17計(jì)算機(jī)S2錢進(jìn)18信息S3張偉20信息S4李平21自動(dòng)化如下圖所示SSNOCNOSCORES1C190S1C285S2C557S2C680S2C7

S2C470S3C10S3C270S3C485S4C193DEPTMN計(jì)算機(jī)劉軍航信息王平自動(dòng)化劉軍航SCD在以上三個(gè)關(guān)系模式中,實(shí)現(xiàn)了信息的某種程度的分離:S中存學(xué)生基本信息,與所選課程及系主任無關(guān)D中存儲(chǔ)系的有關(guān)信息,與學(xué)生無關(guān)SC中存儲(chǔ)的學(xué)生選課的信息,而與學(xué)生及系的有關(guān)信息無關(guān)與SCD相比,分解為三個(gè)關(guān)系模式后,數(shù)據(jù)的冗余程度明顯降低。同時(shí),由于數(shù)據(jù)冗余度的降低,數(shù)據(jù)沒有重復(fù)存儲(chǔ),也不會(huì)引起更新異常。當(dāng)新插入一個(gè)系時(shí),只要在關(guān)系D中添加一個(gè)記錄就可以了;當(dāng)某個(gè)學(xué)生尚未選課時(shí),只要在關(guān)系S中添加一條學(xué)生記錄就可以了,而與選課關(guān)系無關(guān),這就避免了插入異常。當(dāng)一個(gè)系的學(xué)生全部畢業(yè)時(shí),只需在S中該系的全部學(xué)生記錄,而關(guān)系D中有關(guān)該系的信息仍然保留,從而不會(huì)引起異常刪除。經(jīng)過上述分析,我們說分解后的關(guān)系模式是一個(gè)好的關(guān)系數(shù)據(jù)庫模式。從而得出結(jié)論,一個(gè)好的關(guān)系模式應(yīng)該具備四個(gè)條件:(1)盡可能少的數(shù)據(jù)冗余(2)沒有插入異常(3)沒有刪除異常(4)沒有更新異常一個(gè)好的關(guān)系模式并不是在任何情況下都是最優(yōu)的,比如查詢某個(gè)學(xué)生選修課程名及所在系的系主任時(shí),要通過連接,而連接所需的系統(tǒng)開銷非常大,因此要以實(shí)際設(shè)計(jì)的目標(biāo)出發(fā)進(jìn)行設(shè)計(jì)。

注意2、函數(shù)依賴函數(shù)依賴普遍地存在于現(xiàn)實(shí)生活中比如,描述一個(gè)學(xué)生的關(guān)系,可以由學(xué)號(hào)(SNO)、姓名(SNAME)、年齡(AGE)等幾個(gè)屬性。由于一個(gè)學(xué)號(hào)只對(duì)應(yīng)一個(gè)學(xué)生,一個(gè)學(xué)生只有一個(gè)姓名和一個(gè)年齡。因而,當(dāng)“學(xué)號(hào)”值確定之后,姓名和年齡的值也就被唯一地確定了,就如同自變量x確定之后,相應(yīng)的函數(shù)值f(x)也就唯一確定了一樣,所以說SNO函數(shù)決定SNAME和AGE,或者說SAME、AGE函數(shù)依賴于SNO,記為SNO->SNAME,SNO->AGE。定義設(shè)R(U)是屬性集U上的關(guān)系模式,X與Y是U的子集,若對(duì)于R(U)的任意一個(gè)當(dāng)前值r,如果對(duì)r中的任意兩個(gè)元組t和s,都有t[X]≡s[X],就必須有t[Y]≡s[Y](即若它們?cè)赬上的屬性值相等,則在Y上的屬性值也一定相等),則稱“X”函數(shù)決定Y或“Y”函數(shù)依賴于X,記作X→Y,并稱X為決定因素這里t[X],s[X]分別表示元組t,s在屬性集X上的值,函數(shù)依賴是對(duì)關(guān)系R的一切可能的當(dāng)前值r定義的,不是針對(duì)某個(gè)特定關(guān)系,也就是說,對(duì)于X的每一個(gè)具體的值,都有惟一的Y值與之對(duì)應(yīng),即Y值由X值決定,因而這種數(shù)據(jù)依賴稱為函數(shù)依賴。符號(hào)表示:

(1)若X→Y,則X稱為決定因素。(2)若X→Y,Y→X,則記作X←→Y。(3)若Y不函數(shù)依賴于X,則記作X→Y。

\例子函數(shù)依賴是語義范疇的概念,根據(jù)語義來確定一個(gè)函數(shù)依賴。例如:姓名→年齡這個(gè)函數(shù)依賴只有在沒有同名人的條件下成立,如果允許有相同姓名,則年齡就不再依賴于姓名了,設(shè)計(jì)者也可以對(duì)現(xiàn)實(shí)世界作強(qiáng)制的規(guī)定。例如規(guī)定不允許同名人出現(xiàn),因而使“姓名->年齡函數(shù)依賴成立。這樣當(dāng)插入某個(gè)元組時(shí),這個(gè)元組上屬性值必須滿足規(guī)定的函數(shù)依賴,若發(fā)現(xiàn)有同名人存在,則拒絕插入該元組。但是如果沒有強(qiáng)制,那么我們就要尋找新的屬性了,比如身份證號(hào)->姓名。【例】有一個(gè)關(guān)系模式R(學(xué)號(hào),姓名,出生年月,系編號(hào),系負(fù)責(zé)人)。在R的關(guān)系r中,存在著如下函數(shù)依賴:學(xué)號(hào)→姓名(每個(gè)學(xué)號(hào)只能對(duì)應(yīng)一個(gè)出生年月);學(xué)號(hào)→出生年月(每個(gè)學(xué)生只能對(duì)應(yīng)一個(gè)出生年月);

系編號(hào)→系負(fù)責(zé)人(每個(gè)系只能有一名負(fù)責(zé)人)。分類和鍵函數(shù)依賴平凡函數(shù)依賴非平凡函數(shù)依賴完全函數(shù)依賴部分函數(shù)依賴傳遞函數(shù)依賴定義設(shè)X,Y均為某關(guān)系上的屬性集,且X→Y

若Y包含于X,則稱X→Y為:平凡函數(shù)依賴,若Y不包含于X,則稱X→Y為:非平凡函數(shù)依賴。定義在R(U)中,如果X→Y,并且對(duì)于X的任何一個(gè)真子集X’,都有

X’→Y,則稱Y對(duì)X完全函數(shù)依賴,記作XY。F【例】有一關(guān)系模式S(學(xué)號(hào),姓名,系名稱,出生年月)。若無重名還存在學(xué)號(hào)←→姓名函數(shù)依賴在S中存在如下完全函數(shù)依賴:學(xué)號(hào)系名稱,學(xué)號(hào)出生年月通常記為學(xué)號(hào)→系名稱,學(xué)號(hào)→出生年月FF定義在R(U)中,如果X→Y,X’→Y,則稱Y對(duì)X部分函數(shù)依賴,記作

XY。P【例】有一關(guān)系模式SC(學(xué)號(hào),課程號(hào),成績,教師編號(hào))。在SC中,(學(xué)號(hào),課程號(hào))成績(學(xué)號(hào),課程號(hào))→教師編號(hào)(相當(dāng)于X→Y)課程號(hào)→教師編號(hào)(相當(dāng)于X’→Y)F因此(學(xué)號(hào),課程號(hào))教師編號(hào)P\定義設(shè)有關(guān)系模式R(U),X,Y,Z∈U,如果X→Y,Y→Z,且Y不∈X,

Y不函數(shù)決定X,則有X→Z,稱Z傳遞函數(shù)依賴于X。【例】關(guān)系模式R(學(xué)號(hào),姓名,出生年月,系編號(hào),系負(fù)責(zé)人)在此關(guān)系模式中有如下函數(shù)依賴:學(xué)號(hào)→系編號(hào)(相當(dāng)于X→Y)系編號(hào)→學(xué)號(hào)(相當(dāng)于Y→X)系編號(hào)→系負(fù)責(zé)人(相當(dāng)于Y→Z)因此,在R中存在傳遞函數(shù)依賴學(xué)號(hào)系負(fù)責(zé)人。T鍵

鍵是唯一標(biāo)識(shí)實(shí)體的屬性集,這是對(duì)鍵的直觀定義,下面用函數(shù)依賴的概念來定義它。定義設(shè)K為R(U)中的屬性或?qū)傩越M合,若KU,則K為R的候選鍵(CandidateKey)。若候選鍵多于一個(gè),則選定其中的一個(gè)為主鍵(PrimaryKey),也稱為鍵(Key);當(dāng)只有一個(gè)候選鍵時(shí)這個(gè)候選鍵即是主鍵,F(xiàn)包含在任何一個(gè)候選鍵中的屬性,叫主屬性(PrimeAttribute)。不包含在任何主鍵中的屬性稱為非主屬性(NonprimeAttribute),或非鍵屬性(Non-keyAttribute)。

主鍵可為單個(gè)屬性,也可為屬性組。在特殊情況下,主鍵可以由整個(gè)元組組成,稱為全鍵(All-key)。如在關(guān)系模式S(學(xué)號(hào),姓名,系名稱,出生年月)中,學(xué)號(hào)是主鍵,而在關(guān)系模式SC(學(xué)號(hào),課程號(hào),成績,教師編號(hào))中,屬性組合(學(xué)號(hào),課程號(hào))是主鍵,下面舉一個(gè)全鍵的例子。

外鍵定義關(guān)系模式R中屬性或?qū)傩越MX并非R的主鍵,但X是另一個(gè)關(guān)系模式的主鍵,則稱X是R的外來鍵(ForeignKey),也稱外鍵。

設(shè)有關(guān)系模式A(作者,書籍,讀者),假設(shè)一個(gè)作者可以編著多本書,某一本書可由多個(gè)作者編著。讀者可以閱讀不同作者的不同書籍,這個(gè)關(guān)系模式的主鍵為(作者,書籍,讀者)。

如在關(guān)系模式SC(學(xué)號(hào),課程號(hào),成績,教師編號(hào))中,學(xué)號(hào)不是主鍵,但學(xué)號(hào)是關(guān)系模式S(學(xué)號(hào),姓名,系名稱,出生年月)的主鍵,則學(xué)號(hào)是關(guān)系模式SC的外鍵。主鍵與外鍵提供了一個(gè)表示關(guān)系間聯(lián)系的手段。如關(guān)系模式S與SC的聯(lián)系就是通過學(xué)號(hào)來實(shí)現(xiàn)的。3、范式在關(guān)系模式的設(shè)計(jì)中,函數(shù)依賴起著重要作用,關(guān)系模式設(shè)計(jì)的好壞依賴于它的函數(shù)依賴是否滿足特定的要求。滿足特定要求的模式稱為范式(NormalForm)。滿足不同程度要求的模式為不同范式。關(guān)系模型的奠基人E.F.Codd在1971年至1972年間系統(tǒng)地提出了第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的概念,討論了規(guī)范化問題。1974年,E.F.Codd和Boyce又共同提出了一個(gè)新范式,即BCNF。1976年Fagin提出第四范式(4NF)。現(xiàn)在已有人提出第五范式(5NF)。所謂“第幾范式”是表示關(guān)系模式的某一種級(jí)別,因此,范式這個(gè)概念可以理解成符合某種級(jí)別的關(guān)系模式的集合。一般地,如果R屬于第x范式,那么就可以寫成R∈xNF。各種范式之間的關(guān)系滿足5NF4NF3NF2NF1NF,如下圖所示。5NF4NF3NF2NF1NF第一范式第一范式定義關(guān)系模式R的每一個(gè)屬性都是不可分解的,則稱R為第一范式的模式,記為R∈1FN模式。例如:工資關(guān)系{工號(hào),姓名,工資(基本工資,津貼,交通補(bǔ)助)}

A123,趙穎,(1000,200,30)

B123,張三,(1200,100,20)

C123,李四,(1000,150,40)例如:選課關(guān)系(學(xué)號(hào),課程)

123,(操作系統(tǒng),計(jì)算機(jī)原理,數(shù)據(jù)結(jié)構(gòu))

124,(C程序設(shè)計(jì),數(shù)字電路)

125,(離散數(shù)學(xué))解決辦法:轉(zhuǎn)換為單個(gè)屬性工資關(guān)系{工號(hào),姓名,基本工資,津貼,交通補(bǔ)助}

A123,趙穎,1000,200,30B123,張三,1200,100,20C123,李四,1000,150,40選課關(guān)系,可以改為學(xué)號(hào)和各個(gè)課程一起作主鍵學(xué)號(hào)課程007501程序設(shè)計(jì)007501操作系統(tǒng)007501數(shù)據(jù)庫007501電工學(xué)007501繼電保護(hù)定義如果R∈1NF,且每一個(gè)非主屬性完全函數(shù)依賴于主鍵則R∈2NF?!纠坑幸魂P(guān)系模式SGD(學(xué)號(hào),課程號(hào),姓名,系名稱,系負(fù)責(zé)人,成績)在該模式中,有以下函數(shù)依賴存在:(學(xué)號(hào),課程號(hào))成績學(xué)號(hào)→姓名(學(xué)號(hào),課程號(hào))姓名學(xué)號(hào)→系名稱(學(xué)號(hào),課程號(hào))系名稱學(xué)號(hào)→系負(fù)責(zé)人(學(xué)號(hào),課程號(hào))系負(fù)責(zé)人系名稱→系負(fù)責(zé)人FPPP

通過分析及由主鍵的定義可知SGD中的主鍵為(學(xué)號(hào),課程號(hào)),因此,姓名,系名稱,系負(fù)責(zé)人,成績均是非主屬性,而非主屬性中只有成績是完全依賴于主鍵,其他屬性是部分函數(shù)依賴于主鍵,因此,關(guān)系模式SGD不符合2NF定義,即SGD∈2NF。經(jīng)過以上分析,可以得到兩個(gè)結(jié)論:(1)從1NF關(guān)系中消除非主屬性對(duì)關(guān)系鍵的部分函數(shù)依賴,則可得到2NF關(guān)系。(2)如果R的關(guān)系鍵為單屬性,或R的全體屬性均為主屬性,則R∈2NF。第二范式下面將SGD分解為兩個(gè)關(guān)系模式:SG(學(xué)號(hào),課程名,成績)SD(學(xué)號(hào),姓名,系名稱,系負(fù)責(zé)人)

SG的主鍵是(學(xué)號(hào),課程號(hào)),SD的主鍵是學(xué)號(hào),從前面的函數(shù)依賴分析中得知,關(guān)系模式SG和SD的非主屬性對(duì)主鍵都是完全函數(shù)依賴,因此,SG∈2NF,SD∈2NF。一個(gè)關(guān)系模式R不屬于2NF,就會(huì)產(chǎn)生以下問題:(1)插入異常(2)刪除異常(3)修改復(fù)雜詳細(xì)內(nèi)容參見本書相關(guān)章節(jié)

分析上面的例子可知,問題的關(guān)鍵在于非主屬性有兩種,一種對(duì)主鍵完全函數(shù)依賴,比如成績;另一種對(duì)主鍵部分函數(shù)依賴,比如姓名、系名稱和系負(fù)責(zé)人。對(duì)于第二種情況,如果進(jìn)行關(guān)系模式分解,消除非主屬性對(duì)主鍵的部分依賴,就可以解決關(guān)系模式SGD2NF存在的3個(gè)問題?!识x如果R∈2NF,且每一個(gè)非主屬性不傳遞函數(shù)依賴于主鍵,則R∈3NF?!纠靠疾焐侠械膬蓚€(gè)關(guān)系模式SG和SD。顯然,SG中不存在傳遞函數(shù)依賴,因此,SG∈3NF,下面分析SD中的函數(shù)依賴:由傳遞函數(shù)依賴的定義可得:

解決上述問題的辦法是將關(guān)系模式SD分解,消除關(guān)系模式SD中存在的傳遞函數(shù)依賴。學(xué)號(hào)→系名稱系名稱→學(xué)號(hào)系名稱→系負(fù)責(zé)人學(xué)號(hào)系負(fù)責(zé)人T因此SD3NF∈第三范式下面將SD分解為兩個(gè)關(guān)系模式:SDN(學(xué)號(hào),姓名,系名稱)DM(系名稱,系負(fù)責(zé)人)

SDN的主鍵是學(xué)號(hào),DM的主鍵是系名稱。在這兩上關(guān)系模式中既不存在部分函數(shù)依賴,也不存在傳遞函數(shù)依賴,因此SDN∈3NF,DM∈3NF。SG(學(xué)號(hào),課程名,成績)SG(學(xué)號(hào),姓名,系名稱,系負(fù)責(zé)人)【例】考察關(guān)系模式SG(學(xué)號(hào),課程號(hào),成績),它只有一個(gè)主鍵(學(xué)號(hào),課程號(hào)),并且沒有任何屬性對(duì)(學(xué)號(hào),課程號(hào))部分函數(shù)依賴或傳遞函數(shù)依賴,所以SG∈3NF。同時(shí),SG中(學(xué)號(hào),課程號(hào))是唯一的決定因素,所以SG∈BCNF。【例】有一關(guān)系模式SCT(學(xué)生,課程,教師),在該關(guān)系模式中,存在如下對(duì)應(yīng)關(guān)系:(1)對(duì)于每門課,每個(gè)學(xué)生的授課教師只有一位;(2)每位教師只講授一門課;(3)每門課可由不同教師講授。BCNF(BoyceCoddNormalForm)是由Boyce與Codd提出的。它比3NF更進(jìn)了一步,是修正的第三范式,有時(shí)也稱為擴(kuò)充的第三范式。(1)所有非主屬性對(duì)每一個(gè)主鍵都是完全函數(shù)依賴;(2)所有的主屬性對(duì)每一個(gè)不包含它的主鍵也是完全函數(shù)依賴;(3)沒有任何屬性完全函數(shù)依賴于非主鍵的任何一組屬性。定義關(guān)系模式R∈1NF,若X→Y且YX時(shí)X必含有主鍵,則R∈BCNF。由于3NF不能很好地處理含有多個(gè)候選鍵和候選鍵是組合項(xiàng)的情況,人們定義了一個(gè)更強(qiáng)的范式BCNF,一個(gè)滿足BCNF的關(guān)系模式有以下特點(diǎn):∪BC范式由語義可得到如下函數(shù)依賴:(學(xué)生,課程)→教師教師→課程(學(xué)生,教師)→課程這些對(duì)應(yīng)關(guān)系可用右圖表示。學(xué)生課程教師學(xué)生教師課程關(guān)系模式SCT的函數(shù)依賴【例】有一關(guān)系模式SCP(學(xué)生,課程,名次)。在SCP中有如下對(duì)應(yīng)關(guān)系:(1)每個(gè)學(xué)生選修每門課程的成績有一定的名次;(2)每門課程中每一名稱只有一個(gè)學(xué)生(即沒有并列名次)。由語義可得到如下函數(shù)依賴:(學(xué)生,課程)→名次(課程,名次)→學(xué)生

由上面的分析可知,在該關(guān)系中有兩個(gè)候選鍵(學(xué)生,課程)和(學(xué)生,教師),因?yàn)闆]有任何非主屬性,因而也不存在非主屬性對(duì)主鍵的部分函數(shù)依賴或傳遞函數(shù)依賴,所以SCT∈3NF。另外,因?yàn)榻處煛n程,也就是教師是決定因素,但教師不是主鍵,由BCNF的定義可知,SCTBCNF?!?/p>

顯然,這個(gè)關(guān)系模式有兩個(gè)候選鍵(學(xué)生,課程)和(課程,名次),并且沒有非主屬性對(duì)主鍵的部分函數(shù)依賴或傳遞函數(shù)依賴,因此,SCP∈3NF。另外,除(學(xué)生,課程)和(課程,名次)之外沒有其他決定因素,所以,SCP∈BCNF。

不滿足BCNF的關(guān)系模式同樣存在著更新異常。假設(shè)在SCT(學(xué)生,課程,教師)中,存在這樣的元組(王峰,計(jì)算機(jī)網(wǎng)絡(luò),孫效),當(dāng)刪除信息“王峰學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)課程”時(shí),將同時(shí)失去“教師孫效主講計(jì)算機(jī)網(wǎng)絡(luò)課程”這一信息。

為什么會(huì)產(chǎn)生更新異常呢?因?yàn)榻處熓菦Q定因素,但卻不是候選鍵。如何解決這個(gè)問題呢?仍然采用關(guān)系模式分解的辦法。如果將SCT分解為如下兩個(gè)關(guān)系模式:SC(學(xué)生,課程)TC(教師,課程)則SC∈BCNF,TC∈BCNF,這樣分解之后解決了SCT中存在的更新異常問題

一個(gè)數(shù)據(jù)庫模式中的關(guān)系模式如果都屬于BCNF,那么在函數(shù)依賴范疇內(nèi),它已消除了插入和刪除異常。3NF的“不徹底性”表現(xiàn)在存在主屬性對(duì)主鍵的部分函數(shù)依賴或傳遞函數(shù)依賴。這個(gè)過程可以用下圖來描述:消除非主屬性對(duì)主鍵的部分函數(shù)依賴消除非主屬性對(duì)主鍵的傳遞函數(shù)依賴消除主屬性對(duì)主鍵的部分函數(shù)依賴和傳遞函數(shù)依賴1NF2NF3NFBCNF(關(guān)系模式規(guī)范的分解過程)

在關(guān)系數(shù)據(jù)庫中,對(duì)關(guān)系模式的基本要求是滿足第一范式。這樣的關(guān)系模式就是合法的、允許的。但是,人們根據(jù)實(shí)際情況,可以將關(guān)系模式逐步分解達(dá)到2NF,3NF,BCNF。全部表格將所有欄目分解成最小數(shù)據(jù)項(xiàng)1NF關(guān)系消除部分函數(shù)依賴消除傳遞函數(shù)依賴消除主屬性對(duì)非主屬性的函數(shù)依賴消除多值依賴2NF關(guān)系3NF關(guān)系BCNF關(guān)系4NF關(guān)系規(guī)范化過程4、關(guān)系模式的分解通過前面范式的介紹,我們知道原始的關(guān)系模式需要進(jìn)行改進(jìn)來滿足數(shù)據(jù)庫設(shè)計(jì)的規(guī)范性。那么我們?cè)诟倪M(jìn)原始關(guān)系模型的時(shí)候要注意些什么呢,有什么方法呢?一個(gè)關(guān)系模式的分解可以是多種多樣的,但不管怎樣分解,最后產(chǎn)生的若干個(gè)關(guān)系模式應(yīng)與原關(guān)系模式等價(jià)。關(guān)于“等價(jià)”的概念存在3種不同的含義:(1)分解具有“無損連接性”。(2)分解要“保持函數(shù)依賴”。(3)分解既要“保持函數(shù)依賴”,又要具有“無損連接性”。這三個(gè)含義也是實(shí)現(xiàn)分解的三條不同的準(zhǔn)則。按照不同的準(zhǔn)則,關(guān)系模式所能達(dá)到的分離程序各不相同,各種范式就是對(duì)分離程度的測(cè)試。學(xué)號(hào)系名稱系負(fù)責(zé)人007101006401006402992101電力系計(jì)算機(jī)系計(jì)算機(jī)系信息系王洪肖海肖海楊君關(guān)系模型S

由已知的事實(shí)可得到S上的函數(shù)依賴如下:學(xué)號(hào)→系名稱,系名稱→系負(fù)責(zé)人顯然,S中存在傳遞函數(shù)依賴:學(xué)號(hào)→系負(fù)責(zé)人,所以它會(huì)發(fā)生更新異常。例如,如果992101號(hào)學(xué)生畢業(yè),在表中需刪除該學(xué)生信息,則信息系的系主任楊君的信息也被刪掉了;反過來,如果水利系還沒有招收學(xué)生,那么這個(gè)系的系主任信息也無法存入。下面對(duì)S(學(xué)號(hào),系名稱,系負(fù)責(zé)人)進(jìn)行3種形式的分解。

(1)將S(學(xué)號(hào),系名稱,系負(fù)責(zé)人)分解為S1,S2和S33張表如下:

DEPT電力系計(jì)算機(jī)系信息系S1S#007101006401006402992101S2MN王洪肖海楊君S3

顯然,這3張表都屬于BCNF。但是要查詢“007101號(hào)學(xué)生在哪個(gè)系學(xué)習(xí)”或者“電力系的系主任是誰”這樣的問題,在這3張表中是找不到答案的。因此,這樣的分解毫無意義。關(guān)系模式的分解至少應(yīng)該不丟失原有信息,這就產(chǎn)生了無損連接性的概念。

無損連接性可以這樣理解,如果關(guān)系模式的一個(gè)分解與原模式等價(jià),那么在原模式下的任一合法實(shí)例(即任一滿足原模式數(shù)據(jù)依賴集的實(shí)例關(guān)系)在分解之后應(yīng)能通過自然連接運(yùn)算恢復(fù)出來,這一特征通常稱為分解的無損連接性。(2)將S(學(xué)號(hào),系名稱,系負(fù)責(zé)人)分解為:S1(學(xué)號(hào),系名稱)和S2(學(xué)號(hào),系負(fù)責(zé)人)。

可以證明,這個(gè)分解是可恢復(fù)的,它保持了無損連接性,且分解后的S1和S2都屬于BCNF,但是對(duì)于存儲(chǔ)異常,它仍然沒有解決。原因就在于原來在S中存在的函數(shù)依賴DEPT→MN,現(xiàn)在在S1和S2中都不存在了。為此,人們又要求分解具有“保持函數(shù)依賴”的特性,即模式分解后,函數(shù)依賴集合應(yīng)保持不變。(3)將S(學(xué)號(hào),系名稱,系負(fù)責(zé)人)分解為:S1(學(xué)號(hào),系名稱)和S2(系名稱,系負(fù)責(zé)人)。

可以看出該分解既具有無損連接。該分解既具有無損連接性,又保持函數(shù)依賴,它既解決了更新異常,又沒有丟失原關(guān)系的信息,這正是最合理和恰當(dāng)?shù)姆纸狻?/p>

分解的無損連接性和保持函數(shù)依賴性有嚴(yán)格的判別算法和理論依據(jù)。有興趣的讀者可參考數(shù)據(jù)庫原理方面的有關(guān)書籍,這里只介紹關(guān)于模式分解的關(guān)鍵知識(shí)。(1)若要求分解保持函數(shù)依賴,那么關(guān)系模式分解總可以達(dá)到3NF,但不一定能達(dá)到BCNF;(2)若要求分解既保持函數(shù)依賴,又具有無損連接性,則可以達(dá)到

3NF,但不一定能達(dá)到BCNF;(3)若要求分解具有無損連接性,那一定可達(dá)到4NF。

規(guī)范化理論為數(shù)據(jù)庫設(shè)計(jì)提供了理論指南和工具。但是,并不是規(guī)范化程度越高,模式就越好。分解得過細(xì),即使對(duì)消除存儲(chǔ)異常有些好處,但查詢時(shí)需要更多連接操作,很可能得不償失。

因此,進(jìn)行數(shù)據(jù)庫設(shè)計(jì)時(shí),必須結(jié)合應(yīng)用環(huán)境和現(xiàn)實(shí)世界的具體情況合理地選擇數(shù)據(jù)庫模式。練習(xí)我們描述一個(gè)問題,大家來作出它的E-R模型,并且合理的轉(zhuǎn)化為數(shù)據(jù)庫的多個(gè)表。例子:市面上有很多書,書都有作者,而且寫這本書的作者還要拿稿酬要求建立一個(gè)本問

溫馨提示

  • 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)論