MYSQL數據庫設計規範

http://www.cnblogs.com/lovekingly/p/5044278.html MYSQL數據庫設計規範html

一、數據庫命名規範
    採用26個英文字母(區分大小寫)和0-9的天然數(常常不須要)加上下劃線'_'組成;
    命名簡潔明確(長度不能超過30個字符);
    例如:user, stat, log, 也能夠wifi_user, wifi_stat, wifi_log給數據庫加個前綴;
    除非是備份數據庫能夠加0-9的天然數:user_db_20151210;
     
二、數據庫表名命名規範
    採用26個英文字母(區分大小寫)和0-9的天然數(常常不須要)加上下劃線'_'組成;
    命名簡潔明確,多個單詞用下劃線'_'分隔;
    例如:user_login, user_profile, user_detail, user_role, user_role_relation,
        user_role_right, user_role_right_relation
    表前綴'user_'能夠有效的把相同關係的表顯示在一塊兒;
     
三、數據庫表字段名命名規範
    採用26個英文字母(區分大小寫)和0-9的天然數(常常不須要)加上下劃線'_'組成;
    命名簡潔明確,多個單詞用下劃線'_'分隔;
    例如:user_login表字段 user_id, user_name, pass_word, eamil, tickit, status, mobile, add_time;
    每一個表中必須有自增主鍵,add_time(默認系統時間)
    表與表之間的相關聯字段名稱要求儘量的相同;
 
四、數據庫表字段類型規範
    用盡可能少的存儲空間來存數一個字段的數據;
    例如:能使用int就不要使用varchar、char,能用varchar(16)就不要使用varchar(256);
    IP地址最好使用int類型;
    固定長度的類型最好使用char,例如:郵編;
    能使用tinyint就不要使用smallint,int;
    最好給每一個字段一個默認值,最好不能爲null;
 
五、數據庫表索引規範
    命名簡潔明確,例如:user_login表user_name字段的索引應爲user_name_index惟一索引;
    爲每一個表建立一個主鍵索引;
    爲每一個表建立合理的索引;
    創建複合索引請慎重;
     
六、簡單熟悉數據庫範式
    第一範式(1NF):字段值具備原子性,不能再分(全部關係型數據庫系統都知足第一範式);
        例如:姓名字段,其中姓和名是一個總體,若是區分姓和名那麼必須設立兩個獨立字段;
     
    第二範式(2NF):一個表必須有主鍵,即每行數據都能被惟一的區分;
        備註:必須先知足第一範式;
     
    第三範式(3NF):一個表中不能包涵其餘相關表中非關鍵字段的信息,即數據表不能有沉餘字段;
        備註:必須先知足第二範式;
     
    備註:每每咱們在設計表中不能遵照第三範式,由於合理的沉餘字段將會給咱們減小join的查詢;
          例如:相冊表中會添加圖片的點擊數字段,在相冊圖片表中也會添加圖片的點擊數字段;

MYSQL數據庫設計原則mysql

一、核心原則
    不在數據庫作運算;
    cpu計算務必移至業務層;
    控制列數量(字段少而精,字段數建議在20之內);
    平衡範式與冗餘(效率優先;每每犧牲範式)
    拒絕3B(拒絕大sql語句:big sql、拒絕大事物:big transaction、拒絕大批量:big batch);

二、字段類原則
    用好數值類型(用合適的字段類型節約空間);
    字符轉化爲數字(能轉化的最好轉化,一樣節約空間、提升查詢性能);
    避免使用NULL字段(NULL字段很難查詢優化、NULL字段的索引須要額外空間、NULL字段的複合索引無效);
    少用text類型(儘可能使用varchar代替text字段);
 
三、索引類原則
    合理使用索引(改善查詢,減慢更新,索引必定不是越多越好);
    字符字段必須建前綴索引;
    不在索引作列運算;
    innodb主鍵推薦使用自增列(主鍵創建聚簇索引,主鍵不該該被修改,字符串不該該作主鍵)(理解Innodb的索引保存結構就知道了);
    不用外鍵(由程序保證約束);
 
四、sql類原則
    sql語句儘量簡單(一條sql只能在一個cpu運算,大語句拆小語句,減小鎖時間,一條大sql能夠堵死整個庫);
    簡單的事務;
    避免使用trig/func(觸發器、函數不用客戶端程序取而代之);
    不用select *(消耗cpu,io,內存,帶寬,這種程序不具備擴展性);
    OR改寫爲IN(or的效率是n級別);
    OR改寫爲UNION(mysql的索引合併很弱智);
        select id from t where phone = ’159′ or name = ‘john’;
        =>
        select id from t where phone=’159′
        union
        select id from t where name=’jonh’
    避免負向%;
    慎用count(*);
    limit高效分頁(limit越大,效率越低);
    使用union all替代union(union有去重開銷);
    少用鏈接join;
    使用group by;
    請使用同類型比較;
    打散批量更新;
     
五、性能分析工具
    show profile;
    mysqlsla;
    mysqldumpslow;
    explain;
    show slow log;
    show processlist;

http://www.javashuo.com/article/p-ygksmajv-ck.htmlsql

命名規範數據庫

表名字段名均使用小寫字母,單詞間如下劃線分割。

表名字段名長度禁止超過32個字符,最大支持爲64個字符,爲了統一規範,易於查詢,超過的單詞儘可能可讀縮略的形式進行書寫。

普通索引名稱以 idx_ 開頭,惟一索引以 uk_ 開頭。

外鍵儘可能以被引用表名稱加 _id 組成。

基礎規範segmentfault

統一使用 INNODB 存儲引擎,除非某些特定緣由再行商議。

表字符集統一使用 UTF8,UTF8 字符集存儲漢字佔用3個字節,存儲英文字符佔用一個字節,若是emoji等表情符號的存儲需求,可申請使用 UTF8MB4 字符集。

字段統一添加註釋,id 可除外,type 型需指明主要值的含義,如」1 公開課,2 線上課」。

使用 timestamp 存儲時間。

表必需指定主鍵,儘可能採用自增方式。

不強制使用外鍵約束,此過程由業務端實現,提升性能。

能不用 NOT IN 就不用 NOT IN,會把空和NULL給查出來。

儘量少的使用 TEXT、BLOB 類型。

索引優化規範數據庫設計

對於複雜的查詢,執行 explain,查看索引使用狀況。

重要的 SQL 必須被索引,好比 UPDATE、DELETE 語句的WHERE條件列 ORDER BY、GROUP BY、DISTINCT的字段。

不在低基數列上創建索引,例如「性別」。

若是是索引字段,必定要定義爲not null,由於 null 值會影響 cordinate 統計,影響優化器對索引的選擇,不能保證有值,設置相應的默認值。

單表索引個數儘可能限制在5個之內。

避免使大表的 JOIN。

最左前綴原則,mysql 使用聯合索引時,從左向右匹配,遇到斷開或者範圍查詢時,沒法用到後續的索引列。

儘可能減小直接使用 SELECT * 讀取所有字段。

使用 like 模糊匹配,%不要放首位。

本文參考函數

互聯網MySQL開發規範[http://blog.51cto.com/wangwei007/1709769]

MySQL數據庫開發規範[http://seanlook.com/2016/05/11/mysql-dev-principle-ec/]
相關文章
相關標籤/搜索