范式概念
符合某一種級別的關系模式的集合,即設計數據庫必須遵循一定的規則,在關系型數據庫中,這種規則就是范式。
提出范式是為數據庫建模提供一個理論基礎,它也有缺陷,于是又提出了反范式,是對范式不足之處的一些補充,而不是全盤否定。
六種范式
1NF 2NF 3NF BCNF 4NF 5NF
一般數據庫建模只要遵守到3NF或者BCNF即可,5NF通常被稱為完美范式。
1、1NF
數據表的每一列都是不可再分割的基本數據項,即對屬性的原子性約束。
2、2NF
數據表中每行都必須可以被唯一地區分,是為防止數據重復,通常是使用一個主鍵來唯一標識一條記錄。
滿足第二范式就肯定滿足第一范式。
完全依賴、部分依賴:不能存在一條記錄可以僅依賴于主鍵的一部分屬性,比如主鍵是身份證號和姓名兩個字段組成,整條記錄可以只依賴主鍵,因為身份證號可以唯一確定一條記錄,這就不是完全依賴,而是部分依賴。
直接依賴、傳遞依賴(函數依賴、間接依賴):a依賴b,b依賴c,則a肯定依賴c,這就是傳遞依賴,比如:學生信息表(學號,姓名,班級,班主任姓名),班主任姓名依賴于班級,班級依賴于學號,所以班主任姓名傳遞依賴學號,直接依賴班級(因為通常認為班主任是和一個班級聯系起來的)。
3、3NF
非主屬性之間不能相互依賴,必須直接依賴候選關鍵字。
候選關鍵字:具有唯一標識特性的一個或多個屬性,比如班號,學號。
主屬性:包含在任一候選關鍵字中的屬性。
主關鍵字:即主鍵,分為單字段主鍵,多字段主鍵。
超關鍵字:單字段主鍵。
外關鍵字:外鍵。
4、BCNF
非主屬性必須直接依賴主關鍵字。
通常我們把建模標準鎖定為3NF或BCNF就可以了,越往后,表中存的冗余信息就越少,這也是范式理論的目的所在,但是一味地追求存儲更少的冗余信息不是我們的最終目的,在硬盤廉價的現在,如何能更高效地查詢數據也是很重要的。
...
反范式概念
逆規范化,存在的意義就是彌補規范化,或者說是彌補范式的不足。
常用發規范技術
1、增加冗余列
就是在多個表中增加相同的列,是為了避免在查詢時連接操作。
2、增加派生列
增加的列是來自其他表的數據,是由其他表數據經過計算生成,是為了在查詢中減少連接操作。
3、重新組表和分割表
重新組表就是將兩個表組合成一個表,從而減少連接來提高性能。
分割表通常是對表進行拆分,分為水平拆分和垂直拆分。
范式化的好處
1、范式化的更新操作比非范式化快。
2、范式化的表通常會很小,可以更好地加載到內存中,所以操作會更快。
3、由于很少有冗余,基本不需要使用distinct和group by。
范式化較高的數據庫通常的缺點就是連接操作(關聯操作),它可能會使內存開銷瞬間提高幾個檔次。
對于經常會進行寫操作的應用,通常建議對數據庫建模實現較高的范式化。