在前面的部分,我們學習了er建模方法,一種泛化的自上而下的資料庫設計方法,在這一節,我們學習另外的一種泛化的資料庫設計的方法,叫做規範化。在資料庫設計中,規範化可以有兩種使用方法,第一種是把規範化用作自下而上的資料庫設計方法,第二種是把規範化方法與er建模結合起來使用,把規範化作為自下而上的方法包括分析屬性之間的關聯,基於這個分析,把屬性結合在一起形成代表實體和關係的表,然而在屬性很多的時候,使用這種方法很難奏效,
因為很難建立屬性之間的所有重要的關聯。由於這些原因,建議應該使用自上而下的資料庫設計方法,先理解資料,我們使用er建模技術建立代表主要實體和關係的資料模型,然後把er模型翻譯成代表資料的一組表。在這一點我們使用規範化方法檢查表的設計是否良好。
規範化是一種用來產生表的集合的技術,這些表具有符合要求的屬性,並能支援使用者或公司的需求,規範化通常作為對錶結構的一系列測試來決定它是否滿足或者符合給定正規化。存在幾種正規化形式,但是最常用的是第一正規化,第二正規化和第三正規化。所有這些正規化都是基於在表中的列之間的關係的。在以下的內容中,我們首先指出引起資料冗餘的錯誤的結構化表是怎樣導致問題的出現的,這些問題叫做更新異常,錯誤的結構化表可能產生於原始er模型或者在將er模型轉化成表時出現的錯誤,然後給出第一正規化,第二正規化和第三正規化的定義,並解釋每個正規化是怎樣用來確定和更正表中的不同型別的問題的。
資料異常和更新異常,關聯式資料庫設計的乙個主要目的是把列組合成表使資料的冗餘最小,並減少實現基表所需要的檔案儲存空間,例如有以下的表的定義staffbranch(staffno,name,position,salary,branchno,branchaddress,telno)
在staffbranch表中有冗餘資料,因為分公司的細節資訊在分公司的每個員工那裡被重複了一遍,如果刪除所有員工的資訊,那麼也就沒有了分公司的資訊。這樣就會導致刪除異常,如果更新了乙個員工所在的分公司的資訊,那麼員工所在的分公司資訊就會不一致,這樣就會導致更改異常,如果分公司的新員工尚不存在,插入新員工時就會導致插入異常,所有這些異常統稱為更改異常。
如果把staffbranch表拆分為兩個表,staff和branch表staff(staffno,name,position,salary),branch(branchno,branchaddress,telno)則他們不會出現以上所示的異常,他們符合一定的正規化,下面介紹一下正規化的概念。
第一正規化:記錄的每個列包含乙個而且只包含乙個值的表,或者說資料項是不可拆分的表,如果乙個記錄的某乙個列有多個值,那麼就不是1nf,比如乙個**號碼列包含了110,120,119多個**號碼。
第二正規化:乙個第一正規化的表並且任何乙個非主屬性都完全依賴於主鍵的表。部分依賴是指乙個非主屬性可以從主鍵的部分屬性或者部分屬性的組合中得到。完全功能依賴是指如任何乙個非主屬性都必須由主鍵的全部屬性組合中得到。
第三正規化:乙個已經是第一和第二正規化的表,並且所有的非主鍵列的值只能從主鍵中得到,而不能從其他的途徑得到。也就是說消除了傳遞依賴。任何乙個非主鍵屬性都不傳遞依賴於主鍵。
在資料庫設計中經常遇到的正規化就是第三正規化,經過多年的發展不僅有bcnf,第四正規化,同時也有了第五正規化,他們都在不同程度上解決了一定的資料冗餘問題。對於一般的資料庫應用,第三正規化已經足夠使用,因此不需要贅述。有興趣的讀者可以到baidu上搜尋以下,在此不多作介紹。
lili00okok
規範化 資料庫設計原則
關聯式資料庫設計的核心問題是關係模型的設計。本文將結合具體的例項,介紹資料庫設計規範化的流程。摘要 關係型資料庫是當前廣泛應用的資料庫型別,關聯式資料庫設計是對資料進行組織化和結構化的過程,核心問題是關係模型的設計。對於資料庫規模較小的情況,我們可以比較輕鬆的處理資料庫中的表結構。然而,隨著專案規模...
資料庫規範化
規範化 normalization 是資料庫系統設計中非常重要的乙個技術。資料庫規範化能夠讓資料庫設計者更好地了解組織內部當前的資料結構,最終得到一系列的資料實體。資料庫規範化通過對資料庫表的設計,可以有效降低資料庫冗餘程度。在進行資料庫規範化的時候,我們有一系列的步驟需要遵循。我們把這些步驟稱作正...
資料庫設計中的規範化
正規化是符合某一種級別的關係模式的集合。關聯式資料庫中的關係必須滿足一定的要求。滿足最低要求的叫第一正規化,簡稱1nf,在第一正規化基礎上進一步滿足一些要求的為第二正規化,簡稱2nf。其餘依此類推,目前有六種正規化 1nf,2nf,3nf,bcnf,4nf,5nf。1 第一正規化 1nf 在任何乙個...