最近一段時間一邊在線上抓取SQL來優化,一邊在整理這個開發規范,盡量減少新的問題SQL進入生產庫。今天也是對公司的開發做了一次培訓,PPT就不放上來了,里面有十來個生產SQL的案例。因為規范大部分還是具有通用性,所以也借鑒了像去哪兒和趕集的規范,但實際在撰寫本文的過程中,每一條規范的背后無不是在工作中有參照的反面例子的。如果時間可以的話,會抽出一部分或分析其原理,或用案例證明。
一. 命名規范
1.庫名、表名、字段名必須使用小寫字母,并采用下劃線分割
(1)MySQL有配置參數lower_case_table_names=1,即庫表名以小寫存儲,大小寫不敏感。如果是0,則庫表名以實際情況存儲,大小寫敏感;如果是2,以實際情況存儲,但以小寫比較。
(2)如果大小寫混合使用,可能存在abc,Abc,ABC等多個表共存,容易導致混亂。
(3)字段名顯示區分大小寫,但實際使⽤時不區分,即不可以建立兩個名字一樣但大小寫不一樣的字段。
(4)為了統一規范, 庫名、表名、字段名使用小寫字母。
2.庫名以 d 開頭,表名以 t 開頭,字段名以 f_ 開頭
(1)比如表 t_crm_relation,中間的 crm 代表業務模塊名
(2)視圖以view_開頭,事件以event_開頭,觸發器以trig_開頭,存儲過程以proc_開頭,函數以func_開頭
(3)普通索引以idx_col1_col2命名,唯一索引以uk_col1_col2命名(可去掉f_公共部分)。如 idx_companyid_corpid_contacttime(f_company_id,f_corp_id,f_contact_time)
3.庫名、表名、字段名禁止超過32個字符,需見名知意
庫名、表名、字段名支持最多64個字符,但為了統一規范、易于辨識以及減少傳輸量,禁止超過32個字符
4.臨時庫、表名須以tmp加日期為后綴
如 t_crm_relation_tmp0425。備份表也類似,形如 _bak20160425 。
5.按日期時間分表須符合_YYYY[MM][DD]格式
這也是為將來有可能分表做準備的,比如t_crm_ec_record_201403,但像 t_crm_contact_at201506就打破了這種規范。
不具有時間特性的,直接以 t_tbname_001 這樣的方式命名。
二. 庫表基礎規范
1.使用Innodb存儲引擎
5.5版本開始mysql默認存儲引擎就是InnoDB,5.7版本開始,系統表都放棄MyISAM了。
2.表字符集統一使用UTF8
(1)UTF8字符集存儲漢字占用3個字節,存儲英文字符占用一個字節
(2)校對字符集使用默認的 utf8_general_ci
(3)連接的客戶端也使用utf8,建立連接時指定charset或SET NAMES UTF8;。(對于已經在項目中長期使用latin1的,救不了了)
(4)如果遇到EMOJ等表情符號的存儲需求,可申請使用UTF8MB4字符集
新聞熱點
疑難解答