官术网_书友最值得收藏!

3.2 數(shù)據(jù)庫設(shè)計(jì)中關(guān)系范式的應(yīng)用

前面提到的關(guān)系模式規(guī)范化的過程是:假定先用某種方法得到一個(gè)關(guān)系數(shù)據(jù)庫模式,然后分析和確定這個(gè)數(shù)據(jù)庫模式中的所有存在的函數(shù)依賴及多值依賴關(guān)系,再用介紹的方法相對(duì)機(jī)械地進(jìn)行關(guān)系模式的分解,消除關(guān)系模式中的一些不適當(dāng)?shù)暮瘮?shù)依賴關(guān)系,從而將關(guān)系數(shù)據(jù)庫模式規(guī)范化。理論上的做法如此,而在實(shí)際應(yīng)用中并非完全這樣做,主要原因如下。

(1)復(fù)雜的關(guān)系模式。找出關(guān)系模式中所有的函數(shù)依賴關(guān)系并不是一件容易的事,若漏掉或錯(cuò)誤地確定一些函數(shù)依賴關(guān)系,則按前述方法進(jìn)行關(guān)系模式規(guī)范化時(shí),并不能得到一個(gè)在理論上被認(rèn)為是好的數(shù)據(jù)庫設(shè)計(jì)。

(2)即使能正確地找到所有的函數(shù)依賴關(guān)系,采用機(jī)械地分解關(guān)系模式的方法,并不考慮關(guān)系模式的具體大小以及數(shù)據(jù)的動(dòng)態(tài)特征(是否經(jīng)常更新),將其全部規(guī)范到同樣的程度也是不合適的。

然而這并不意味著關(guān)系模式的規(guī)范化理論在實(shí)際的數(shù)據(jù)庫設(shè)計(jì)中是沒有意義的,它對(duì)我們進(jìn)行關(guān)系數(shù)據(jù)庫模式的設(shè)計(jì)仍然具有指導(dǎo)作用。

數(shù)據(jù)之間的函數(shù)依賴是現(xiàn)實(shí)世界中客觀存在的,所以,函數(shù)依賴關(guān)系的確定最好是在進(jìn)行系統(tǒng)分析、生成E-R模型的過程中完成,而不是在得到關(guān)系數(shù)據(jù)庫模式后,再去尋找存在哪些函數(shù)依賴關(guān)系。實(shí)際上,在生成E-R模型時(shí)確定數(shù)據(jù)之間的函數(shù)依賴關(guān)系更為容易,因?yàn)镋-R模型更接近現(xiàn)實(shí)世界。例如,在確定一個(gè)實(shí)體集和其相應(yīng)的屬性后,也就確定了屬性對(duì)實(shí)體集的依賴關(guān)系,以及實(shí)體集中非關(guān)鍵字屬性對(duì)關(guān)鍵字屬性的依賴關(guān)系。又如,如果聯(lián)系R表示從實(shí)體集E1到實(shí)體集E2的一對(duì)多聯(lián)系,廣義地來說,是實(shí)體集E2決定了實(shí)體集E1,在轉(zhuǎn)換成關(guān)系模式后,聯(lián)系R形成的關(guān)系模式的集合中有E2的關(guān)鍵字X和E1的關(guān)鍵字Y,則X→Y成立,而且X決定了R中任何一個(gè)屬性集;若E1和E2之間是一對(duì)一聯(lián)系,則Y→X也成立。可見,在E-R模型中隱含著許多函數(shù)依賴關(guān)系。

數(shù)據(jù)庫設(shè)計(jì)一般采用先得到現(xiàn)實(shí)環(huán)境的E-R模型,再由E-R模型轉(zhuǎn)換得到關(guān)系模式的方法。在我們進(jìn)行E-R模型設(shè)計(jì)時(shí),以及由E-R模型轉(zhuǎn)換成關(guān)系模式后再進(jìn)行關(guān)系模式優(yōu)化設(shè)計(jì)時(shí),關(guān)系模式規(guī)范化理論能夠幫助我們得到較好的數(shù)據(jù)庫設(shè)計(jì)。在設(shè)計(jì)E-R模型時(shí),要仔細(xì)分析實(shí)體間存在的關(guān)系,這樣能使我們最后從E-R模型得到的關(guān)系數(shù)據(jù)庫模式基本達(dá)到3NF的規(guī)范程度。

