本文主要說下關(guān)于數(shù)據(jù)庫方面的規(guī)范,希望能夠幫助到大家。
1、首先是工具,我們用的是 Mysql數(shù)據(jù)庫,工具是Workbench,這個工具是專門為Mysql設計的數(shù)據(jù)庫建模工具,你可以用它進行設計和創(chuàng)建新的數(shù)據(jù)庫圖示,在windows上面我們大多用的是PowerDesiger,在mac上用workbench目前來看還是挺好用的,無論是建立數(shù)據(jù)庫文檔,ER圖,數(shù)據(jù)庫的遷移都還是很貼心的。
2、數(shù)據(jù)庫字符集UTF-8,統(tǒng)一字符集,也就避免了麻煩的亂碼轉(zhuǎn)碼問題,UTF-8幾乎是好多工具的通用碼,特殊的列使用擴展字符集。
3、每個文件都有一個script文件,這個script文件里面有的應該是這個項目的數(shù)據(jù)庫設計ER圖,還有該項目數(shù)據(jù)庫初始的sql語句,任何有關(guān)于該項目的數(shù)據(jù)庫更改,都應該首先更改該script文件,并且標注日期,確保該script文件是正確的據(jù)庫設計,因為我們在上線的時候要給運維上傳的sql語句就是從這個ER圖導出來的。
4、相關(guān)聯(lián)的業(yè)務數(shù)據(jù)表的名字要使用相同的前綴,確保一個業(yè)務的多個表在大量表中處于相鄰位置。這點覺得還是很貼心的。
5、數(shù)據(jù)經(jīng)常變化的放到一張表;數(shù)據(jù)不變化的放到一張表;數(shù)據(jù)不經(jīng)常變化的一張表。
6、存儲引擎必須使用InnoDB,InnoDB支持事務、行級鎖、并發(fā)性能更好。
7、不可使用存儲過程、視圖、觸發(fā)器,高并發(fā)大數(shù)據(jù)的互聯(lián)網(wǎng)業(yè)務,如果并發(fā)量太大,使用這些會把數(shù)據(jù)庫拖垮,把業(yè)務邏輯放到服務層具備更好的擴展性,需求有所變化的時候也更好修改,而不用去修改繁瑣的sql語句,并且能夠輕易簡單的 實現(xiàn)增加機器就增加性能,數(shù)據(jù)庫的專長在于存儲和索引。專業(yè)的事情就讓專業(yè)的人來做。
8、禁止使用Blob和Clob類型的字段,可以使用單獨的庫、單獨的表來存儲大文本的數(shù)據(jù),這樣做的話,當運維想要處理、備份數(shù)據(jù)的時候,這樣的表可以針對性的優(yōu)化,不用在意一些別的因素。
9、表名使用下劃線分隔,id主鍵統(tǒng)一命名為id BIGINT(20),數(shù)據(jù)寫入時可以提高插入性能。
10、每個表中必須包含字段createTime字段,創(chuàng)建時間,確保未來默認排序。
11、外鍵禁止關(guān)聯(lián)。外鍵會導致表和表之間的耦合,update和delete都會涉及到相關(guān)聯(lián)的表,十分影響sql性能,還有可能會造成死鎖。
12、保存時間相關(guān)的數(shù)據(jù),要使用時間戳的格式,因為在未來可能會涉及到時區(qū)的問題,而時間戳可以完全避免該問題;保存貨幣相關(guān)的數(shù)據(jù),要保存最小貨幣的數(shù)量,避免有小數(shù)點,因為可能會引起數(shù)據(jù)精度問題,導致數(shù)據(jù)不準確。
13、索引命名定義規(guī)則,其中一定要包括表名+列名,來確保該索引在整個數(shù)據(jù)庫中是唯一的。
14、建立組合索引的同時要把區(qū)分度較高的放在前面,這樣能夠更加有效的過濾數(shù)據(jù)。
以上都是自己開發(fā)過程中遵守的,并且感覺很高效的數(shù)據(jù)庫規(guī)范,簡單整理下,沉淀下來,希望能幫助到讀者們。