豆利
摘要:數(shù)據(jù)庫(kù)的設(shè)計(jì)中,關(guān)系模式設(shè)計(jì)在整個(gè)數(shù)據(jù)庫(kù)的設(shè)計(jì)過(guò)程中起著重要的指導(dǎo)作用。一個(gè)數(shù)據(jù)庫(kù)模式設(shè)計(jì)的好壞主要取決于各個(gè)關(guān)系模式的質(zhì)量。本文以教務(wù)管理數(shù)據(jù)庫(kù)的關(guān)系模式講述設(shè)計(jì)準(zhǔn)則、函數(shù)依賴、模式分解以及規(guī)范化處理。
關(guān)鍵詞:關(guān)系模式;教務(wù)管理;函數(shù)依賴;規(guī)范化
中圖分類號(hào):G642? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)19-0029-02
1問(wèn)題提出
在數(shù)據(jù)庫(kù)系統(tǒng)中,經(jīng)常會(huì)出現(xiàn)數(shù)據(jù)冗余度大,且數(shù)據(jù)操作出現(xiàn)異常等問(wèn)題,很多情況下,是由于數(shù)據(jù)庫(kù)設(shè)計(jì)階段沒(méi)有選擇好的關(guān)系模式。
建立一個(gè)描述學(xué)校教務(wù)管理的數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)涉及的對(duì)象有學(xué)生的學(xué)號(hào)(Sno),學(xué)生的姓名(Sname),出生日期(Birthday),所在系(Dept)、系主任姓名(Dname),課程號(hào)(Cno),課程名稱(Cname),學(xué)分(Credit)和成績(jī)(Grade)。該關(guān)系模式如下:Student=(Sno,Sname,Birthday,Dept,Dname,Cno,Cname,Credit,Grade),其中Sno和Cno作為該關(guān)系模式的主鍵。
但是,這個(gè)Student關(guān)系模式存在很大問(wèn)題,具體問(wèn)題分析如下:
(1)數(shù)據(jù)冗余大
例如在該關(guān)系模式中,假設(shè)有1000個(gè)學(xué)生,就會(huì)存儲(chǔ)1000次系主任姓名,每個(gè)系的系主任的姓名大量重復(fù)出現(xiàn),系主任姓名重復(fù)的次數(shù)和本系學(xué)生人數(shù)保持一致,造成了存儲(chǔ)空間的浪費(fèi)。
(2)插入異常
插入異常指的是本應(yīng)該插入的數(shù)據(jù)而不能插入到數(shù)據(jù)庫(kù)中。不能插入的原因不是系統(tǒng)代碼設(shè)計(jì)的問(wèn)題,而是數(shù)據(jù)庫(kù)設(shè)計(jì)的問(wèn)題造成的。學(xué)號(hào)和課程號(hào)共同組成了該關(guān)系模式的主鍵,要錄入課程信息,必須知道學(xué)生的學(xué)號(hào)這個(gè)關(guān)鍵字。但對(duì)于新開設(shè)的課程,由于還沒(méi)有人選修,就沒(méi)有辦法錄入課程信息。也就是無(wú)法給出開課計(jì)劃,只能有人選修后才能錄入課程信息。再比如新轉(zhuǎn)入一個(gè)學(xué)生,由于還沒(méi)有選課,就沒(méi)法確定課程號(hào),那么就無(wú)法插入到數(shù)據(jù)庫(kù)中。
(3)更新異常
由于數(shù)據(jù)出現(xiàn)了大量的冗余,系統(tǒng)需要更新數(shù)據(jù),必然會(huì)花費(fèi)很大的代價(jià)進(jìn)行維護(hù)數(shù)據(jù)庫(kù),否則會(huì)面臨數(shù)據(jù)不一致的情況。例如某個(gè)系需要更換系主任,那么就需要更新與這個(gè)系有關(guān)的所有行的信息。由于工作量非常大,若錄入不慎,就會(huì)出現(xiàn)數(shù)據(jù)不一致的問(wèn)題。
(4)刪除異常
刪除異常指的是當(dāng)需要?jiǎng)h除數(shù)據(jù)時(shí),不能刪除該數(shù)據(jù)或出現(xiàn)刪除錯(cuò)誤,后者刪除數(shù)據(jù)后,把相關(guān)聯(lián)不應(yīng)該刪除的數(shù)據(jù)也刪除了。例如在該關(guān)系模式中,如果某個(gè)學(xué)生因特殊情況退學(xué),那么就會(huì)把課程號(hào)、課程名稱、系號(hào)、系主任等相關(guān)信息刪除。
鑒于以上分析,說(shuō)明該模式不是一個(gè)優(yōu)質(zhì)的關(guān)系模式。一個(gè)質(zhì)量?jī)?yōu)的關(guān)系模式不會(huì)出現(xiàn)大量的數(shù)據(jù)冗余現(xiàn)象、不會(huì)出現(xiàn)操作異常、不會(huì)造成數(shù)據(jù)的不一致性等相關(guān)問(wèn)題。
為什么發(fā)生這些問(wèn)題,主要因?yàn)檫@個(gè)模式中存在函數(shù)依賴相關(guān)問(wèn)題。
2函數(shù)依賴
函數(shù)依賴指的是數(shù)據(jù)庫(kù)中各屬性之間的聯(lián)系,例如在學(xué)生中,每個(gè)學(xué)號(hào)對(duì)應(yīng)一個(gè)姓名,每個(gè)學(xué)號(hào)對(duì)應(yīng)一個(gè)出生日期等。每門課可以對(duì)應(yīng)多個(gè)教師等,這類聯(lián)系稱為函數(shù)依賴。類似于函數(shù)Y=F(x),給出一個(gè)x的值,對(duì)應(yīng)一個(gè)Y的值。函數(shù)依賴的定義如下:
(1)平凡函數(shù)依賴與非平凡函數(shù)依賴
在關(guān)系模式R(U)中,對(duì)于U的子集X和Y,如果[X→Y],但Y不是X的子集,則稱[X→Y]是非平凡函數(shù)依賴。若Y是X的子集,則稱[X→Y]是平凡函數(shù)依賴。
(2)完全函數(shù)依賴與部分函數(shù)依賴
在關(guān)系模式R(U)中,如果[X→Y],并且對(duì)于X的任何一個(gè)真子集[X']都有[X'→Y],即[X'→Y]不成立,則稱Y完全函數(shù)依賴X,記[X→Y]。
例如在關(guān)系SC(Sno,Cno,Grade)中,(Sno,Cno)[→]Grade, 且Grade不單獨(dú)依賴Sno,也不單獨(dú)依賴Cno,而是由Sno和Cno共同決定。則Grade完全依賴Sno和Cno。又例如在關(guān)系Student(Sno,Sname,Dept,Dname,Cno,Cname,Grade)中,Sno和Cno是主鍵,則Cname是有Cno決定的,與Sno無(wú)關(guān),則Cname部分依賴(Sno,Cno)。
(3)傳遞函數(shù)依賴
在關(guān)系模式R(U)中,如果[X→Y],[Y→Z],且[Y→X]不成立,則稱Z傳遞函數(shù)依賴于X。
在傳遞函數(shù)依賴中加入條件[Y→X]不成立,是因?yàn)槿绻鸞Y→X],則認(rèn)為X與Y存在互相依賴的關(guān)系,這實(shí)際上是Z直接依賴于X,而不是傳遞依賴關(guān)系了。例如在關(guān)系Student(Sno,Sname,Dept,Dname,Cno,Cname,Grade)中,[Sno→Dept], [Dept→Dname],可以看出[Sno→Dname],Dname傳遞依賴于Sno。
3范式
關(guān)系模式的好與壞,用什么標(biāo)準(zhǔn)衡量呢?這個(gè)標(biāo)準(zhǔn)就是模式的范式。范式是一種標(biāo)準(zhǔn)用來(lái)衡量關(guān)系模式的優(yōu)劣,范式級(jí)別越高,符合的標(biāo)準(zhǔn)越高。
(1)第一范式
如果關(guān)系R中每個(gè)屬性都是簡(jiǎn)單的屬性,且為原子性,不可再分割,則屬于第一范式,記作1NF。
第一范式是對(duì)關(guān)系數(shù)據(jù)庫(kù)的最低要求,不滿足第一范式的要求,不屬于關(guān)系型數(shù)據(jù)庫(kù),不滿足第一范式的關(guān)系稱為非規(guī)范化關(guān)系。
對(duì)于U=(Sno,Sname,Birthday,Dept,Dname,Cno,Cname,Credit,Grade),滿足第一范式的關(guān)系模式還會(huì)存在插入異常、更新異常、刪除異常、數(shù)據(jù)冗余等相關(guān)現(xiàn)象,需要滿足更高范式要求,以消除以上不利影響。