資料庫設計原則(簡明)
本文摘錄自http://blog.csdn.net/haiross/article/details/50427382 原文有更詳細講解。
正規化標準
知乎 https://www.zhihu.com/question/24696366基本表及其欄位之間的關係,應儘量滿足第三正規化。但是,滿足第三正規化的資料庫設計,往往不是最好的設計。
為了提高資料庫的執行效率,常常需要降低正規化標準:適當增加冗餘,達到以空間換時間的目的。 例:有一張存放商品的基本表,如表1所示。“金額”這個欄位的存在,表明該表的設計不滿足第三正規化, 因為“金額”可以由“單價”乘以“數量”得到,說明“金額”是冗餘欄位。但是,增加“金額”這個冗餘欄位, 可以提高查詢統計的速度,這就是以空間換時間的作法。
通俗地理解三個正規化
通俗地理解三個正規化,對於資料庫設計大有好處。在資料庫設計中,為了更好地應用三個正規化,就必須通俗地理解 三個正規化(通俗地理解是夠用的理解,並不是最科學最準確的理解): 第一正規化:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解; 第二正規化:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性; 第三正規化:3NF是對欄位冗餘性的約束,即任何欄位不能由其他欄位派生出來,它要求欄位沒有冗餘。 沒有冗餘的資料庫設計可以做到。但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高執行效率,就必須降
正確處理多對多的關係
若兩個實體之間存在多對多的關係,則應消除這種關係。消除的辦法是,在兩者之間增加第三個實體。這樣,原來一 個多對多的關係,現在變為兩個一對多的關係。
正確認識資料冗餘
主鍵與外來鍵在多表中的重複出現,不屬於資料冗餘,這個概念必須清楚,事實上有許多人還不清楚。非鍵欄位的重 復出現, 才是資料冗餘!而且是一種低階冗餘,即重複性的冗餘。高階冗餘不是欄位的重複出現,而是欄位的派生出現。
防止資料庫設計打補丁的方法是 “三少原則”
(1) 一個數據庫中表的個數越少越好。
(2) 一個表中組合主鍵的欄位個數越少越好。因為主鍵的作用,一是建主鍵索引,二是做為子表的外來鍵,所以組合主鍵的欄位個數少了,不僅節省了執行時間,而且節省了索引儲存空間;(3) 一個表中的欄位個數越少越好。督促讀者學會“列變行”,這樣就防止了將子表中的欄位拉入到主表中去
提高資料庫執行效率的辦法
在給定的系統硬體和系統軟體條件下,提高資料庫系統的執行效率的辦法是: (1) 在資料庫物理設計時,降低正規化,增加冗餘,少用觸發器,多用儲存過程。(2) 當計算非常複雜、而且記錄條數非常巨大時(例如一千萬條),複雜計算要先在資料庫外面,最後才入庫追加到表中去。(3) 發現某個表的記錄太多,例如超過一千萬條,則要對該表進行水平分割。水平分割的做法是,以該表主鍵PK的某個值為界線,將該表的記錄水平分割為兩個表。若發現某個表的欄位太多,例如超過八十個,則垂直分割該表,將原來的一個表分解為兩個表。(4) 對資料庫管理系統DBMS進行系統優化,即優化各種系統引數,如緩衝區個數。(5) 在使用面向資料的SQL語言進行程式設計時,儘量採取優化演算法。 總之,要提高資料庫的執行效率,必須從資料庫系統級優化、資料庫設計級優化、程式實現級優化,這三個層次上同時下功夫。