資料庫設計規範
基本規範
- 命名規範:所有命名(庫,表,字段)都使用小寫字母加 _ 組合,user_name, user_age
- 表規範:
- 有相同關系的表可以使用相同的表字首:’user_’
- 每個表都要有自增主鍵,如果有其他唯一辨別可以再加 primary 限制,都要有 ‘add_time’(預設系統時間)
- 表與表的關聯字段名要求盡可能相同
- 用盡可能少的存儲空間來存一個字段的資料,但要求必須夠用!
- 最好給每個字段一個預設值,盡量都不要為 null
- 不使用外鍵,保證資料庫易改動(由程式保證限制)
資料庫範式
- 第一範式:字段值具有原子性,不能再分(所有關系型資料庫都滿足)
- 第二範式:一個表必須具有主鍵,即每行資料都被唯一區分
- 第三範式:一個表中不能包含其他相關表中非關鍵資訊,即資料表不能有備援字段(金額=單價*數量,則金額也屬于備援字段)
- 備注:在設計時,為了滿足性能,往往難以滿足第三範式,合理的備援字段可以減少查詢,相冊表中會添加圖檔的點選數字段,在相冊圖檔表中也會添加圖檔的點選數字段
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