12-1 實體 - 關係圖與正規化的關係
資料表的『正規化』,指的其實就是一套『資料表分割』的法則。我們必須依循正規化理論所提出的各個步驟,逐步分割,而形成許多獨立但彼此關聯的小資料表。
而其目的在於,避免資料重複或相互矛盾的情形,且使資料庫在使用時能更有效率,且易於維護。
上圖則是資料表正規化的 4 個步驟。
資料表正規化可以到 4NF、5NF等多個階段,但對於一般資料庫設計來說,只要執行到BCNF即可。
12-2 欄位相依
在一個資料表中,若乙欄位的值必須搭配甲欄位才有意義,則我們稱『乙欄位相依於甲欄位』。
12-3 第一階正規化 ( 1NF )
正規化的過程是循序漸進的,必須在滿足第一階正規化的條件下,才能進行第二階正規化。換句話說,第二階正規化必須建立在符合第一階正規化的資料表上。
第一階正規化的規則
- 資料表中有主鍵,而其他所有的欄位都相依於主鍵。
- 每個欄位中都只儲存單一值。
- 資料表中沒有意義相同的多個欄位。
在執行符合一階正規化的資料表時,我們輸入了許多重複的資料。如此,不但浪費儲存空間,且容易造成新增、刪除或更新資料時的異常狀態。所以,我們必須進行第二階正規化,來消除這些問題。
第二階正規化的規則
- 符合 1NF 的格式。
- 各欄位與主鍵間沒有『部分相依』的關係。
部分相依所造成的問題 :
- 新增資料時,因為主鍵不允許空白欄位。所以無法新增資料。
- 更改資料時,我們必須將所想更改欄位一一更改,非常沒有效率。
- 刪除資料時,我們會把不想刪除掉的欄位給一併刪除了。
12-5 第三階正規化 ( 3NF )
經過了第二階正規化後,還是存在了一些問題。就像上面所提到的 『部分相依』的問題,在新增、更改 或者 是刪除方面都會造成相當大的不便,所以我們必須執行第三階正規化。
第三階正規化的規則
- 符合 2NF 的格式。
- 各欄位與主鍵間沒有『間接相依』的關係。
而要找出各欄位與主鍵間的間接相依性,最簡單的方式就是看資料表中有無『與主鍵無關的相依性』存在。
要除去資料表中的『間接相依性』,其方法和除去『部分相依性』完全相同。
12-6 Boyce - Codd 正規化 ( BCNF )
對於大部分資料庫來說,只需要執行到第三階正規化即足夠了。但資料表的主鍵是由多個欄位所組成的,則必須在執行 Boyce - Codd 正規化來檢驗。
Boyce - Codd 正規化的規則
- 符合 3NF 的格式。
- 主鍵中的各欄位不可以相依於其他非主鍵的欄位。
12-7 正規化的另類思考
正規化固然式設計資料庫的好方法,但它只是一個基本的原則而已,在原則之外,我們還需要考慮系統的需求自行做一些變化。
例如 :
- 不必要的分割 。
我們如果將學生資料表按照正規化的原理進行分割則會如下圖。
而實際作業上,我們一定會使用整筆的地址資料,如果將它們分割了,那每次查詢地址時,都必須透過資料表的關聯,如此當資料量增加到一定程度時,就會明顯感受到系統效能降低的問題。 其實我們只須按照原本編排 (如下圖)。
- 人工的分割
一、選擇題
1. ( 3 ) 我們在資料表中除去與主鍵間接相依的欄位,是屬於正規化中的 3NF 階段。
2. ( 1 ) 我們在資料表中加入主鍵欄位,是屬於正規化中的 1NF 階段。
3. ( 2 ) 我們在資料表中除去與主鍵部分相依的欄位,是屬於正規化中的 2NF 階段。
4. ( 4 ) 我們在資料表中除去主鍵中的各欄位相依於其他非主鍵的欄位,是屬於正規化中的 BCNF 階段。
5. ( 2 ) 帳目管理資料表中有甲、乙、丙三個欄位,其中甲欄位和乙欄位具有資料相依性而乙欄位和丙欄位也具有資料相依性,我們稱甲欄位和丙欄位具有『間接相依』關係。
二、填充題
1. 在設計資料庫的過程中,我們必須執行資料庫的 正規化理論,來避免資料重複或互相矛盾的情形,並使資料庫在使用時能更有效率、更容易維護。
2. 在正規化的階段中,2NF 的目的是在除去資料表中與主鍵具有 部分相依 的欄位,而 3NF 的目的是除去資料表中與主鍵具有 間接相依 的欄位。
三、問答題
1. 資料庫的正規過程 :
- 1NF : 除去資料表中意義相同的欄位,並讓每個欄位中只有一個單一值。也要為資料表建立主鍵。
- 2NF : 除去資料表中與主鍵『部分相依』的欄位。
- 3NF : 除去資料表中與主鍵『間接相依』的欄位。
- BCNF : 除去主鍵中的各欄位相依於其他非主鍵的欄位。
- 1NF
- 2NF
- 3NF
四、實作題
沒有留言:
張貼留言