很多公司有很厚一本的MySQL規(guī)范,規(guī)范內(nèi)容越多臣咖,越難落地執(zhí)行。
阿里的MySQL建表強制規(guī)范只有10條漱牵,大伙可以參考借鑒夺蛇。
畫外音,另外:索引強制規(guī)范有4條酣胀,SQL強制規(guī)范有9條刁赦;
規(guī)范一:是否字段
1、表達是否概念的字段闻镶,必須使用is_xxx的形式命名甚脉;
2、數(shù)據(jù)類型必須是 unsigned tinyint铆农;
3牺氨、1表示是,0表示否墩剖;
舉例:是否刪除
正確:使用is_deleted猴凹,1表示刪除,0表示未刪除
錯誤:deleted, if_deleted, delete_or_not
規(guī)范二:字母與數(shù)字
1岭皂、表名郊霎,字段名禁止出現(xiàn)大寫;
畫外音:MySQL在Windows下不區(qū)分大小寫爷绘,Linux下雖然區(qū)分书劝,但為了避免節(jié)外生枝,統(tǒng)一禁止大寫土至。
2购对、禁止數(shù)字開頭,禁止兩個下劃線中間只有數(shù)字陶因;
舉例:
正確:aliyun_admin洞斯,level3_name
錯誤:AliyunAdmin,level_3_name
規(guī)范三:表名禁止使用復數(shù)
表名表示實體內(nèi)容坑赡,不是實體數(shù)量烙如,禁止使用復數(shù)。
規(guī)范四:禁止使用保留字
常見的例如:desc毅否,range亚铁,match,delayed…
規(guī)范五:主鍵螟加,唯一索引徘溢,普通索引命名規(guī)范
1吞琐、主鍵索引名:pk_xxx
畫外音:primary key
2、唯一索引名:uk_xxx
畫外音:unique key
3然爆、普通索引名:idx_xxx
畫外音:index
規(guī)范六:小數(shù)類型規(guī)范
1站粟、小數(shù)類型使用decimal;
2曾雕、禁止使用float和double奴烙;
畫外音:float和double存在精度損失,比較的時候剖张,可能得到意想不到的結果切诀。
3、如果范圍超過decimal搔弄,可以拆成整數(shù)與小數(shù)分開存儲幅虑;
規(guī)范七:字符串長度非常相近,必須使用定長char
畫外音:預先分配存儲空間顾犹,不會觸發(fā)重新分配倒庵。
規(guī)范八:可變字符串規(guī)范
1、如果字符串長度較長炫刷,且內(nèi)容長度差異較大哄芜,使用varchar;
畫外音:不預先分配存儲空間柬唯,比較節(jié)省空間认臊。
2、如果字符串長度大部分超過5000锄奢,使用text失晴,獨立出一張表單獨存儲;
畫外音:避免影響主表其他字段索引效率拘央。
規(guī)范九:強制字段
1涂屁、必須具備id字段:類型為bigint unsigned,單表時自增灰伟,步長為1拆又,不具備業(yè)務含義;
2栏账、必須具備create_time字段:類型為datetime(除非記錄時區(qū)信息帖族,使用timestamp);
3挡爵、必須具備update_time字段:同上竖般;
規(guī)范十:禁止進行物理刪除操作
畫外音:邏輯操作保留了數(shù)據(jù)資產(chǎn)的同時,能夠追溯操作行為茶鹃。