在軟件應用開發過程中經常出現因數據庫表、數據庫表字段格式不規則而影響開發進度的問題。在維護應用使用原來數據庫表時,也會因為數據庫表的可讀性不夠高,表字段規則不統一,造成數據查詢,數據使用效率低的問題,所以有必要整理出一套合適的數據庫表字段命名規范來解決優化這些問題。

本文介紹了數據庫命名、數據庫表命名、數據庫表字段命名及SQL語言編碼的規范文檔,針對研發中易產生的問題和常見錯誤做了一個整理和修改,為日后涉及到數據庫相關的研發工作做好準備。當然,這些只是建議規范,約定俗成而已。
一、數據庫命名規范
采用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上下劃線組成,命名簡潔明確,多個單詞用下劃線 '_' 分隔,一個業務項目一個數據庫,多個業務項目慎用同一個數據庫。
二、數據庫表命名規范
1. 數據表命名規范
(1)采用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上下劃線'_'組成,命名簡潔明確,多個單詞用下劃線'_'分隔。
(2)全部小寫命名,禁止出現大寫。
(3)禁止使用數據庫關鍵字,如:name,time ,datetime,password等。
(4)表名稱不應該取得太長(一般不超過三個英文單詞)。
(5)表的名稱一般使用名詞或者動賓短語。
(6)用單數形式表示名稱,例如,使用 employee,而不是 employees。
明細表的名稱為:主表的名稱+字符dtl(detail縮寫)
例如:采購定單的名稱為:po_order,則采購定單的明細表為:po_orderdtl。
(7)表必須填寫描述信息(使用SQL語句建表時)。
2. 表設計
(1)表必須定義主鍵,默認為ID,整型自增,如果不采用默認設計必須咨詢DBA進行設計評估。
(2)ID字段作為自增主鍵。一般所有表都要有id, id必為主鍵,類型為bigint unsigned,單表時自增、步長為1。一般情況下主鍵id和業務沒關系的。
(3)強烈建議不使用外鍵, 數據的完整性靠程序來保證。
(4)多表中的相同列,必須保證列定義一致。
(5)國內表默認使用InnoDB,表字符集默認使用gbk,國際默認使用utf8的表。
(6)一般情況下每張表都有著四個字段create_id,create_time,update_id,update_time, 其中create_id表示創建者id,create_time表示創建時間,update_id表示更新者id,update_time表示更新時間,這四個字段的作用是為了能夠追蹤數據的來源和修改。
(7)單表一到兩年內數據量超過500w或數據容量超過10G考慮分表,且需要提前考慮歷史數據遷移或應用自行刪除歷史數據。
(8)單條記錄大小禁止超過8k, 一方面字段不要太多,有的都能上百,甚至幾百個,另一方面字段的內容不易過大,像文章內容等這種超長內容的需要單獨存到另一張表。
(9)日志類數據不建議存儲在MySQL上,優先考慮Hbase或OB,如需要存儲請找DBA評估使用壓縮表存儲。
(10)為了提高查詢效率,可以適當的數據冗余,注意是適當。
三、數據庫字段命名規范
1. 字段命名規范
(1)采用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上下劃線'_'組成,命名簡潔明確,多個單詞用下劃線'_'分隔。
(2)全部小寫命名,禁止出現大寫。
(3)字段必須填寫描述信息。
(4)禁止使用數據庫關鍵字,如:name,time ,datetime password 等。
(5)字段名稱一般采用名詞或動賓短語。
(6)采用字段的名稱必須是易于理解,一般不超過三個英文單詞。
(7)在命名表的列時,不要重復表的名稱。
例如,在名employe的表中避免使用名為employee_lastname的字段。
(8)不要在列的名稱中包含數據類型。
(9)字段命名使用完整名稱,禁止縮寫。
2. 字段名命名示例
(1)使用下劃線進行分隔,提升可讀性。
例如,user_name,user_id,is_friend,is_good。
(2)使用完整名稱,提高可讀性。
例如,uid修改為user_id,pid修改為person_id。
3. 字段設計
(1)表被索引列必須定義為not null,并設置default值。
(2)禁止使用float、double類型,建議使用decimal或者int替代。
(3)禁止使用blob、text類型保留大文本、文件、圖片,建議使用其他方式存儲,MySQL只保存指針信息。
(4)禁止使用varchar類型作為主鍵。
四、SQL語言編碼規范
大小寫規范:
(1)所有關鍵字必須大寫,如:INSERT、UPDATE、DELETE、SELECT及其子句,IF……ELSE、CASE、DECLARE等。
SELECT COUNT(*) FROM `cdb_members` WHERE `user_name` = 'aeolus';
(2)所有函數及其參數中除用戶變量以外的部分必須大寫。
(3)在定義變量時用到的數據類型必須小寫。
語句設計:
(1)數據更新建議使用二級索引先查詢出主鍵,再根據主鍵進行數據更新。
(2)禁止使用非同類型的列進行等值查詢。