MySQL_數據庫命名規范及約定


操作規范

  1. 如無說明,建表時一律采用innodb引擎;
  2. 如無說明,數據庫表編碼集(utf8,utf8_bin)
    ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
  3. 如無備注,則表中的第一個id字段一定是主鍵且為自動增長;
  4. 如無備注,則數值類型的字段請使用UNSIGNED屬性;
  5. 如無備注,排序字段order_id在程序中默認使用降序排列;
  6. 如無備注,所有字段都設置NOT NULL,並設置默認值;
  7. 如無備注,所有的布爾值字段,如is_hot、is_deleted,都必須設置一個默認值,並設為0;
  8. 所有的數字類型字段,都必須設置一個默認值,並設為0;
  9. 針對varchar類型字段的程序處理,請驗證用戶輸入,不要超出其預設的長度;
  10. 建表時將數據字典中的字段中文名和屬性備注寫入數據表的備注中(“PK、自動增長”不用寫);
  11. 數據庫表結構修改操作都需要寫出對應的修改表結構的sql語句,發給數據庫管理人員。避免不同環境的數據庫表結構不統一

庫命名規范

線上環境、開發環境、測試環境數據庫內網域名遵循命名規范

業務名稱:xxx
線上環境:ali.×xx.db
預發布環境:ali.×xx.pdb
測試環境:ali.×xx.tdb
開發環境: ali.×xx.ddb
從庫在名稱后加-s標識,備庫在名稱后加-ss標識
線上從庫:ali.xxx-s.db
線上備庫:ali.xxx-ss.db
注: ali為公司名稱縮寫

表命名規范

規范

1.具備統一前綴,對相關功能的表應當使用相同前綴,如acl_xxx,house_xxx,ppc_xxx;其中前綴通常為這個表的模塊或依賴主實體對象的名字,通常來講表名為:業務_動作_類型,或是業務_類型;

2.表名使用英文小寫單詞,如果有多個單詞則使用下划線隔開;

3.表名簡介,使用常見單詞,避免使用長單詞和生僻詞;

4.表引擎取決於實際應用場景及當前數據庫中的已經存在的存儲引擎;日志及報表類表建議用myisam,與交易,審核,金額相關的表建議用innodb引擎。總體來講數據庫默認innodb;

5.數據表必須有主鍵,且建議均使用auto_increment的id作為主鍵(與業務無關),和業務相關的要做為唯一索引;

6.默認使用utf8字符集(由於數據庫定義使用了默認,數據表可以不再定義,但為保險起見,建議都寫上);

7.所有的表都必須有備注,寫明白這個表中存放的數據內容;

8.預估表數據量,如果數據量較大(超過500w)則需要考慮分表策略。可以等量均衡分表或根據業務規則分表均可。要分表的數據表必須與DBA商量分表策略;

9.職責相近的表,命名規則應該相同;如合同申請,賬戶信息,交友相關等;

約定

  1. 說明:表前綴用項目名稱首字母縮寫;所以表名都小寫,單詞之間用下划線分開,單詞都用單數形式
  2. user – 用戶
  3. category – 分類
  4. goods – 商品、產品等一切可交易網站的物品都用此命名
  5. good_gallery – 物品的相冊
  6. good_cate – 物品的分類,除了單獨作為表名,其他地方分類單詞一律用縮寫cate
  7. attr – 屬性
  8. article – 文章、新聞、幫助中心等以文章形式出現的,一般都用此命名
  9. cart – 購物車
  10. feedback – 用戶反饋
  11. order – 訂單
  12. site_nav – 包括頁頭和頁尾導航
  13. site_config – 系統配置表
  14. admin – 后台用戶 【RBAC標准表】
  15. role – 后台用戶角色【RBAC標准表】
  16. access – 后台操作權限,相當於action【RBAC標准表】
  17. role_admin – 后台用戶對應的角色【RBAC標准表】
  18. access_role – 后台角色對應的權限【RBAC標准表】
  19. 待續

范例

一張在線沖值記錄表:user_bank_deposit這個就非常符合標准,如果叫做userBankDeposit或是user_chongzhi,就非常不友好。

字段命名規范

規范

1.數據庫字段命名與表名命名類似:

2.使用小寫英文單詞,如果有多個單詞使用下划線隔開;

3.使用簡單單詞,避免生僻詞;

4.字段應當有注釋,描述該字段的用途及可能存儲的內容,如枚舉值則建議將該字段中使用的內容都定義出來;

5.是別的表的外鍵均使用xxx_id的方式來表明;

6.表的主鍵一般都約定成為id,自增類型;

7.時間字段,除特殊情況一律采用int來記錄unix_timestamp;

8.網絡IP字段,除特殊情況一律用bigint來記錄inet_aton值;

9.所有字段,均為非空,最好顯示指定默認值;

10.有些驅動對tinyint支持不夠好,通常建義按容量來選擇字段;

  1. text字段盡量少用,或是拆到冗余表中;

  2.  

    可能關聯多個不同表的id的字段建議叫 RELATION_ID(關聯id)
    ​    時間以字段以 _TIME 后綴結尾
    ​    帶有標識的字段以 _FLAG 后綴結尾
    ​    自定義code碼字段以 _CODE 后綴結尾
    ​    所有使用0,1,2等字段代表特殊含義的需要在字段注釋中說明清楚,碼中說明清楚,修改了定義規則需要及時修改數據庫注釋。

