1. 程式人生 > >( 一) 建表規約 -【MySQL資料庫】

( 一) 建表規約 -【MySQL資料庫】

  1. 【強制】表達是與否概念的欄位,必須使用 is _ xxx 的方式命名,資料型別是 unsigned tinyint
    ( 1 表示是,0 表示否 ) 。
    說明:任何欄位如果為非負數,必須是 unsigned 。
    正例:表達邏輯刪除的欄位名 is_deleted ,1 表示刪除,0 表示未刪除。

  2. 【強制】表名、欄位名必須使用小寫字母或數字 , 禁止出現數字開頭,禁止兩個下劃線中間只
    出現數字。資料庫欄位名的修改代價很大,因為無法進行預釋出,所以欄位名稱需要慎重考慮。
    說明:MySQL 在 Windows 下不區分大小寫,但在 Linux 下預設是區分大小寫。因此,資料庫
    名、表名、欄位名,都不允許出現任何大寫字母,避免節外生枝。
    正例: aliyun _ admin , rdc _ config , level 3_ name
    反例: AliyunAdmin , rdcConfig , level 3

    name

  3. 【強制】表名不使用複數名詞。
    說明:表名應該僅僅表示表裡面的實體內容,不應該表示實體數量,對應於 DO 類名也是單數
    形式,符合表達習慣。

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

  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. 【推薦】表的命名最好是加上“業務名稱_表的作用”。
    正例: alipay _ task / force _ project / trade _ config
    阿里巴巴 Java 開發手冊
    —— 禁止用於商業用途,違者必究—— 25 /35

  11. 【推薦】庫名與應用名稱儘量一致。

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

  13. 【推薦】欄位允許適當冗餘,以提高查詢效能,但必須考慮資料一致。冗餘欄位應遵循:
    1 ) 不是頻繁修改的欄位。
    2 ) 不是 varchar 超長欄位,更不能是 text 欄位。
    正例:商品類目名稱使用頻率高,欄位長度短,名稱基本一成不變,可在相關聯的表中冗餘存
    儲類目名稱,避免關聯查詢。

  14. 【推薦】單錶行數超過 500 萬行或者單表容量超過 2 GB ,才推薦進行分庫分表。
    說明:如果預計三年後的資料量根本達不到這個級別,請不要在建立表時就分庫分表。

  15. 【參考】合適的字元儲存長度,不但節約資料庫表空間、節約索引儲存,更重要的是提升檢
    索速度。
    正例:如下表,其中無符號值可以避免誤存負數,且擴大了表示範圍。