在E-R模型中,任何事物、數(shù)據(jù)或知識(shí)都可以是實(shí)體。實(shí)體的屬性是對(duì)實(shí)體某一方面特征的描述,它也有可能具有非常復(fù)雜的結(jié)構(gòu),而且屬性之間也可能存在各種各樣的函數(shù)依賴關(guān)系。由于我們建立E-R模型的最終目的是生成關(guān)系數(shù)據(jù)庫模式,但在關(guān)系模式中是不能描述具有復(fù)雜結(jié)構(gòu)的屬性的,所以在發(fā)現(xiàn)實(shí)體某一屬性結(jié)構(gòu)復(fù)雜時(shí),通常要在E-R模型中加入新的實(shí)體來解決這個(gè)問題,即將一個(gè)實(shí)體分解成多個(gè)實(shí)體,將具有復(fù)雜結(jié)構(gòu)的屬性處理成實(shí)體。同樣,當(dāng)發(fā)現(xiàn)某實(shí)體的屬性之間除了存在對(duì)關(guān)鍵字屬性的完全函數(shù)依賴關(guān)系以外,還有其他的函數(shù)依賴關(guān)系,或在分析插入、刪除、更新等動(dòng)態(tài)特性時(shí)發(fā)現(xiàn)有可能發(fā)生異常時(shí),也可以通過發(fā)現(xiàn)新實(shí)體,將其添加到E-R模型中,從而消除這些函數(shù)依賴關(guān)系。當(dāng)然,是否一定要消除這些函數(shù)依賴關(guān)系,還要綜合考慮數(shù)據(jù)冗余和數(shù)據(jù)的動(dòng)態(tài)特性。函數(shù)依賴多,數(shù)據(jù)冗余就多,但查詢代價(jià)小。所以,對(duì)于因?yàn)楸A艉瘮?shù)依賴關(guān)系而造成數(shù)據(jù)冗余時(shí),應(yīng)當(dāng)設(shè)計(jì)數(shù)據(jù)庫觸發(fā)器或采取別的措施來保證在插入、刪除、修改時(shí)的數(shù)據(jù)一致性,避免數(shù)據(jù)操作異常的產(chǎn)生。

從E-R模型轉(zhuǎn)換而來的關(guān)系模式一般很少含有很多的屬性。因?yàn)镋-R模型中的實(shí)體一般分得較細(xì),轉(zhuǎn)換得到的關(guān)系模式較小。因此,為了以后數(shù)據(jù)庫查詢的方便,很多情況下是要合并關(guān)系模式,而不是分解關(guān)系模式。所以,在實(shí)際應(yīng)用中,要想得到一個(gè)好的數(shù)據(jù)庫設(shè)計(jì),應(yīng)當(dāng)根據(jù)具體情況對(duì)關(guān)系模式進(jìn)行處理,既有可能要分解關(guān)系模式,也有可能要合并關(guān)系模式。

在對(duì)E-R模型轉(zhuǎn)換過來的關(guān)系模式進(jìn)行合并時(shí),要避免產(chǎn)生多余的函數(shù)依賴關(guān)系,以免造成數(shù)據(jù)冗余。合并關(guān)鍵字相同的關(guān)系模式不會(huì)產(chǎn)生數(shù)據(jù)冗余,合并存在外關(guān)鍵字約束的兩個(gè)關(guān)系模式時(shí)會(huì)產(chǎn)生數(shù)據(jù)冗余,因此是否進(jìn)行合并也要全面考慮。

那么,如何將E-R模型轉(zhuǎn)換為關(guān)系模式呢?

(1)E-R模型中的每個(gè)實(shí)體集都相應(yīng)地轉(zhuǎn)換成一個(gè)關(guān)系模式,實(shí)體集的名稱就作為關(guān)系模式的名稱,實(shí)體集的屬性則作為關(guān)系模式的屬性,實(shí)體集的關(guān)鍵字作為關(guān)系模式的關(guān)鍵字。

(2)對(duì)于E-R模型中的聯(lián)系,一個(gè)聯(lián)系轉(zhuǎn)化成一個(gè)關(guān)系模式,聯(lián)系的名稱作為關(guān)系模式的名稱,聯(lián)系的屬性作為關(guān)系模式的屬性,所有參加聯(lián)系的實(shí)體集的關(guān)鍵字也作為關(guān)系模式的屬性,關(guān)系模式的關(guān)鍵字與聯(lián)系的類型有關(guān)。

若是1:1聯(lián)系,則任選一參加聯(lián)系的實(shí)體集的關(guān)鍵字作為關(guān)系模式的關(guān)鍵字。

若是m:n聯(lián)系,則所有參加聯(lián)系的實(shí)體集的關(guān)鍵字作為聯(lián)系所對(duì)應(yīng)的關(guān)系模式的關(guān)鍵字。

若是1:n聯(lián)系,則將多方的實(shí)體集的關(guān)鍵字作為關(guān)系模式的關(guān)鍵字。

經(jīng)過上述轉(zhuǎn)換而來的數(shù)據(jù)庫模式一般來說不是最好的,關(guān)系模式的個(gè)數(shù)太多,過于煩瑣,數(shù)據(jù)重復(fù)存儲(chǔ),浪費(fèi)空間,且使許多查詢不方便,牽涉到幾個(gè)表,所以有必要將一些關(guān)系模式進(jìn)行合并。我們前面講過,可以將具有相同關(guān)鍵字的關(guān)系模式合并,合并后的關(guān)系模式包含合并前關(guān)系模式的所有屬性。對(duì)照關(guān)系范式的要求,應(yīng)使每一關(guān)系模式都滿足第三范式的要求。

主站蜘蛛池模板: 右玉县| 云霄县| 鹤岗市| 博兴县| 永清县| 嘉兴市| 大姚县| 景泰县| 五华县| 清丰县| 泽州县| 甘泉县| 屏山县| 乐清市| 大同市| 渝北区| 南京市| 塔城市| 遂昌县| 宣汉县| 鱼台县| 互助| 赤壁市| 巴马| 蒙城县| 德江县| 阳高县| 临猗县| 东阿县| 项城市| 庆阳市| 巩留县| 龙里县| 廉江市| 巧家县| 上高县| 东平县| 厦门市| 于田县| 兴海县| 囊谦县|