約定

  1. 表名_id – 通常用作外鍵命名
  2. cid – 特殊的編號,帶有元數據,方便關聯查詢,你可以把它理解成類別(層次)編號。舉個例子,產品在分類時,往往需要將其歸類到子分類下,相應的字段中也一般只記錄子分類的id,這時若需要知道該產品屬於哪個主分類,就需要通過子分類信息再查詢到主分類信息,這是比較麻煩的,cid字段就是要解決這個問題。一般的站點幾十個分類肯定是夠用了,所以這里假設某一主分類的cid為11,則子分類的cid從1101開始編號,處理時只需截取前兩位數值便可知道該產品屬於哪一個主分類了。
  3. add_time – 添加時間、上架時間等
  4. last_time – 最后操作時間,如登錄、修改記錄
  5. expire_time – 過期時間
  6. name – 商品名稱、商家名稱等,不要跟title混用,title只用於文章標題、職稱等
  7. price – 價格
  8. thumb – 只要是列表頁面中的窗口圖,一律用此命名
  9. image_src – 相冊中的圖片地址一律用此命名,不要出現各種img,image,img_url,thumb_url等
  10. head_thumb – 用戶頭像, 雖然有點長,一定要遵守。不要出現上述情況
  11. image_alt – 相冊中圖片的alt屬性
  12. desc – 描述、簡介,比如goods_desc,不要出現goods_txt這種
  13. details – 詳情、文章內容等
  14. order_id – 排序
  15. telephone – 座機號碼
  16. mobile – 手機號碼
  17. phone – 當不區分手機和座機時,請用phone命名
  18. address – 地址,單獨出現不要用addr縮寫,組合出現時需用縮寫,比如mac地址,mac_addr
  19. zipcode – 郵編
  20. region – 地區,大的區域,比如記錄杭州市、溫州市等
  21. area – 區域,小的,比如上城區,江干區等
  22. avg_cost – 人均消費
  23. 待續

字段01標記
DEL_FLAG 邏輯刪除標記,0未刪除,1刪除

索引命名規范

規則

普通索引:IDX_字段名
唯一索引:IDX_UQE_字段名
組合索引:IDX_COM_字段名_字段名_字段名

添加索引sql

    添加主鍵索引
    ALTER TABLEtable_nameADD PRIMARY KEY (column)

    添加唯一索引
    ALTER TABLEtable_nameADD UNIQUE (column)

    添加全文索引
    ALTER TABLEtable_nameADD FULLTEXT (column)

    添加普通索引
    ALTER TABLEtable_nameADD INDEX index_name (column)

    添加組合索引
    ALTER TABLEtable_nameADD INDEX index_name (column1,column2,column3)

不需要使用索引情況:

    表比較小,數據量不會多

    賦值有限的列(枚舉),不要創建索引。創建的索引返回的行越少越好,此時區分度大。

    用不上索引的列,不要創建索引。

    長字符串的列,不要全部創建索引,但可以使用短索引(名字的頭8個字符)。

使用索引:
    可能用到索引的地方:where 子句,order by,group by
    索引有效的情況,使用如下篩選條件:
    <,<=,=,>,>=,between,in,like’admin%’,獨立索引+or+獨立索引+mysiam

索引失效

    is not nullis null 索引會失效

    not in 或<> 或!=

    like查詢是以%開頭,不使用索引。like ‘%admin’

    關聯表的id需要和關聯表中的id的字符集,排序集一致,否則關聯不會使用索引檢索。

    or+innodb

    字符類型在where子句中不加引號,不使用索引

    對字段加函數或者運算的

    在order by操作中,mysql只有在排序條件不是查詢條件表達式時才使用索引。盡管如此,在涉及多個數據表的查詢里,即使有索引可用,那些索引在加快ORDER BY操作方面也沒什么作用。

    select 語句中字段中的子查詢是不使用索引的,除非添加必要的別的條件來使用索引。
    如:SELECT scolumn.ID,( SELECT COUNT(ID)FROMS_COMMENT AS discuss WHERE discuss.RELEVANCE_ID = article.SEQUENCE_ID' AND discuss.CODE ='資訊平路') AS discussCount FROM S_COLUMN AS scolumn LEFT JOIN S_ARTICLE AS article ON scolumn.ID = article.COLUMN_ID LEFT JOIN S_COMMON_ARTICLE AS commonArticle ON commonArticle.ARTICLE_ID = article.ID
    這個子查詢中 article.SEQUENCE_ID 和 RELEVANCE_ID都有索引確不會使用,而是用的是code的索引,所以要避免selec中子查詢。

    連接查詢時,如果關聯字段排序字符集不一樣,則索引會失效,此點需在建表時注意。

    如果mysql估計使用全表掃描要比使用索引快,則不使用索引。

      比如:列id均勻的分布在1-100之間。下面的sql則不會使用索引            `select * from table_name where id > 1 and id<90;`        
        1

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM