1. 程式人生 > >First Normal Form(1NF)

First Normal Form(1NF)

假如一個數據庫連第一正規化都不滿足,那肯定是個設計的很糟糕的資料庫

Rules for First Normal Form


Rule 1: 每個屬性的取值必須是原子的

每列的取值必須是單個值(single value),稍後舉例說明

Rule 2: 每一列的domain必須是一樣的

很顯然,取值要不然是字串,要不然是int,總之每列的資料型別不能不一樣.

Rule 3: 不存在相同的列名

列名一定不能相同,不然BDMS會產生混淆

Rule 4: 順序無關緊要

第一列可以放在第二列,第一行也可以放到第二行去,這都不影響。

Time for an Example


表頭依次是學生id,學生姓名,學生所選課程

roll_no name subject
101 Akon OS, CN
103 Ckon Java
102 Bkon C, C++
當前已經滿足了4個條件中的3個,唯獨第一條原子性不滿足,subject對應的取值可能有多個,即它是multi-value的,而不是atomic的。

解決辦法

非常簡單,把multi-value給它一個一個拆成single value,如下所示:

roll_no name subject
101 Akon OS
101 Akon CN
103 Ckon Java
102 Bkon C
102 Bkon C++

其實第一正規化是非常非常基礎的要求了,幾乎沒做什麼強的限定。4條約束也是十分自然