分享20個數(shù)據(jù)庫設(shè)計的最佳實踐
數(shù)據(jù)庫設(shè)計是整個程序的重點之一,為了支持相關(guān)程序運行,最佳的數(shù)據(jù)庫設(shè)計往往不可能一蹴而就,只能反復(fù)探尋并逐步求精,這是一個復(fù)雜的過程,也是規(guī)劃和結(jié)構(gòu)化數(shù)據(jù)庫中的數(shù)據(jù)對象以及這些數(shù)據(jù)對象之間關(guān)系的過程。下面給出了20個數(shù)據(jù)庫設(shè)計最佳實踐,當(dāng)然,所謂最佳,還是要看它是否適合你的程序。一起來了解了解吧。
1.使用明確、統(tǒng)一的標(biāo)明和列名,例如 School, SchoolCourse, CourceID。
2.數(shù)據(jù)表名使用單數(shù)而不是復(fù)數(shù),例如 StudentCourse,而不是StudentCourses。
3.數(shù)據(jù)表名不要使用空格。
4.數(shù)據(jù)表名不要使用不必要的前綴或者后綴,例如使用School,而不是TblSchool,或者SchoolTable等等。
5.數(shù)據(jù)庫中的密碼要加密,到應(yīng)用中再解密。 (其實就是散列存儲、單向加密)
6.使用整數(shù)作為ID字段,也許現(xiàn)在沒有這個必要,但是將來需要,例如關(guān)聯(lián)表,索引等等。
7.使用整數(shù)字段做索引,否則會帶來很大的性能問題 。
8.使用 bit 作為布爾字段,使用整數(shù)或者varcha是浪費。同時,這類字段應(yīng)該以“Is”開頭。
9.要經(jīng)過認(rèn)證才能訪問數(shù)據(jù)庫,不要給每一個用戶管理員權(quán)限。
10.盡量避免使用“select *”,而使用“select [required_column_list]”以獲得更好的性能。
11.假如程序代碼比較復(fù)雜,使用ORM框架,例如hibernate,iBatis。ORM框架的性能問題可以通過詳細(xì)的配置去解決。
12.分割不常使用的數(shù)據(jù)表到不同的物理存儲以獲得更好的性能。
13.對于關(guān)鍵數(shù)據(jù)庫,使用安全備份系統(tǒng),例如集群,同步等等。
14.使用外鍵,非空等限制來保證數(shù)據(jù)的完整性,不要把所有的東西都扔給程序。
15.缺乏數(shù)據(jù)庫文檔是致命的。你應(yīng)該為你的數(shù)據(jù)庫設(shè)計寫文檔,包括觸發(fā)器、存儲過程和其他腳本。
16.對于經(jīng)常使用的查詢和大型數(shù)據(jù)表,要使用索引。數(shù)據(jù)分析工具可以幫助你決定如何建立索引。
17.數(shù)據(jù)庫服務(wù)器和網(wǎng)頁服務(wù)器應(yīng)該放在不同的機(jī)器上。這回提高安全性,并減輕CPU壓力。
18.Image和blob字段不應(yīng)該定義在常用的數(shù)據(jù)表中,否則會影響性能。
19.范式(Normalization)要按照要求使用以提高性能。Normalization做的不夠會導(dǎo)致數(shù)據(jù)冗余,而過度Normalization 會導(dǎo)致太多的join和數(shù)據(jù)表,這兩種情況都會影響性能。
20.多花點時間在數(shù)據(jù)庫設(shè)計上,否則你將來會付出加倍的時間來償還。
英文原址:javacodegeeks.com
相關(guān)文章
MySQL 5.7之關(guān)于SQL_MODE的設(shè)置
這篇文章主要介紹了MySQL 5.7之關(guān)于SQL_MODE的設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08保證MySQL與Redis數(shù)據(jù)一致性的6種實現(xiàn)方案
這篇文章將聚焦在一個非常重要且復(fù)雜的問題上:MySQL與Redis數(shù)據(jù)的一致性,當(dāng)我們在應(yīng)用中同時使用MySQL和Redis時,如何保證兩者的數(shù)據(jù)一致性呢?下面就來分享幾種實用的解決方案,需要的朋友可以參考下2024-03-03mysql 8.0.16 winx64.zip安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql 8.0.16 winx64.zip安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05mysql8創(chuàng)建、刪除用戶以及授權(quán)、消權(quán)操作詳解
上網(wǎng)找過資料說要進(jìn)入mysql數(shù)據(jù)庫在進(jìn)行這些操作,所以下面這篇文章主要給大家介紹了關(guān)于mysql8創(chuàng)建、刪除用戶以及授權(quán)、消權(quán)操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03