數據庫表結構怎么設計


三范式

  1. 第一范式:1NF是對屬性的原子性約束,要求屬性具有原子性,即列不能夠再分成其他幾列;
  2. 第二范式:2NF首先是要滿足1NF,另外包含兩部分內容,一是表必須有一個主鍵;二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分。 
  3. 第三范式:3NF首先是要滿足2NF,另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 A 依賴於非主鍵列 B,非主鍵列 B 依賴於主鍵的情況。這是對字段冗余性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗余。

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,區分它們的關鍵點在於,2NF:非主鍵列是否完全依賴於主鍵,還是依賴於主鍵的一部分;3NF:非主鍵列是直接依賴於主鍵,還是直接依賴於非主鍵列。

 

范式的優點:

1)范式化的數據庫更新起來更加快;

2)范式化之后,只有很少的重復數據,只需要修改更少的數據;

3)范式化的表更小,可以在內存中執行;

4)很少的冗余數據,在查詢的時候需要更少的distinct或者group by語句。

范式的缺點

1)范式化的表,在查詢的時候經常需要很多的關聯,因為單獨一個表內不存在冗余和重復數據。這導致,稍微復雜一些的查詢語句在查詢范式的schema上都可能需要較多次的關聯。這會增加讓查詢的代價,也可能使一些索引策略無效。因為范式化將列存放在不同的表中,而這些列在一個表中本可以屬於同一個索引。


 

反范式的優點:

1)可以避免關聯,因為所有的數據幾乎都可以在一張表上顯示;

2)可以設計有效的索引;

反范式的缺點:

1)表格內的冗余較多,刪除數據時候會造成表有些有用的信息丟失。

所以在設計數據庫時,要注意混用范式化和反范式化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM