mysql web數據庫的設計歸範-1命名規範

[數據庫環境介紹]web

一般來說,各個互聯網公司的數據庫分爲5個數據庫環境:sql

1. dev : 開發環境, 開發可讀寫,可修改表結構; 經常使用的163的數據庫表; 開發人員能夠修改表結構, 能夠隨意修改其中的數據; 可是須要保證不影響其餘開發同事; 數據庫

2. qa : 測試環境, 開發可讀寫, 開發人員能夠經過工具修改表結構; 網絡

3. sim: 模擬環境, 開發可讀寫, 經過web平臺;發起上線請求時,會先在這個環境上進行預執行, 這個環境也可供部署上線演練或壓力測試使用 能夠讀寫;工具

4. real: 生產數據庫從庫(準實時同步),只讀環境,不容許修改數據,不容許修改表結構; 供線上問題查找,數據查詢等使用;post

5. online: 線上環境;開發人員不容許直接在線上環境進行數據庫操做,若是須要操做必須找DBA進行操做並進行相應記錄;測試

這些環境的機器,必定要作到權限劃分明確,讀寫賬號分離,而且有辨識度,能區分具體業務。例如用戶名w_wap, r_wap 能看出來,讀寫賬號是wap應用的。ui


[數據庫命名規範]spa

1. 儘可能簡潔明義,可以一眼看出來這個數據庫是用來作什麼的;unix

2. 使用名詞做爲數據庫名稱,而且只用英文,不用中文拼音;

3. 使用英文字母,所有小寫,控制在3-7個字母之內;

4. 若是有多個單詞,則使用下劃線隔開,不建義駝峯命名;

例如,每一個公司都有crm業務,那就叫作xx_crm, 字符集統一utf8。字符集踩過的坑不少,爲了通用性統一utf8。

create database xx_crm default character set=utf8;


[表命名規範]

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

2. 表名使用英文小寫單詞,若是有多個單詞則使用下劃線隔開;

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

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

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

6. 默認使用utf8字符集(因爲數據庫定義使用了默認,數據表能夠再也不定義,但爲保險起見,建議都寫上);

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

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

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

舉個例子,一張在線衝值記錄表:user_bank_deposit 這個就很是符合標準,若是叫作userBankDeposit或是user_chongzhi,就很是不友好。

CREATE TABLE `house_refresh_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `fangid` int(11) NOT NULL COMMENT '房貼子ID',
  `refresh_time` int(11) NOT NULL COMMENT '刷新時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `fangid` (`fangid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='房刷新記錄表'



[字段命名規範]

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

2. 使用小寫英文單詞,若是有多個單詞使用下劃線隔開;

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

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

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

6. 表的主鍵通常都約定成爲id,自增類型;

7. 時間字段,除特殊狀況一概採用int來記錄unix_timestamp;

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

9. 全部字段,均爲非空,最好顯示指定默認值;

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

11. text字段儘可能少用,或是拆到冗餘表中;

CREATE TABLE `wanted_post` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `puid` int(10) unsigned NOT NULL,
  `user_id` int(10) NOT NULL COMMENT '發貼用戶的id',
  `username` varchar(50) NOT NULL COMMENT '發貼用戶的用戶名',
  `city` smallint(4) NOT NULL COMMENT '所在城市',
  `ip` bigint(14) NOT NULL COMMENT '發帖人的ip',
  `district_id` tinyint(2) NOT NULL COMMENT '所在區域的id',
  `district_name` varchar(20) NOT NULL COMMENT '行政區名字',
  `street_id` tinyint(2) NOT NULL COMMENT '所在街道(地標)的id',
  `street_name` varchar(20) NOT NULL COMMENT '小區名字',
  `title` varchar(255) NOT NULL COMMENT '帖子的標題',
  `description` text NOT NULL COMMENT '帖子詳情描述',
  `post_at` int(11) NOT NULL COMMENT '用戶發帖時間,數據建立的時間,使用整型存儲',
  `refresh_at` int(11) NOT NULL COMMENT '帖子被修改的時間,整型存儲',
  `show_time` int(11) NOT NULL COMMENT '帖子顯示時間',
  `age_max` int(11) NOT NULL DEFAULT '0' COMMENT '招聘最小年齡',
  `age_min` int(11) NOT NULL DEFAULT '0' COMMENT '招聘最大年齡',
  `post_refresh_at` int(11) NOT NULL COMMENT '刷新時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_puid` (`puid`),
  KEY `user_id_index` (`user_id`),
  KEY `post_at_index` (`post_at`),
  KEY `refresh_at_index` (`refresh_at`),
  KEY `show_time_index` (`show_time`)
) ENGINE=InnoDB AUTO_INCREMENT=55295 DEFAULT CHARSET=utf8 COMMENT='招聘帖子表'
相關文章
相關標籤/搜索