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