MySQL資料庫創建庫 表的基本規範

2019-10-13     軟體測試開發技術棧

資料庫設計規範

首先我們先看一下,標準規範的建表SQL語句的是什麼樣子的,如下:

庫名規範

  1. 庫命名應該在30個字符以內,存在關聯關係的表在命名時儘量體現關聯關係,如user表與user_registry表。
  2. 庫名稱格式應遵循「業務系統名稱_子系統名稱」,相同模塊的表名儘量使用統一前綴。
  3. 創建資料庫時應該顯式指定字符集,並且字符集只能是 utf8或者 utf8mb4。

建表規範

  1. 表命名和欄位命名應該控制在30個字符以內,使用英文小寫單詞,表名應由字母、數字和下劃線組成,禁止使用中文命名,如果有多個單詞需使用下劃線隔開。
  2. 創建表時,表命名時應該用英文單詞的單數形式,如學生信息表命名,應該為student而不是students。
  3. 創建表時,對相關功能的表應當使用相同前綴,前綴通常為這個表的模塊或依賴主實體對象的名稱縮寫,如物資系統採用」wz_」作為前綴。
  4. 創建表時,表欄位命名不建議使用資料庫關鍵字,如:name,time ,datetime
  5. 創建表時,應該顯式申明字符集為 utf8或 utf8mb4,如 DEFAULT CHARSET=utf8
  6. 創建表時,應該對欄位和表添加COMMENT。
  7. 創建表時,應該創建主鍵,建議使用 auto_increment的 id作為主鍵(與業務無關,與業務相關欄位應創建唯一索引),類型應為 intbigint。推薦使用bigint類型,因為無符號int存儲範圍為-2147483648~2147483647,溢出後會導致報錯。
  8. 創建表時,應該有創建時間欄位create_time和更新時間欄位update_time。
  9. 創建表時,必填欄位應該儘量設置NOT NULL屬性,同時根據實際業務需要定義DEFAULT值。儘量避免使用NULL,因為使用NULL需要占用額外的空間存儲、聚合函數計算結果偏差,同時含有NULL值的列,會對SQL優化產生影響,尤其是組合索引中。
  10. 創建表時,不推薦使用blob,text類型,比較浪費硬碟和內存空間,在加載表數據時,會讀取大欄位到內存里從而浪費內存空間,影響系統性能。建議對表中的blob、text等大欄位,垂直拆分到其他表里,僅在需要讀這些對象的時候才去查詢。
  11. 創建表時,對需要頻繁JOIN查詢的欄位,建議在其他表里冗餘存儲。如 username 欄位在user_account,user_registry等表里冗餘存儲username ,減少JOIN查詢。
  12. 創建表時,表與表之間的相關聯欄位儘量使用統一名稱,如 user_account 表 裡面的 username 和 user_registry表裡面的 username 相對應。
  13. 創建表時,文本數據儘量用varchar存儲,時間類型儘量選取timestamp。
  14. 創建中間表時,表名稱建議以 tmp_開頭,時間結尾,需定期清理。
  15. 創建備份表時,表名稱建議以bak_開頭,時間結尾,需定期清理。
  16. 創建表時,應該顯式申明存儲引擎類型,表引擎取決於實際應用場景及當前資料庫中的已經存在的存儲引擎,我們通常使用InnoDB存儲引擎。Innodb存儲引擎支持事務、行級鎖、更好的恢復性、高並發下性能更好,對多核、大內存、SSD等硬體支持更好。

索引規範

  1. 主鍵索引的名稱建議以"pk_"開頭,唯一索引以"uq_"開頭,非唯一索引以"idx_"開頭,以表名、欄位的名稱或縮寫作為後綴,索引名稱必須使用小寫。
  2. 創建索引時,多考慮建立聯合索引,並把欄位值去重之後的個數多的放在前面。
  3. 單索引中每個索引值的長度建議不超過64KB,不要索引blob、text等大欄位,這樣作會讓索引占用太多的存儲空間.。
  4. 單個表上的索引個數建議不超過5個,唯一索引由3個以下欄位組成,並且欄位都是整形時,使用唯一鍵作為主鍵。
  5. 在多表 JOIN的SQL語句里,保證被驅動表的連接列上有索引,這樣JOIN執行效率最高。
  6. 避免存在冗餘索引,合理創建聯合索引(避免冗餘),如果表里已經存在key(a,b),則key(a)為冗餘索引,需要刪除key(a)。

文章來源: https://twgreatdaily.com/XbYC4m0BMH2_cNUg6TW9.html