天天看點

資料庫設計規範及mysql使用原則資料庫設計規範mysql 使用原則

資料庫設計規範

基本規範

  • 命名規範:所有命名(庫,表,字段)都使用小寫字母加 _ 組合,user_name, user_age
  • 表規範:
    • 有相同關系的表可以使用相同的表字首:’user_’
    • 每個表都要有自增主鍵,如果有其他唯一辨別可以再加 primary 限制,都要有 ‘add_time’(預設系統時間)
    • 表與表的關聯字段名要求盡可能相同
    • 用盡可能少的存儲空間來存一個字段的資料,但要求必須夠用!
    • 最好給每個字段一個預設值,盡量都不要為 null
    • 不使用外鍵,保證資料庫易改動(由程式保證限制)

資料庫範式

  1. 第一範式:字段值具有原子性,不能再分(所有關系型資料庫都滿足)
  2. 第二範式:一個表必須具有主鍵,即每行資料都被唯一區分
  3. 第三範式:一個表中不能包含其他相關表中非關鍵資訊,即資料表不能有備援字段(金額=單價*數量,則金額也屬于備援字段)
  4. 備注:在設計時,為了滿足性能,往往難以滿足第三範式,合理的備援字段可以減少查詢,相冊表中會添加圖檔的點選數字段,在相冊圖檔表中也會添加圖檔的點選數字段

mysql 使用原則

核心原則

  • 控制列數量(字段少而精,字段數建議在20以内)
  • 不在資料庫做運算,cpu計算務必移至業務層
  • 拒絕3B(拒絕大sql語句:big sql、拒絕大事物:big transaction、拒絕大批量:big batch)

字段設計原則

  • 用好數值類型,能用數值就不要用字元串
  • 字元轉化為數字(能轉化的最好轉化,同樣節約空間、提高查詢性能),可以在後端常量中加上轉化約定
  • 避免使用NULL字段,添加 NOT NULL 限制,(NULL字段很難查詢優化、NULL字段的索引需要額外空間、NULL字段的複合索引無效,可以添加預設值避免null)

sql原則

  • sql語句盡可能簡單(一條sql隻能在一個cpu運算,大語句拆小語句,減少鎖時間,一條大sql可以堵死整個庫)
  • 不使用 select * (消耗cpu,io,記憶體,帶寬,且這種程式不具有擴充性)
  • OR改寫為IN(or的效率是n級别),OR改寫為UNION(mysql的索引合并很弱智)
select id from t where phone = ’′ or name = ‘john’;
    =>
    select id from t where phone=’′
    union
    select id from t where name=’jonh’
           
  • limit高效分頁(limit越大,效率越低)
  • 使用group by