數據庫設計一般滿足第三范式就夠了
第一范式(無重復的列)
定義:數據庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,記錄等非原子數據項。如果實體中的某個屬性有多個值時,必須拆分為不同的屬性
通俗解釋:一個字段只存儲一項信息
eg:班級:高三年1班,應改為2個字段,一個年級、一個班級,才滿足第一范式
不滿足第一范式
學號 | 姓名 | 班級 |
0001 | 小紅 | 高三年1班 |
改成
學號 | 姓名 | 年級 | 班級 |
0001 | 小紅 | 高三年 | 1班 |
第二范式(屬性完全依賴於主鍵)
定義:滿足第一范式前提,當存在多個主鍵的時候,才會發生不符合第二范式的情況。比如有兩個主鍵,不能存在這樣的屬性,它只依賴於其中一個主鍵,這就是不符合第二范式
通俗解釋:任意一個字段都只依賴表中的同一個字段
eg:比如不符合第二范式
學生證 名稱 | 學生證號 | 學生證辦理時間 | 借書證名稱 | 借書證號 | 借書證辦理時間 |
改成2張表如下
學生證表
學生證 | 學生證號 | 學生證辦理時間 |
借書證表
借書證 | 借書證號 | 借書證把你拉時間 |
第三范式(屬性不能傳遞依賴於主屬性)
定義:滿足第二范式前提,如果某一屬性依賴於其他非主鍵屬性,而其他非主鍵屬性又依賴於主鍵,那么這個屬性就是間接依賴於主鍵,這被稱作傳遞依賴於主屬性。
通俗理解:一張表最多只存2層同類型信息
eg:爸爸資料表,不滿足第三范式
爸爸 | 兒子 | 女兒 | 女兒的小熊 | 女兒的海綿寶寶 |
改成
爸爸信息表:
爸爸 | 兒子 | 女兒 |
女兒信息表
女兒 | 女兒的小熊 | 女兒的海綿寶寶 |
|