今天就跟大家聊聊有關(guān)mysql數(shù)據(jù)庫的規(guī)范有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
基礎(chǔ)規(guī)范
【建議】使用InnoDB存儲引擎
【強制】無特殊要求必須使用UTF8字符集
【強制】數(shù)據(jù)表、數(shù)據(jù)字段必須加入中文注釋
【強制】禁止使用存儲過程、視圖、觸發(fā)器、Event。特殊情況申請評審
【強制】不在數(shù)據(jù)庫做運算,cpu計算務(wù)必移至業(yè)務(wù)層
命名規(guī)范
【建議】 命名使用具有實際意義的英文詞匯、詞匯縮寫,詞匯之間使用下劃線分隔;
【強制】 命名只能使用小寫英文字母、數(shù)字、下劃線,且必須英文字母開頭,下劃線為分割符,不能超過32個字符,數(shù)據(jù)庫對象名盡可能簡短。避免使用MySQL的保留字
【強制】普通表名命名規(guī)則為功能模塊前綴_+tablename(login_users); 臨時表:tmp前綴+tablename+8位時間后綴(tmp_users_20170501); 備份表:bak前綴+tablename+8位時間后綴(bak_users_20170501); 歸檔表命名規(guī)則:arch前綴+tablename+歸檔規(guī)則 (arch _users_2013)【強制】各表之間相同意義的字段必須同名,數(shù)據(jù)類型、長度、單位必須相同。
【強制】索引以idx_開頭唯一索引以uq_idx開頭,后面跟索引所在字段名,多單詞組成的列名,取盡可能代表意義的縮寫,如t_user_contacts表member_id和friend_id上的組合索引:idx _mid_fid,,組合索引命名應(yīng)注意字段順序。如在字段member_id和字段user_id上創(chuàng)建組合索引,則可以命名為idx _uid_mid(userid, member_id)
常用約定:
【建議】序號列字段:以id為后綴,如:user_id表示用戶編號
【建議】編碼字段:以code為后綴,如:cust_code表示客戶編碼
【建議】布爾值字段:以“is_”前綴+字段描述+形容詞。如member表上表示為enabled的會員的列命名為is_member_enabled。0:否;1:是
【強制】狀態(tài)字段:以“_status”為后綴,前面加業(yè)務(wù)邏輯名。如:用戶狀態(tài)可命名為user_status,訂單狀態(tài)為order_status 以此類推
表設(shè)計規(guī)范(***)
【強制】表設(shè)計必須有表主鍵,并且主鍵不能提供給外部系統(tǒng),給外部系統(tǒng)的必須使用業(yè)務(wù)主鍵,如user表的業(yè)務(wù)主鍵設(shè)計,如下id 表主鍵,自增,表主鍵不能像外部系統(tǒng)提供 xxx_id 為業(yè)務(wù)主鍵,使用IdGenerater(id生成工具類生成,見附件),可以提供給外部系統(tǒng),使用bigint存儲
【強制】表必須有主鍵,如果使用auto_increment作為自增主鍵,注意導(dǎo)出初始化腳本時不要設(shè)置起始值。
【強制】枚舉類型使用tinyint類型
【強制】單表字段數(shù)不要太多,最多不要大于50個,且盡可能的少用字符型數(shù)據(jù)類型
【強制】日期的數(shù)據(jù)(不包含時分秒的),使用int(11)存儲(如,yyyy、yyyyMM、yyyyMMdd),時間的數(shù)據(jù)((包含時分秒的)),使用datetime存儲。
【強制】每個表都必須包含兩個保留字段:create_time(創(chuàng)建時間),update_time(最后修改時間)creater varchar(50)(創(chuàng)建人),updater varchar(50)(修改人),設(shè)置為非空字段屬性。這兩個字段不包含額外的業(yè)務(wù)邏輯。
【強制】每個表設(shè)置is_del(0為未刪除,1為刪除)標(biāo)記位字段,設(shè)置為非空,默認(rèn)為0的字段屬性,生產(chǎn)環(huán)境不允許物理刪除。特殊表再議
【強制】表和列定義的時候必須加上comment,并能精確描述表和列的含義。類型、狀態(tài)等字段必須明確給出各個值代表的含義;金錢等計量字段必須給出精確的計量單位;外鍵字段必須明確給出關(guān)聯(lián)的表和字段
【強制】若需要JOIN的字段(連接鍵),字段名稱、數(shù)據(jù)類型、長度和單位必須保持絕對一致,避免隱式轉(zhuǎn)換
【強制】禁止使用TEXT、BLOB類型(大文本、大文件、大照片存放在文件系統(tǒng)),可以把文件放到文件服務(wù)器中,數(shù)據(jù)庫只存url
【強制】不推薦使用enum,set。因為它們浪費空間,且枚舉值寫死了,變更不方便。推薦使用tinyint或smallint
【強制】如果有業(yè)務(wù)流轉(zhuǎn)的加字段:業(yè)務(wù)流水號
【強制】如果一次操作多張表需要查看修改或者回退操作的,加操作流水號
【強制】禁止創(chuàng)建外鍵約束,外鍵約束由應(yīng)用程序控制。外鍵會導(dǎo)致表與表之間耦合,update與delete操作都會涉及相關(guān)聯(lián)的表,影響sql 的性能,甚至?xí)斐伤梨i。
【強制】排序字段都不允許為空,并設(shè)置默認(rèn)值。
字段設(shè)計規(guī)范
【強制】字符串類型一律使用VARCHAR類型,對于明確長度的建議使用char,如身份證號等
【強制】禁止使用TEXT、BLOB類型。會浪費更多的磁盤和內(nèi)存空間,非必要的大量的大字段查詢會淘汰掉熱數(shù)據(jù),導(dǎo)致內(nèi)存命中率急劇降低,影響數(shù)據(jù)庫性能
【建議】字段定義為NOT NULL并且提供默認(rèn)值。null的列使索引/索引統(tǒng)計/值比較都更加復(fù)雜,對MySQL來說更難優(yōu)化;需要更多的存儲空;只能采用is null或is not null,而不能采用=、in、='2017-02-15'-- 正確的寫法是: SELECT uid FROM t_user WHERE day>= xxxfunc ('2017-02-15 00:00:00')
【強制】禁止使用OR條件。使用IN或者UINON代替
【強制】禁止大表使用JOIN查詢,禁止大表使用子查詢。極大影響數(shù)據(jù)庫性能
【強制】禁止負(fù)向查詢,以及%開頭的模糊查詢。a)負(fù)向查詢條件:NOT、!=、、!、NOT IN、NOT LIKE等,會導(dǎo)致全表掃描 b)%開頭的模糊查詢,會導(dǎo)致全表掃描
【強制】使用IN不能超過200
【建議】UNION ALL 代替 UNION操作。
【建議】order by的順序盡量與索引保持一致
【強制】大批量更新凌晨操作,避開高峰
看完上述內(nèi)容,你們對mysql數(shù)據(jù)庫的規(guī)范有哪些有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。