- 電子商務(wù)數(shù)據(jù)庫技術(shù)(第3版)
- 潘郁
- 2075字
- 2019-12-11 15:42:23
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)系模式都滿足第三范式的要求。
- 跨境電商基礎(chǔ)與實(shí)務(wù)
- 微商掘金:決勝微商的7個(gè)關(guān)鍵要素
- 網(wǎng)店運(yùn)營與管理(視頻指導(dǎo)版 第2版)
- 當(dāng)代全球商務(wù)(原書第9版)
- 網(wǎng)上開店大贏家:零成本網(wǎng)上開店的秘密
- Magento PHP Developer’s Guide
- O2O時(shí)代的沖擊
- 跨境電子商務(wù)實(shí)務(wù)
- 內(nèi)容電商運(yùn)營實(shí)戰(zhàn):內(nèi)容打造+內(nèi)容運(yùn)營+內(nèi)容變現(xiàn)
- 微商運(yùn)營和團(tuán)隊(duì)管理全攻略
- 經(jīng)濟(jì)型酒店?duì)I銷推廣·促銷方案·電子商務(wù)
- 內(nèi)容電商運(yùn)營系列:直擊人心的圖文內(nèi)容打造與傳播
- 增長起跑線:數(shù)字營銷實(shí)戰(zhàn)指南
- 玩轉(zhuǎn)O2O:商業(yè)分析+運(yùn)營推廣+營銷技巧+實(shí)戰(zhàn)案例
- 運(yùn)營無憂:淘寶天貓運(yùn)營與推廣實(shí)操