數據庫設計之範式與冗餘設計
第一範式(1NF)
概念
數據表的每個
字段
(屬性)必須是唯一的、不可分割的。唯一性
比如說:在一張學生信息表裏不能有兩個名稱都是
name
的字段。不可分割性
比如說:在一張學生信息表不能出現類似
name_mobile
這樣的字段,很明顯name_mobile
是可以分割成name
和mobile
兩個字段的。
第二範式(2NF)
概念
數據表的每條記錄必須是唯一的(主鍵約束),且非主屬性依賴於主屬性。
唯一性
比如說:不能同時存在id = 1的記錄(id爲主鍵)。
依賴性
比如說:在一張學生信息表(id爲主鍵),不應該出現
course_name
(課程名稱,依賴於course_id
)這樣的字段,因爲,如果有一天,《心理健康教育》課程名要改成《心理健康教育雜談》,這就得需要改課程表,還得回來修改學生信息表的課程名稱。
第三範式(3NF)
概念
數據表中不應該存在多餘的字段,也就是說每個字段都不能由其他字段推理得到。
例子
比如說:學生信息表裏不能同時存在
province_id
(省份ID)、city_id
(城市ID)這兩個字段,因爲province_id
可以由city_id
推理得到
逆範式()
概念
就是不按照標準的五大範式去設計數據庫。
逆
在數據庫的實踐過程中,我們可能遇到數據量非常大的數據表,這時候去做join查詢是非常損耗性能的,甚至導致數據庫連接超時、掛掉等問題。所以呢,有時候就需要數據庫多冗餘設計,對一些字段做冗餘到關聯表中,以避免大表之間的join。(其實也就是犧牲空間,換取時間的說~~~)