建表規約


1. 【強制】表達是與否概念的字段,必須使用is _ xxx 的方式命名,資料型別是unsigned tinyint( 1 表示是,0 表示否) ,此規則同樣適用於odps 建表。

說明:任何欄位如果為非負數,必須是 unsigned 。


2. 【強制】表名、欄位名稱必須使用小寫字母或數字 ; 禁止出現數字開頭,禁止兩個底線中間只出現數字。資料庫欄位名的修改代價很大,因為無法進行預發布,所以欄位名稱需要慎重考慮。

正例: getter _ admin , task _ config ,level 3_ name

反例: GetterAdmin , taskConfig , level _3_ name


3. 【強制】表名不使用複數名詞。

說明:表名應該只表示表裡面的實體內容,不應該表示實體數量,對應於 DO 類別名稱也是單數形式,符合表達習慣。


4. 【強制】停用保留字,如 desc 、 range 、 match 、 delayed 等,請參考 MySQL 官方保留字。


5. 【強制】唯一索引名稱為 uk _欄位名稱 ;普通索引名稱則為 idx _欄位名稱。

說明: 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. 【推薦】表的命名最好是加上「業務名稱_表的作用」。

正例: tiger _ task /  tiger _ reader /  mpp _ config


11. 【建議】庫名與應用程式名稱盡量一致。


12. 【推薦】如果修改欄位意義或對欄位表示的狀態追加時,需要及時更新欄位註解。


13. 【推薦】欄位允許適當冗餘,以提高效能,但必須考慮資料同步的情況。冗餘欄位應遵循:

1 ) 不是頻繁修改的欄位。

2 ) 不是 varchar 超長字段,更不能是 text 字段。

正例:商品類別目名稱使用頻率高,欄位長度短,名稱基本上一成不變,可在相關聯的表中冗餘存儲類別目名稱,避免關聯查詢。


14. 【建議】單表行數超過 500 萬行或單表容量超過 2 GB ,才建議進行分庫分錶。

說明:如果預計三年後的資料量根本達不到這個級別,請不要在建立表格時就分庫分錶。


15. 【參考】適當的字元儲存長度,不但節省資料庫表空間、節約索引存儲,更重要的是提升檢

索速度。

正例:人的年齡用unsigned tinyint( 表示範圍0-255,人的壽命不會超過255 歲);海龜就必須是smallint ,但如果是太陽的年齡,就必須是int; 如果是所有恆星的年齡加起來,那麼就必須使用bigint 。


#