1. 程式人生 > >Java開發程式碼規範之MySQL資料庫(一)——建表規約

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