李志潔,王存睿
(大連民族學(xué)院計算機(jī)科學(xué)與工程學(xué)院,遼寧大連 116605)
關(guān)系數(shù)據(jù)庫中的范式定義問題研究
李志潔,王存睿
(大連民族學(xué)院計算機(jī)科學(xué)與工程學(xué)院,遼寧大連 116605)
對關(guān)系數(shù)據(jù)庫的規(guī)范化理論和四種范式做了簡要介紹,并對范式定義和函數(shù)依賴關(guān)系進(jìn)行了探討。針對第二范式和碼的定義中存在的不嚴(yán)密性以及重復(fù)問題,提出了解決方案,進(jìn)一步界定范式概念中函數(shù)依賴關(guān)系的范圍。
數(shù)據(jù)庫;關(guān)系;函數(shù)依賴;范式
關(guān)系數(shù)據(jù)庫的規(guī)范化理論[1]最初是由E.F.Codd在1971年提出的。規(guī)范化理論可以降低數(shù)據(jù)庫中的冗余,消除異常,因此成為關(guān)系數(shù)據(jù)庫設(shè)計的重點和難點。在設(shè)計數(shù)據(jù)庫之前,需要對數(shù)據(jù)進(jìn)行規(guī)范化處理以確保數(shù)據(jù)庫遵從適當(dāng)?shù)姆妒?。范式是指符合某一種級別的關(guān)系模式的集合。規(guī)范化理論要求關(guān)系數(shù)據(jù)庫中的關(guān)系必須滿足一定的要求,即滿足不同的范式。按照屬性間的不同依賴程度,范式可以分為第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd范式(BCNF),后來又有人提出了第四范式、第五范式[2-4]。本文針對規(guī)范化理論中范式的概念不嚴(yán)謹(jǐn)以及建立在集合論上的范式定義與關(guān)系主碼的定義相矛盾等問題進(jìn)行展開分析,并提出了修正的范式定義。
各種范式其實就是一些確定關(guān)系模式的規(guī)則,而且這些規(guī)則是按層次遞進(jìn)分等級的,每一級都是在下一級的基礎(chǔ)上制定的更嚴(yán)格的規(guī)則,即滿足最低要求的范式是第一范式(1NF),在第一范式的基礎(chǔ)上進(jìn)一步滿足更多要求的是第二范式(2NF),以此類推。規(guī)范化理論涉及函數(shù)依賴以及碼的概念,現(xiàn)將本文涉及的概念闡述如下。
設(shè)R(U)是一個屬性集U上的關(guān)系模式,X和Y是U的子集。若對于R(U)的任意一個可能的關(guān)系r,r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱X函數(shù)確定Y或Y函數(shù)依賴于X,記作X→Y。簡單的說就是:某個屬性決定另一個屬性時,稱另一屬性依賴于該屬性。例如在設(shè)計學(xué)生登記表時,一個學(xué)生的學(xué)號能決定學(xué)生的姓名,也可稱姓名依賴于學(xué)號。如果知道一個學(xué)生的學(xué)號,就一定能知道學(xué)生的姓名,這種情況就是姓名依賴于學(xué)號。函數(shù)依賴又分為非平凡依賴,平凡依賴。從性質(zhì)上還可以分為部分依賴,完全依賴兩種。
關(guān)系數(shù)據(jù)庫中的關(guān)系必須滿足不同的范式。目前關(guān)系數(shù)據(jù)庫有以下幾種常用的范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、鮑依斯-科得范式(BCNF)等等。
(1)第一范式(1NF)。二維表中的每一個分量必須是不可分的數(shù)據(jù)項,滿足了這個條件的關(guān)系模式就屬于第一范式。意指數(shù)據(jù)庫表中的字段都是單一屬性的,不可再分。第一范式是關(guān)系模式應(yīng)具備的最起碼的條件。很顯然,如果數(shù)據(jù)庫設(shè)計不能滿足第一范式,就不能稱為關(guān)系型數(shù)據(jù)庫。
(2)第二范式(2NF)。若關(guān)系屬于第一范式,并且每一個非主屬性都完全函數(shù)依賴于碼,則關(guān)系屬于第二范式。第二范式是在第一范式的基礎(chǔ)上增加了一個約束條件:關(guān)系模式中每一個非主屬性都必須完全函數(shù)依賴于主屬性。意思是,每個非主屬性是由整個主鍵函數(shù)決定的,而不能由主鍵的一部分來決定。也就是說,數(shù)據(jù)庫表中不存在非關(guān)鍵字段對任一候選關(guān)鍵字段的局部函數(shù)依賴。局部函數(shù)依賴是指存在組合關(guān)鍵字中的某些字段決定非關(guān)鍵字段的情況。所以二范式要求所有非關(guān)鍵字段都完全依賴于任意一組候選關(guān)鍵字。對于所有單關(guān)鍵字的數(shù)據(jù)庫表,因為不可能存在組合關(guān)鍵字,所以都符合第二范式。
在碼的概念中,關(guān)系中的碼能夠完全函數(shù)確定其他屬性,才能稱之為碼。根據(jù)這個定義,可得到如下兩個推論:
(1)碼中不能包含“無用”的屬性,即碼中的主屬性必須都是決定因素。例如:在學(xué)生成績表中,如果(學(xué)號,課程號)是關(guān)系的碼,那么(學(xué)號,課程號,姓名)就不是碼,因為姓名不是決定因素。
(2)關(guān)系中的屬性必須完全函數(shù)依賴于碼,即碼不能部分函數(shù)確定其他屬性。例如:在學(xué)生成績表中,如果(學(xué)號,課程號)是碼,那么學(xué)號可以確定姓名,姓名函數(shù)依賴于學(xué)號,即姓名部分函數(shù)依賴于碼,因此(學(xué)號,課程號)不是碼,不符合碼的定義。
如果關(guān)系中的屬性組不滿足上述兩個條件,那么就不能稱為碼。接下來的問題是,一個關(guān)系是否一定具有碼呢?這要追溯到概念模型的內(nèi)容,概念模型中闡述了信息世界的若干個基本概念,包括實體和碼。實體是客觀存在并可相互區(qū)分的事物,并具有若干屬性。碼是唯一標(biāo)識實體的屬性集。從實體和碼的定義可以推導(dǎo)出實體一定具有碼,才能夠和其他實體相區(qū)分。同樣,將概念模型轉(zhuǎn)化為關(guān)系模型后,一個關(guān)系表通常對應(yīng)現(xiàn)實世界的一個實體集。例如學(xué)生關(guān)系對應(yīng)學(xué)生的集合。由于現(xiàn)實世界中的實體是可區(qū)分的,相應(yīng)地,關(guān)系中的每個元組也是可以相互區(qū)分的,即關(guān)系具有唯一性標(biāo)識——碼。至此,我們已經(jīng)得到一個重要的結(jié)論,即
“一個關(guān)系一定具有碼,且關(guān)系的碼必須完全函數(shù)確定其他屬性,或者關(guān)系的屬性必須完全函數(shù)依賴于碼?!?/p>
然而,這個結(jié)論卻與第二范式的定義相重復(fù)。從第二范式的判定概念里,我們可以看到,如果關(guān)系屬于第二范式,那么關(guān)系中的每一個非主屬性都完全函數(shù)依賴于碼。根據(jù)前面的分析可知,碼的定義本身就要求:關(guān)系的非主屬性必須完全函數(shù)依賴于碼。因此,在假設(shè)碼的定義為正確的前提下,只要一張表是關(guān)系表,那么就一定具有碼,且關(guān)系中的屬性一定完全函數(shù)依賴于碼。隱含的意思為:關(guān)系表只要具有碼就一定滿足第二范式。作者認(rèn)為關(guān)于第二范式的概念和碼的概念之間的關(guān)系不是非常嚴(yán)謹(jǐn),于是提出了兩種解決方案如下:
(1)修正第二范式的定義。新的第二范式(2NF):若二維表屬于第一范式,并且具有碼,則一定屬于第二范式。但是新第二范式的概念打亂了原有范式體系的定義方式,不利于概念的連續(xù)性。為此,作者提出了另一種設(shè)想,即修正碼的定義,同時保持原有第二范式定義不變。即下面的第二個方案。
(2)修正碼的定義。新的碼定義為:設(shè)K是關(guān)系模式R<U,F(xiàn)>中的屬性或?qū)傩越M,若K→U,則稱K為R的候選碼。若候選碼多于一個,則選其中的一個為主碼。這個定義和原有定義的區(qū)別在于,屬性組K是函數(shù)確定U,這個函數(shù)確定可以是完全函數(shù)確定,也可以是部分函數(shù)確定。與之相對,原有定義要求屬性組K必須完全函數(shù)確定U。這個新碼的定義與第二范式的概念就不存在重復(fù)現(xiàn)象了。
表1 學(xué)生成績表
提出第二個解決方案主要是基于這樣的考慮,原有碼的定義在實際應(yīng)用中并不符合人們的思維習(xí)慣。例如,在表1中,存在如下的函數(shù)依賴關(guān)系{學(xué)號→姓名,(學(xué)號,課程號)→成績},所以學(xué)號和(學(xué)號,課程)都是決定因素。但是(學(xué)號,課程號)是否為碼呢?根據(jù)碼的定義,關(guān)系中的屬性必須完全函數(shù)依賴于碼。如果(學(xué)號,課程號)為碼,那么成績和姓名都應(yīng)該完全函數(shù)依賴于碼。事實上,姓名僅僅函數(shù)依賴于學(xué)號,這就產(chǎn)生了姓名對(學(xué)號,課程號)的部分函數(shù)依賴。因此,根據(jù)碼的定義(參見1.2節(jié)),(學(xué)號,課程號)不能稱之為碼。但是實際上,我們知道(學(xué)號,課程號)能夠唯一確定一個元組,具有碼的功能。這就導(dǎo)致了屬性組(學(xué)號,課程號)的稱謂和功能之間“名不副實”的現(xiàn)象。當(dāng)然,如果去掉了第二個屬性姓名,則學(xué)生成績表就具有碼(學(xué)號,課程),因為成績屬性完全函數(shù)依賴于碼,同時,這個關(guān)系即屬于第一范式,也屬于第二范式。
范式是改善關(guān)系模式的一種方法,是衡量數(shù)據(jù)庫中關(guān)系模式設(shè)計是否合理的標(biāo)準(zhǔn)之一。滿足高級別范式的數(shù)據(jù)庫結(jié)構(gòu)清晰,可以避免插入、刪除和修改操作的異常,大幅降低數(shù)據(jù)庫的冗余度,提高數(shù)據(jù)庫的通用性和安全性。當(dāng)然,數(shù)據(jù)庫的邏輯設(shè)計并不僅僅只依賴于范式,在實際應(yīng)用中,有很多靈活運用四大范式而不拘泥于四大范式的例子。在一定制約條件下,數(shù)據(jù)庫的設(shè)計若能符合第二范式,就已經(jīng)達(dá)到數(shù)據(jù)庫設(shè)計的要求了。因此,本文著重討論了低一級的范式(第二范式)的概念和定義問題。關(guān)系數(shù)據(jù)庫的理論是建立在集合論的基礎(chǔ)之上的,集合中一個重要的概念就是函數(shù)依賴,關(guān)于各種范式的要求也是針對函數(shù)依賴所展開的。在詳細(xì)分析了函數(shù)依賴?yán)碚撝?,根?jù)主碼的定義推論導(dǎo)出了第二范式的定義與主碼定義的相左之處。鑒于定義并無本質(zhì)錯誤,只是在概念范圍上界定不清,本文僅僅提出了修正的第二范式定義以及修正的碼的定義,以幫助讀者在規(guī)范化過程中快速理清各種關(guān)系屬性及函數(shù)依賴關(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é)院人才啟動基金項目(20086205)。
李志潔(1978-),女,黑龍江雞西人,副教授,主要從事人工智能研究。
(責(zé)任編輯 劉敏)