通常情況下,可以從兩個方面來判斷資料庫是否設計的比較規範。一是看看是否擁有大量的窄表,二是寬表的數量是否足夠的少。若符合這兩個條件,則可以說明這個資料庫的正常化水平還是比較高的。當然這是兩個泛泛而談的指標。為了達到資料庫設計正常化的要求最好滿足以下20條規則:
1、使用定義良好的和一致的名稱表和列(如School、StudentCourse CourseID…)。
2、使用單一的表名(即使用StudentCourse代替StudentCourses)。表代表實體的集合,不需要複數的名字。
3、不要使用空格來定義表名。否則你將不得不使用’{‘、”、’”’等字元定義表(例如accesing表學生課程你會寫”Student Course”。StudentCourse要好得多)。
4、不要使用不必要的首碼或尾碼表名(例如使用School而不是TblSchool、SchoolTable等等)。
5、保持加密密碼的安全。在應用程式需要時進行解密。(散列儲存、單向加密)
6、使用整數類型的id應用於所有表。如果暫時不需要id,它可能需要在未來(關聯表,索引……)。
7、選擇整數資料類型(或其變體)的列為索引。varchar類型的列索引將會導致效能問題。
8、使用bit類型應用於布爾值。使用integer或varchar就會產生不必要的儲存消耗。當命名這些列的時候最好以”Is”開頭。
9、需要資料庫存取權限。不要給每個使用者admin角色。
10、避免”select *”查詢,直到它真的是必要的。使用”選擇[required_columns_list]”獲得更好的效能。
11、假如程式碼比較複雜,使用ORM(object relational mapping)架構。ORM架構的效能問題可以由詳細的參數配置。
12、把那些用得很少或者沒有使用的表分配到不同的實體儲存體,這樣就可以得到更好的查詢效能。
13、對於那些大的、敏感的和以及最要的資料庫系統,利用災難恢複與安全的服務。例如容錯移轉叢集、自動備份、複製等。
14、對資料的完整性使用約束(外鍵,檢查,not null…)。不要把所有的控制邏輯交給應用程式代碼。
15、缺乏資料庫文檔是很不幸的。編寫資料庫設計文檔使用ER圖並且說明。並且為你觸發器、預存程序和其他指令碼寫注釋。
16、為大表並且常用的查詢增加索引。分析器工具可以用來確定哪裡需要使用索引。查詢一系列的行來作為條件,聯合索引通常是更好。對於單個欄位的條件查詢,為該字元作為索引通常是更好。
17、資料庫伺服器和web伺服器必須部署在不同的機器上。這將提供更多的安全(攻擊者不能直接存取資料)並且伺服器CPU和記憶體效能會更好,因為減少請求數和處理。
18、圖形和blob資料列不能定義在頻繁查詢的表中,這是基於的效能考慮。把這些資料單獨放在單獨的表中。然後用引用指向這些資料,也就是關聯查詢。
19、必須使用資料庫設計第三範式正常化要求,最佳化效能。不使用範式將導致過度重複的資料在太多的表中,過度使用範式將導致太多的表需要jion。他們都會使用系統的效能變得很差。
20、很有必要花時間對資料庫進行建模和設計。否則為了減少設計時間將導致花費 10倍/100倍甚至1000倍的時候用於維護和重新設計。
原文地址:20 Database Design Best Practices