數據庫設計是整個程序的重點之一,為了支持相關程序運行,最佳的數據庫設計往往不可能一蹴而就,只能反復探尋並逐步求精,這是一個復雜的過程,也是規划和結構化數據庫中的數據對象以及這些數據對象之間關系的過程。下面給出了20個數據庫設計最佳實踐,當然,所謂最佳,還是要看它是否適合你的程序。一起來了解了解吧。
1.使用明確、統一的標明和列名,例如 School, SchoolCourse, CourceID。
2.數據表名使用單數而不是復數,例如 StudentCourse,而不是StudentCourses。
3.數據對象、變量的命名都采用英文字符,禁止使用中文命名.絕對不要在對象名的字符之間留空格
4.數據表名不要使用不必要的前綴或者后綴,例如使用School,而不是TblSchool,或者SchoolTable等等。
5.相關應用的數據表使用同一前綴
6.使用整數作為ID字段,也許現在沒有這個必要,但是將來需要,例如關聯表,索引等等。
7.使用整數字段做索引,否則會帶來很大的性能問題 。
8.使用 bit 作為布爾字段,使用整數或者varcha是浪費。同時,這類字段應該以“Is”開頭。
9.要經過認證才能訪問數據庫,不要給每一個用戶管理員權限。
10.盡量避免使用“select *”,而使用“select [required_column_list]”以獲得更好的性能。
11.假如程序代碼比較復雜,使用ORM框架,例如hibernate,iBatis。ORM框架的性能問題可以通過詳細的配置去解決。
12.分割不常使用的數據表到不同的物理存儲以獲得更好的性能。
13.數據庫中的密碼要加密,到應用中再解密。 (其實就是散列存儲、單向加
14.使用外鍵,非空等限制來保證數據的完整性,不要把所有的東西都扔給程序。
15.缺乏數據庫文檔是致命的。你應該為你的數據庫設計寫文檔,包括觸發器、存儲過程和其他腳本。
16.對於經常使用的查詢和大型數據表,要使用索引。數據分析工具可以幫助你決定如何建立索引。
17.數據庫服務器和網頁服務器應該放在不同的機器上。這回提高安全性,並減輕CPU壓力。
18.Image、text、blob字段不應該定義在常用的數據表中,否則會影響性能。
19.存儲精確浮點數必須使用decimal,替代使用float和double.(float大於等於8位不准確,double大於16位不准確)
20.不要使用mysql關鍵字作為表名和字段名
21.盡量字段定義為not null
22.建表時要考慮不同表之間的相同屬性值的字段,列類型,類型長度,是否非空,是否默認值,需保持一致,否則無法正確使用索引進行關聯對比
23.建索引時要注意,綜合評估數據密度和數據分布,不要建重復索引,index(column1,column2,column3),相當於建立了 index(column1),index(column1,column2)和index(column1,column2,column3)三個索引
24.非唯一索引的索引命名格式:idx_tablename_column[column]
25.唯一索引的索引命名格式:uniq_tablename_column[column]
26.每個表的第一個字段設置自增主鍵id (建議使用auto_increment),該id 本身與業務無關
28.對於關鍵數據庫,使用安全備份系統,例如集群,同步等等。密)
29.范式(Normalization)要按照要求使用以提高性能。Normalization做的不夠會導致數據冗余,而過度Normalization 會導致太多的join和數據表,這兩種情況都會影響性能。
30.多花點時間在數據庫設計上,否則你將來會付出加倍的時間來償還
參考鏈接:
http://www.javacodegeeks.com/2012/02/20-database-design-best-practices.html
http://www.cnblogs.com/shockerli/p/20-sql-design-mode.html