建庫
1、庫名與應用名稱盡量一致
建表
1、表名、欄位名必須使用小寫字母或數字,禁止出現數字開頭,禁止兩個下劃線中間只出現數字,資料庫欄位名的修改代價很大,因為無法進行預發布,所以欄位名稱需要慎重考慮,
說明:MySQL 在 Windows下不區分大小寫,但在 Linux 下默認是區分大小寫,因此,資料庫名、表名、
欄位名,都不允許出現任何大寫字母,避免節外生枝,
- 正例:aliyun_admin,rdc_config,level3_name
- 反例:AliyunAdmin,rdcConfig,level_3_name
2、表名不使用復數名詞,
說明:表名應該僅僅表示表里面的物體內容,不應該表示物體數量,對應于DO類名也是單數形式,符合表達習慣,
3、表的命名最好是遵循“業務名稱_表的作用”,
- 正例:alipay_task / force_project / trade_config
建欄位
合適的字符存盤長度,不但節約資料庫表空間、節約索引存盤,更重要的是提升檢索速度,
1、資料表必備三欄位:id, create_time, update_time,
說明:其中 id 必為主鍵,型別為 bigint unsigned、單表時自增、步長為 1,create_time, update_time
的型別均為 datetime 型別,前者現在時表示主動式創建,后者過去分詞表示被動式更新,
是與否型別欄位
1、表達是與否概念的欄位,必須使用 is_xxx 的方式命名,資料型別是 unsigned tinyint(1 表示是,0 表示否),
說明:任何欄位如果為非負數,必須是unsigned,
注意:POJO類中的任何布爾型別的變數,都不要加 is 前綴,所以,需要在
設定從 is_xxx 到Xxx的映射關系,資料庫表示是與否的值,使用 tinyint型別,堅持is_xxx的命名方式是為了明確其取值含義與取值范圍,
- 正例:表達邏輯洗掉的欄位名 is_deleted,1 表示洗掉,0 表示未洗掉,
普通欄位
1、禁用保留字,如desc、range、match、delayed 等,請參考 MySQL 官方保留字,
2、如果存盤的字串長度幾乎相等,使用char 定長字串型別,
索引欄位
1、主鍵索引名為 pk_欄位名;唯一索引名為 uk_欄位名;普通索引名則為 idx_欄位名,
說明:pk_ 即 primary key;uk_ 即 unique key;idx_ 即 index 的簡稱
數字欄位
1、小數型別為 decimal,禁止使用 float 和 double,
說明:在存盤的時候,float 和 double
都存在精度損失的問題,很可能在比較值的時候,得到不正確的結果,如果存盤的資料范圍超過 decimal 的范圍,建議將資料拆成整數和小數并分開存盤,
長欄位
1、varchar是可變長字串,不預先分配存盤空間,長度不要超過5000,如果存盤長度大于此值,定義欄位型別為text,獨立出來一張表,用主鍵來對應,避免影響其它欄位索引效率,
改欄位
1、如果修改欄位含義或對欄位表示的狀態追加時,需要及時更新欄位注釋,
冗余欄位
1、欄位允許適當冗余,以提高查詢性能,但必須考慮資料一致,冗余欄位應遵循
- 不是頻繁修改的欄位,
- 不是唯一索引的欄位,
- 不是 varchar 超長欄位,更不能是text欄位,
正例:各業務線經常冗余存盤商品名稱,避免查詢時需要呼叫 IC 服務獲取
分庫分表
1、單表行數超過 500 萬行或者單表容量超過 2GB,才推薦進行分庫分表,
說明:如果預計三年后的資料量根本達不到這個級別,請不要在創建表時就分庫分表,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/253939.html
標籤:其他
上一篇:InnoDB 鎖
