1.級別:[強制] 表達是與否概念的字段,必須使用is_*** 的方式命名,數(shù)據(jù)類型是 unsigned tinyint ( 1表示是 , 0 表示否)
說明:任何字段如果為非負數(shù),必須是 unsigned.
正例:表達邏輯刪除的字段名 is_deleted ,1 表示刪除,0 表示未刪除。
2.級別:[強制] 表名、字段名必須使用小寫字母或數(shù)字 , 禁止出現(xiàn)數(shù)字開頭,禁止兩個下劃線中間只出現(xiàn)數(shù)字。數(shù)據(jù)庫字段名的修改代價很大,因為無法進行預發(fā)布,所以字段名稱要慎重考慮。
說明:mysql 在 windows 下不區(qū)分大小寫,但在linux 下默認是區(qū)分大小寫。因此,數(shù)據(jù)庫名,表名,字段名,都不允許出現(xiàn)大寫字母。
正例: qy_admin ,pay_config, leve3_name
反例:qyAdmin,payConfig,leve_3_name
3.級別:[強制] 表名不使用復數(shù)名詞。
說明:mysql中表名應該僅僅表示表里的實體內容,不應該表示實體數(shù)據(jù),對應于DO類名也是單數(shù)形式,符合表達習慣。
4.級別:[強制] 禁用保留字,如 desc ,range ,match,delayed 等。參考mysql 官方保留字。
5.級別:[強制] 主鍵索引名為 pk_ 字段名;唯一索引名為 uk_字段名;普通索引名則為 idx_字段名。
說明:pk_ 即為 primary key ; uk_ 即 unique key; idx_ 即 index 的簡稱。
6.級別:[強制] 小數(shù)類型為 decimal,禁止使用 float 和 double。
說明:mysql 的 float ,double 在存儲的時候,存在精度損失的問題,很可能在值的比較時,得到不正確的結果。如果存儲的數(shù)據(jù)范圍超過decimal 的范圍,建議將數(shù)據(jù)拆成整數(shù)和小數(shù)分開存儲。
7.級別:[強制] 如果存儲的字符串長度幾乎相等,使用 char 定長字符串類型。
8.級別:[強制] vaarchar 是可變長字符呂,不預先分配存儲空間,長度不要超過5000,如果存儲長度大于此值,定義字段類型為 text ,獨立出來一張表,用主鍵來以應,避免影響其它字段索引效率。
9.級別:[強制] 表必備三個字段:id, create_time,updated_time。
說明:id必為主鍵,類型為 unsigned bigint, 支持的數(shù)字大小為19位。單表時自增,步長為1. create_time, updated_time 類型為timestamp 主動創(chuàng)建,另一個是表示被動更新。
10.級別:[推薦] 表的命名最好是加上 "業(yè)務名稱_表的作用"。
說明:這樣能清楚的知道每個表的作用。
正例: user_task ,pay_config, force_extra
11.級別:[推薦] 庫名與應用名稱盡量一致。
12.級別:[推薦] 如果修改字段含義或對字段表示的狀態(tài)追加時,需要及時更新字段注釋。
13.級別:[推薦] 字段允許適當冗余,以提高查詢性能,但必須考慮數(shù)據(jù)一致,冗余字段應遵循:
1)不是頻繁修改的字段。
2)不是varchar 超長字段,更不能是 text 字段。
正例: 商品類目名稱使用頻率高,字段長度短,名稱基本一成不變,可在相關聯(lián)的表中冗余存儲類目名稱,避免關聯(lián)查詢。
14.級別:[推薦] 單表行數(shù)超過500萬行或者單表容量超過2GB,才推薦進行分庫分表。
說明:mysql 如果預計三年后的數(shù)據(jù)量根本達不到這個級別,請不要在創(chuàng)建表時就分庫分表。
15.級別[參考] 合適的字符存儲長度,不但節(jié)約數(shù)據(jù)庫表空間,節(jié)約索引存儲,更重要的是提升檢索速度。。