建表規約
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 。