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

3.2 數據庫設計中關系范式的應用

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

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

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

然而這并不意味著關系模式的規范化理論在實際的數據庫設計中是沒有意義的,它對我們進行關系數據庫模式的設計仍然具有指導作用。

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

數據庫設計一般采用先得到現實環境的E-R模型,再由E-R模型轉換得到關系模式的方法。在我們進行E-R模型設計時,以及由E-R模型轉換成關系模式后再進行關系模式優化設計時,關系模式規范化理論能夠幫助我們得到較好的數據庫設計。在設計E-R模型時,要仔細分析實體間存在的關系,這樣能使我們最后從E-R模型得到的關系數據庫模式基本達到3NF的規范程度。

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

從E-R模型轉換而來的關系模式一般很少含有很多的屬性。因為E-R模型中的實體一般分得較細,轉換得到的關系模式較小。因此,為了以后數據庫查詢的方便,很多情況下是要合并關系模式,而不是分解關系模式。所以,在實際應用中,要想得到一個好的數據庫設計,應當根據具體情況對關系模式進行處理,既有可能要分解關系模式,也有可能要合并關系模式。

在對E-R模型轉換過來的關系模式進行合并時,要避免產生多余的函數依賴關系,以免造成數據冗余。合并關鍵字相同的關系模式不會產生數據冗余,合并存在外關鍵字約束的兩個關系模式時會產生數據冗余,因此是否進行合并也要全面考慮。

那么,如何將E-R模型轉換為關系模式呢?

(1)E-R模型中的每個實體集都相應地轉換成一個關系模式,實體集的名稱就作為關系模式的名稱,實體集的屬性則作為關系模式的屬性,實體集的關鍵字作為關系模式的關鍵字。

(2)對于E-R模型中的聯系,一個聯系轉化成一個關系模式,聯系的名稱作為關系模式的名稱,聯系的屬性作為關系模式的屬性,所有參加聯系的實體集的關鍵字也作為關系模式的屬性,關系模式的關鍵字與聯系的類型有關。

若是1:1聯系,則任選一參加聯系的實體集的關鍵字作為關系模式的關鍵字。

若是m:n聯系,則所有參加聯系的實體集的關鍵字作為聯系所對應的關系模式的關鍵字。

若是1:n聯系,則將多方的實體集的關鍵字作為關系模式的關鍵字。

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

主站蜘蛛池模板: 彰化市| 怀仁县| 车险| 运城市| 大竹县| 都昌县| 耒阳市| 高清| 德昌县| 九龙城区| 邓州市| 皮山县| 平陆县| 德清县| 舞阳县| 巍山| 汶川县| 盖州市| 阿城市| 崇阳县| 濉溪县| 靖江市| 石柱| 满洲里市| 南和县| 丹阳市| 汤阴县| 涞源县| 固镇县| 天镇县| 巴里| 河东区| 房产| 三穗县| 新龙县| 治县。| 杭锦后旗| 宁乡县| 马公市| 贵州省| 两当县|