天天看點

Java開發代碼規範之MySQL資料庫(一)——建表規約

文章通過學習《阿裡巴巴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 |