文章通過學習《阿裡巴巴Java開發手冊》整理
1。表達是否概念的字段,必須使用is_xxx的方式命名,資料類型是unsigned tinyint(1表示是,0表示否)
說明:任何字段如果為非負數,必須是unsigned。
例子:表達邏輯删除的字段名is_deleted,1表示删除,0表示未删除
2。表名、字段名必須使用小寫字母或數字,禁止出現數字開頭,禁止兩個下劃線中間隻出現數字。
MySQL在windows下不區分大小寫,但在Linux下預設區分大小寫。so,資料庫名、表名、字段名都不允許出現任何大寫字母,避免節外生枝。
3。表名不使用複數名詞。
表名應該僅僅表示表裡面的實體内容,不應該表示實體數量。對于DO類名也是單數形式,符合表達習慣。
4。禁用保留字。
如desc、range、match、delayed等。
5。主鍵索引名為
pk_字段名
;唯一索引名為
uk_字段名
;普通索引名為idx_字段名。
pk_:primary key
uk_:unique key
idx_:index
6。小數類型為decimal,禁止使用float和double
float和double在存儲的時候,存在精度損失的問題,很可能在值的比較時,得到不正确的結果。如果存儲的資料範圍超過decimal的範圍,建議将資料拆成整數和小數分開存儲。
7。如果存儲的字元串長度幾乎相等,使用char定長字元串類型。
8。varchar是可變長字元串,不預先配置設定存儲空間,長度不要超過5000,如果存儲長度大于此值,定義字段類型為text,獨立出來一張表,用主鍵來對應,避免影響其他字段索引效率。
9。表必備三字段:
id,gmt_create,gmt_modified
.
id必為主鍵(unsigned bigint,單表時自增,步長為1),
gmt_create,gmt_modified
的類型均為date_time類型,前者現在時表示主動建立,後者過去分詞表示被動更新。
10。表的命名最好加上“業務名稱_表的作用”
eg:
alipay_task / force_project
11.庫名與應用名稱盡量一緻。
12。如果修改字段含義或對字段表示的狀态追加時,需要及時更新字段注釋。
13。字段允許适當備援,以提高查詢性能,但必須考慮資料一緻,備援字段應遵循:
不是頻繁修改的字段;
不是varchar超長字段,更不能是text字段
14。單表行數超過500萬行或者單表容量超過2GB,才推薦進行分庫分表。
說明:如果預計三年後的數量根本達不到這個級别,請不要在建立表時就分庫分表。
15。合适的字元存儲長度,不但節約資料庫表空間,節約索引存儲,更重要的是提升檢索速度。
| 對象 | 年齡區間 | 類型 | 位元組 | 表示範圍 |
| ------------- |:-------------😐 -----😐
| 人 | 150歲之内 | unsigned tinyint | 1 | 無符号值:0-255 |
| 龜 | 數百歲 | unsigned smallint | 2 | 無符号值:0-65535 |
| 恐龍化石 | 數千萬年 | unsigned int | 4 | 無符号值:0-約42.9億 |
| 太陽 | 約50億年 | unsigned bigint | 8 | 無符号值:0-約10^19 |