李志潔,王存睿
(大連民族學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院,遼寧大連 116605)
關(guān)系數(shù)據(jù)庫(kù)中的范式定義問(wèn)題研究
李志潔,王存睿
(大連民族學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院,遼寧大連 116605)
對(duì)關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化理論和四種范式做了簡(jiǎn)要介紹,并對(duì)范式定義和函數(shù)依賴(lài)關(guān)系進(jìn)行了探討。針對(duì)第二范式和碼的定義中存在的不嚴(yán)密性以及重復(fù)問(wèn)題,提出了解決方案,進(jìn)一步界定范式概念中函數(shù)依賴(lài)關(guān)系的范圍。
數(shù)據(jù)庫(kù);關(guān)系;函數(shù)依賴(lài);范式
關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化理論[1]最初是由E.F.Codd在1971年提出的。規(guī)范化理論可以降低數(shù)據(jù)庫(kù)中的冗余,消除異常,因此成為關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的重點(diǎn)和難點(diǎn)。在設(shè)計(jì)數(shù)據(jù)庫(kù)之前,需要對(duì)數(shù)據(jù)進(jìn)行規(guī)范化處理以確保數(shù)據(jù)庫(kù)遵從適當(dāng)?shù)姆妒?。范式是指符合某一種級(jí)別的關(guān)系模式的集合。規(guī)范化理論要求關(guān)系數(shù)據(jù)庫(kù)中的關(guān)系必須滿(mǎn)足一定的要求,即滿(mǎn)足不同的范式。按照屬性間的不同依賴(lài)程度,范式可以分為第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd范式(BCNF),后來(lái)又有人提出了第四范式、第五范式[2-4]。本文針對(duì)規(guī)范化理論中范式的概念不嚴(yán)謹(jǐn)以及建立在集合論上的范式定義與關(guān)系主碼的定義相矛盾等問(wèn)題進(jìn)行展開(kāi)分析,并提出了修正的范式定義。
各種范式其實(shí)就是一些確定關(guān)系模式的規(guī)則,而且這些規(guī)則是按層次遞進(jìn)分等級(jí)的,每一級(jí)都是在下一級(jí)的基礎(chǔ)上制定的更嚴(yán)格的規(guī)則,即滿(mǎn)足最低要求的范式是第一范式(1NF),在第一范式的基礎(chǔ)上進(jìn)一步滿(mǎn)足更多要求的是第二范式(2NF),以此類(lèi)推。規(guī)范化理論涉及函數(shù)依賴(lài)以及碼的概念,現(xiàn)將本文涉及的概念闡述如下。
設(shè)R(U)是一個(gè)屬性集U上的關(guān)系模式,X和Y是U的子集。若對(duì)于R(U)的任意一個(gè)可能的關(guān)系r,r中不可能存在兩個(gè)元組在X上的屬性值相等,而在Y上的屬性值不等,則稱(chēng)X函數(shù)確定Y或Y函數(shù)依賴(lài)于X,記作X→Y。簡(jiǎn)單的說(shuō)就是:某個(gè)屬性決定另一個(gè)屬性時(shí),稱(chēng)另一屬性依賴(lài)于該屬性。例如在設(shè)計(jì)學(xué)生登記表時(shí),一個(gè)學(xué)生的學(xué)號(hào)能決定學(xué)生的姓名,也可稱(chēng)姓名依賴(lài)于學(xué)號(hào)。如果知道一個(gè)學(xué)生的學(xué)號(hào),就一定能知道學(xué)生的姓名,這種情況就是姓名依賴(lài)于學(xué)號(hào)。函數(shù)依賴(lài)又分為非平凡依賴(lài),平凡依賴(lài)。從性質(zhì)上還可以分為部分依賴(lài),完全依賴(lài)兩種。
關(guān)系數(shù)據(jù)庫(kù)中的關(guān)系必須滿(mǎn)足不同的范式。目前關(guān)系數(shù)據(jù)庫(kù)有以下幾種常用的范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、鮑依斯-科得范式(BCNF)等等。
(1)第一范式(1NF)。二維表中的每一個(gè)分量必須是不可分的數(shù)據(jù)項(xiàng),滿(mǎn)足了這個(gè)條件的關(guān)系模式就屬于第一范式。意指數(shù)據(jù)庫(kù)表中的字段都是單一屬性的,不可再分。第一范式是關(guān)系模式應(yīng)具備的最起碼的條件。很顯然,如果數(shù)據(jù)庫(kù)設(shè)計(jì)不能滿(mǎn)足第一范式,就不能稱(chēng)為關(guān)系型數(shù)據(jù)庫(kù)。
(2)第二范式(2NF)。若關(guān)系屬于第一范式,并且每一個(gè)非主屬性都完全函數(shù)依賴(lài)于碼,則關(guān)系屬于第二范式。第二范式是在第一范式的基礎(chǔ)上增加了一個(gè)約束條件:關(guān)系模式中每一個(gè)非主屬性都必須完全函數(shù)依賴(lài)于主屬性。意思是,每個(gè)非主屬性是由整個(gè)主鍵函數(shù)決定的,而不能由主鍵的一部分來(lái)決定。也就是說(shuō),數(shù)據(jù)庫(kù)表中不存在非關(guān)鍵字段對(duì)任一候選關(guān)鍵字段的局部函數(shù)依賴(lài)。局部函數(shù)依賴(lài)是指存在組合關(guān)鍵字中的某些字段決定非關(guān)鍵字段的情況。所以二范式要求所有非關(guān)鍵字段都完全依賴(lài)于任意一組候選關(guān)鍵字。對(duì)于所有單關(guān)鍵字的數(shù)據(jù)庫(kù)表,因?yàn)椴豢赡艽嬖诮M合關(guān)鍵字,所以都符合第二范式。
在碼的概念中,關(guān)系中的碼能夠完全函數(shù)確定其他屬性,才能稱(chēng)之為碼。根據(jù)這個(gè)定義,可得到如下兩個(gè)推論:
(1)碼中不能包含“無(wú)用”的屬性,即碼中的主屬性必須都是決定因素。例如:在學(xué)生成績(jī)表中,如果(學(xué)號(hào),課程號(hào))是關(guān)系的碼,那么(學(xué)號(hào),課程號(hào),姓名)就不是碼,因?yàn)樾彰皇菦Q定因素。
(2)關(guān)系中的屬性必須完全函數(shù)依賴(lài)于碼,即碼不能部分函數(shù)確定其他屬性。例如:在學(xué)生成績(jī)表中,如果(學(xué)號(hào),課程號(hào))是碼,那么學(xué)號(hào)可以確定姓名,姓名函數(shù)依賴(lài)于學(xué)號(hào),即姓名部分函數(shù)依賴(lài)于碼,因此(學(xué)號(hào),課程號(hào))不是碼,不符合碼的定義。
如果關(guān)系中的屬性組不滿(mǎn)足上述兩個(gè)條件,那么就不能稱(chēng)為碼。接下來(lái)的問(wèn)題是,一個(gè)關(guān)系是否一定具有碼呢?這要追溯到概念模型的內(nèi)容,概念模型中闡述了信息世界的若干個(gè)基本概念,包括實(shí)體和碼。實(shí)體是客觀(guān)存在并可相互區(qū)分的事物,并具有若干屬性。碼是唯一標(biāo)識(shí)實(shí)體的屬性集。從實(shí)體和碼的定義可以推導(dǎo)出實(shí)體一定具有碼,才能夠和其他實(shí)體相區(qū)分。同樣,將概念模型轉(zhuǎn)化為關(guān)系模型后,一個(gè)關(guān)系表通常對(duì)應(yīng)現(xiàn)實(shí)世界的一個(gè)實(shí)體集。例如學(xué)生關(guān)系對(duì)應(yīng)學(xué)生的集合。由于現(xiàn)實(shí)世界中的實(shí)體是可區(qū)分的,相應(yīng)地,關(guān)系中的每個(gè)元組也是可以相互區(qū)分的,即關(guān)系具有唯一性標(biāo)識(shí)——碼。至此,我們已經(jīng)得到一個(gè)重要的結(jié)論,即
“一個(gè)關(guān)系一定具有碼,且關(guān)系的碼必須完全函數(shù)確定其他屬性,或者關(guān)系的屬性必須完全函數(shù)依賴(lài)于碼?!?/p>
然而,這個(gè)結(jié)論卻與第二范式的定義相重復(fù)。從第二范式的判定概念里,我們可以看到,如果關(guān)系屬于第二范式,那么關(guān)系中的每一個(gè)非主屬性都完全函數(shù)依賴(lài)于碼。根據(jù)前面的分析可知,碼的定義本身就要求:關(guān)系的非主屬性必須完全函數(shù)依賴(lài)于碼。因此,在假設(shè)碼的定義為正確的前提下,只要一張表是關(guān)系表,那么就一定具有碼,且關(guān)系中的屬性一定完全函數(shù)依賴(lài)于碼。隱含的意思為:關(guān)系表只要具有碼就一定滿(mǎn)足第二范式。作者認(rèn)為關(guān)于第二范式的概念和碼的概念之間的關(guān)系不是非常嚴(yán)謹(jǐn),于是提出了兩種解決方案如下:
(1)修正第二范式的定義。新的第二范式(2NF):若二維表屬于第一范式,并且具有碼,則一定屬于第二范式。但是新第二范式的概念打亂了原有范式體系的定義方式,不利于概念的連續(xù)性。為此,作者提出了另一種設(shè)想,即修正碼的定義,同時(shí)保持原有第二范式定義不變。即下面的第二個(gè)方案。
(2)修正碼的定義。新的碼定義為:設(shè)K是關(guān)系模式R<U,F(xiàn)>中的屬性或?qū)傩越M,若K→U,則稱(chēng)K為R的候選碼。若候選碼多于一個(gè),則選其中的一個(gè)為主碼。這個(gè)定義和原有定義的區(qū)別在于,屬性組K是函數(shù)確定U,這個(gè)函數(shù)確定可以是完全函數(shù)確定,也可以是部分函數(shù)確定。與之相對(duì),原有定義要求屬性組K必須完全函數(shù)確定U。這個(gè)新碼的定義與第二范式的概念就不存在重復(fù)現(xiàn)象了。
表1 學(xué)生成績(jī)表
提出第二個(gè)解決方案主要是基于這樣的考慮,原有碼的定義在實(shí)際應(yīng)用中并不符合人們的思維習(xí)慣。例如,在表1中,存在如下的函數(shù)依賴(lài)關(guān)系{學(xué)號(hào)→姓名,(學(xué)號(hào),課程號(hào))→成績(jī)},所以學(xué)號(hào)和(學(xué)號(hào),課程)都是決定因素。但是(學(xué)號(hào),課程號(hào))是否為碼呢?根據(jù)碼的定義,關(guān)系中的屬性必須完全函數(shù)依賴(lài)于碼。如果(學(xué)號(hào),課程號(hào))為碼,那么成績(jī)和姓名都應(yīng)該完全函數(shù)依賴(lài)于碼。事實(shí)上,姓名僅僅函數(shù)依賴(lài)于學(xué)號(hào),這就產(chǎn)生了姓名對(duì)(學(xué)號(hào),課程號(hào))的部分函數(shù)依賴(lài)。因此,根據(jù)碼的定義(參見(jiàn)1.2節(jié)),(學(xué)號(hào),課程號(hào))不能稱(chēng)之為碼。但是實(shí)際上,我們知道(學(xué)號(hào),課程號(hào))能夠唯一確定一個(gè)元組,具有碼的功能。這就導(dǎo)致了屬性組(學(xué)號(hào),課程號(hào))的稱(chēng)謂和功能之間“名不副實(shí)”的現(xiàn)象。當(dāng)然,如果去掉了第二個(gè)屬性姓名,則學(xué)生成績(jī)表就具有碼(學(xué)號(hào),課程),因?yàn)槌煽?jī)屬性完全函數(shù)依賴(lài)于碼,同時(shí),這個(gè)關(guān)系即屬于第一范式,也屬于第二范式。
范式是改善關(guān)系模式的一種方法,是衡量數(shù)據(jù)庫(kù)中關(guān)系模式設(shè)計(jì)是否合理的標(biāo)準(zhǔn)之一。滿(mǎn)足高級(jí)別范式的數(shù)據(jù)庫(kù)結(jié)構(gòu)清晰,可以避免插入、刪除和修改操作的異常,大幅降低數(shù)據(jù)庫(kù)的冗余度,提高數(shù)據(jù)庫(kù)的通用性和安全性。當(dāng)然,數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)并不僅僅只依賴(lài)于范式,在實(shí)際應(yīng)用中,有很多靈活運(yùn)用四大范式而不拘泥于四大范式的例子。在一定制約條件下,數(shù)據(jù)庫(kù)的設(shè)計(jì)若能符合第二范式,就已經(jīng)達(dá)到數(shù)據(jù)庫(kù)設(shè)計(jì)的要求了。因此,本文著重討論了低一級(jí)的范式(第二范式)的概念和定義問(wèn)題。關(guān)系數(shù)據(jù)庫(kù)的理論是建立在集合論的基礎(chǔ)之上的,集合中一個(gè)重要的概念就是函數(shù)依賴(lài),關(guān)于各種范式的要求也是針對(duì)函數(shù)依賴(lài)所展開(kāi)的。在詳細(xì)分析了函數(shù)依賴(lài)?yán)碚撝?,根?jù)主碼的定義推論導(dǎo)出了第二范式的定義與主碼定義的相左之處。鑒于定義并無(wú)本質(zhì)錯(cuò)誤,只是在概念范圍上界定不清,本文僅僅提出了修正的第二范式定義以及修正的碼的定義,以幫助讀者在規(guī)范化過(guò)程中快速理清各種關(guān)系屬性及函數(shù)依賴(lài)關(guān)系。
[1]CODD E F.A Relational Model of Data for Large Shared Data Banks[J].Communications of the ACM,1970,13(6):377-387.
[2]CARLO Z.A New Normal Form for the Design of Relational Database Schemata[J].ACM Transactions on Database Systems,1982,7(3):489-499.
[3]RONALD F.A Normal Form for Relational Databases That Is Based on Domains and Keys[J].Communications of the ACM,1981,6(3):387-415.
[4]WIJSER J.Temporal FDs on complex objects[J].ACM Transactions on Database Systems,1999,24(1):127 -176.
Research on Normal Form of Relational Database
LI Zhi-jie,WANG Cun-rui
(School of Computer Science& Engineering,Dalian Nationalities University,Dalian Liaoning 116605,China)
This paper makes a brief introduction to normalization theory and four kinds of Normal forms.Also the definitions of Normal forms and functional dependency are discussed.For the problem of imprecision in the second Normal form definition,a revised definition of second Normal form is proposed.Thus,the scope of functional dependency in the Normal form concept is further defined.
database;relation;functional dependency;normal form
TP 393
A
1009-315X(2012)05-0492-03
2012-03-17;最后
2012-07-19
大連民族學(xué)院人才啟動(dòng)基金項(xiàng)目(20086205)。
李志潔(1978-),女,黑龍江雞西人,副教授,主要從事人工智能研究。
(責(zé)任編輯 劉敏)