第一正規化

第一正規化(1NF,中國譯作“第一範式”、台灣及香港譯作“第一正規化”)是資料庫正規化中所使用的一種正規形式。第一正規化是為了要排除 重複群 的出現,所採用的方法是要求資料庫的每個列的值域都是由原子值組成;每個欄位的值都只能是單一值。1971年埃德加·科德提出了第一正規化。

基本介紹

  • 中文名:第一正規化
  • 外文名:First normal form
簡介,不匹配第一正規化的情況,重複群,缺乏唯一識別碼,關係資料庫里的第一正規化,單一欄位中有多個有意義的值,用很多欄位來表達同一個事實,

簡介

第一正規化(1NF,中國譯作“第一範式”、台灣及香港譯作“第一正規化”)是資料庫正規化中所使用的一種正規形式。第一正規化是為了要排除重複群的出現,所採用的方法是要求資料庫的每個列的值域都是由原子值組成;每個欄位的值都只能是單一值。1971年埃德加·科德提出了第一正規化。

不匹配第一正規化的情況

重複群

重複群通常會出現在會計賬上,每一筆記錄可能有不定個數的值。舉例來說:
交易
顧客
日期
數量
Pete
Monday
19.00
-28.20
Pete
Wednesday
-84.00
Sarah
Friday
100.00
150.00
-40.00
'數量' 就是所謂的重複群了,而在這種情況下這份數據就不匹配第一正規化。想要消除重複群的話,只要把每筆記錄都轉化為單一記錄即可:
交易
顧客
日期
數量
Pete
Monday
19.00
Pete
Monday
-28.20
Pete
Wednesday
-84.00
Sarah
Friday
100.00
Sarah
Friday
150.00
Sarah
Friday
-40.00

缺乏唯一識別碼

一樣是在交易這個例子中,同一天同一個人買了同樣的數量,這樣的交易做了兩次:
交易
顧客
日期
數量
Pete
Monday
19.00
Pete
Monday
19.00
如上所示,這兩筆交易可以說是一模一樣,也就是說如果只靠這些數據我們沒有辦法分辨這兩筆記錄。我們之所以說它不匹配第一正規化,是因為上面這樣的表示法欠缺一個唯一識別碼,可以是一個欄位,也可以是一組欄位,而且可以保證在這個數據中唯一識別碼不會重複出現。要將它正規化到匹配第一正規化的原則只需要加入一個唯一識別碼即可:
交易
交易 ID
顧客
日期
數量
1
Pete
Monday
19.00
2
Pete
Monday
19.00

關係資料庫里的第一正規化

大多數的RDBMS(關係資料庫) 允許用戶在定義數據表的時候不去指定主鍵,不過這么一來這種數據表就不匹配第一正規化了。
從某個角度看來,不允許重複群的出現是關係資料庫表示信息的方法,RDBMS 里數據表每一筆記錄的每一個欄位都只能有一個值。舉例來說,如果定義了一個叫做 Favorite Number 的整數欄位,每一筆記錄的 Favorite Number 這個欄位都只會是一個整數 (或是無);這也就是說,如果設定了主鍵的話,理論上不可能會有任何關係資料庫的數據表會違反第一正規化的原則。
不過就算是在這種情況下,還是可以設計出在骨子裡違反第一正規化的數據表。最簡單的方法就是把多個有意義的值編碼過後存進一個欄位里,然後在數據表中用很多欄位來表達同一個事實。

單一欄位中有多個有意義的值

在單一欄位中存放多個值是違反第一正規化的做法,下面這個就是很好的例子,它把多個值用逗號分開來表示:
挑食列表
不喜歡的食物
Jim
Liver, Goat's cheese
Alice
Broccoli
Norman
Pheasant, Liver, Peas
以這樣的設計看來,想要知道有什麼人不喜歡某樣特定的東西是很不容易的。不過可以把這個數據錶轉化成下面這種匹配第一正規化的型式:
挑食列表
不喜歡的食物
Jim
Liver
Jim
Goat's cheese
Alice
Broccoli
Norman
Pheasant
Norman
Liver
Norman
Peas

用很多欄位來表達同一個事實

在同一個數據表里用多個欄位來表達同一個事情也是違反第一正規化的:
個人數據
喜歡的顏色
不喜歡的食物 (1)
不喜歡的食物 (2)
不喜歡的食物 (3)
Jim
Green
Liver
Goat's cheese
-
Alice
Fuchsia
Broccoli
-
-
Norman
Blue
Pheasant
Liver
Peas
Emily
Yellow
-
-
-
就算我們能確定每個人不喜歡吃的食物最多不會超過三樣,這還是一個很糟的設計。舉例來說,我們想要知道所有不喜歡同一種食物的人的組合的話,這就不是件容易的事,因為食物有可能出現在任何一個欄位,也就是說每一次的查詢都要去檢查 9 (3 x 3) 組不同的欄位組合。

相關詞條

熱門詞條

聯絡我們