\1. 【強制】表達是與否概念的字段,必須使用 is_xxx 的方式命名,數(shù)據(jù)類型是 unsigned tinyint
(1 表示是,0 表示否)。
說明:任何字段如果為非負數(shù),必須是 unsigned。
注意:POJO 類中的任何布爾類型的變量,都不要加 is 前綴,所以,需要在<resultMap>設(shè)置從 is_xxx 到
Xxx 的映射關(guān)系。數(shù)據(jù)庫表示是與否的值,使用 tinyint 類型,堅持 is_xxx 的命名方式是為了明確其取值含義與取值范圍。
正例:表達邏輯刪除的字段名 is_deleted,1 表示刪除,0 表示未刪除。
\2. 【強制】表名、字段名必須使用小寫字母或數(shù)字,禁止出現(xiàn)數(shù)字開頭,禁止兩個下劃線中間只出現(xiàn)數(shù)字。數(shù)據(jù)庫字段名的修改代價很大,因為無法進行預(yù)發(fā)布,所以字段名稱需要慎重考慮。
說明:MySQL 在 Windows 下不區(qū)分大小寫,但在 Linux 下默認是區(qū)分大小寫。因此,數(shù)據(jù)庫名、表名、字段名,都不允許出現(xiàn)任何大寫字母,避免節(jié)外生枝。
正例:aliyun_admin,rdc_config,level3_name
反例:AliyunAdmin,rdcConfig,level_3_name
\3. 【強制】表名不使用復(fù)數(shù)名詞。
說明:表名應(yīng)該僅僅表示表里面的實體內(nèi)容,不應(yīng)該表示實體數(shù)量,對應(yīng)于 DO 類名也是單數(shù)形式,符合表達習(xí)慣。
\4. 【強制】禁用保留字,如 desc、range、match、delayed 等,請參考 MySQL 官方保留字。
\5. 【強制】主鍵索引名為 pk_字段名;唯一索引名為 uk_字段名;普通索引名則為 idx_字段名。
說明:pk 即 primary key;uk 即 unique key;idx_ 即 index 的簡稱。
\6. 【強制】小數(shù)類型為 decimal,禁止使用 float 和 double。
說明:在存儲的時候,float 和 double 都存在精度損失的問題,很可能在比較值的時候,得到不正確的結(jié)果。如果存儲的數(shù)據(jù)范圍超過 decimal 的范圍,建議將數(shù)據(jù)拆成整數(shù)和小數(shù)并分開存儲。
\7. 【強制】如果存儲的字符串長度幾乎相等,使用 char 定長字符串類型。
\8. 【強制】varchar 是可變長字符串,不預(yù)先分配存儲空間,長度不要超過 5000,如果存儲長度大于此值,定義字段類型為 text,獨立出來一張表,用主鍵來對應(yīng),避免影響其它字段索引效率。
\9. 【強制】表必備三字段:id, create_time, update_time。
說明:其中 id 必為主鍵,類型為 bigint unsigned、單表時自增、步長為 1。create_time, update_time
的類型均為 datetime 類型,前者現(xiàn)在時表示主動式創(chuàng)建,后者過去分詞表示被動式更新。
10.【推薦】表的命名最好是遵循“業(yè)務(wù)名稱_表的作用”。
正例:alipay_task / force_project / trade_config
11.【推薦】庫名與應(yīng)用名稱盡量一致。
12.【推薦】如果修改字段含義或?qū)ψ侄伪硎镜臓顟B(tài)追加時,需要及時更新字段注釋。
13.【推薦】字段允許適當冗余,以提高查詢性能,但必須考慮數(shù)據(jù)一致。冗余字段應(yīng)遵循:
1) 不是頻繁修改的字段。
2) 不是唯一索引的字段。
3) 不是 varchar 超長字段,更不能是 text 字段。
正例:各業(yè)務(wù)線經(jīng)常冗余存儲商品名稱,避免查詢時需要調(diào)用 IC 服務(wù)獲取。
14.【推薦】單表行數(shù)超過 500 萬行或者單表容量超過 2GB,才推薦進行分庫分表。
說明:如果預(yù)計三年后的數(shù)據(jù)量根本達不到這個級別,請不要在創(chuàng)建表時就分庫分表。
15.【參考】合適的字符存儲長度,不但節(jié)約數(shù)據(jù)庫表空間、節(jié)約索引存儲,更重要的是提升檢索速度。
正例:無符號值可以避免誤存負數(shù),且擴大了表示范圍。
對象 | 年齡區(qū)間 | 類型 | 字節(jié) | 表示范圍 |
---|---|---|---|---|
人 | 150 歲之內(nèi) | tinyint unsigned | 1 | 無符號值:0 到 255 |
龜 | 數(shù)百歲 | smallint unsigned | 2 | 無符號值:0 到 65535 |
恐龍化石 | 數(shù)千萬年 | int unsigned | 4 | 無符號值:0 到約 43 億 |
太陽 | 約 50 億年 | bigint unsigned | 8 | 無符號值:0 到約 10 的 19 次方 |
更多建議: