數(shù)據(jù)庫設(shè)計(jì)規(guī)范,需要注意幾點(diǎn)!
引擎規(guī)范
非特殊情況下,默認(rèn)選擇Innodb,支持事務(wù)、行級(jí)鎖,并發(fā)性能更好。
編碼規(guī)范
UTF-8
表設(shè)計(jì)規(guī)范
必須有主鍵
主鍵遞增,可提高寫入性能,減少碎片
禁止使用外鍵
降低表之間的耦合,不要涉及更新操作的級(jí)聯(lián),并發(fā)高情況極度影響SQL性能
字段設(shè)計(jì)規(guī)范
必須有注釋
不然鬼才知道代表什么意思
必須NOT NULL
null的列不能使用索引
整形
默認(rèn) int(11) 0。int(11)代表顯示長度,在勾選無符號(hào)unsigned并且填充零zerofill后如果長度不夠11位會(huì)自動(dòng)補(bǔ)零,如插入1,顯示00000000001,選擇需要為unsigned。
字符串
默認(rèn)空字符串
時(shí)間
非current_timstamp(mysql5版本不支持該語法)默認(rèn)'1970-01-01 08:00:01',date類型無時(shí)分秒
通用字段
create_time(created_at):創(chuàng)建時(shí)間,默認(rèn)current_timestamp
update_time(updated_at):更新時(shí)間,默認(rèn)current_timestamp,on update current_timestamp
is_deleted:邏輯刪除標(biāo)志位,視情況選擇
禁止使用text\blob
浪費(fèi)磁盤和內(nèi)存空間,影響數(shù)據(jù)庫性能
金額禁止使用小數(shù)存儲(chǔ)
盡量使用分或者更小的單位用整數(shù)存儲(chǔ),否則精度的問題會(huì)很麻煩
命名規(guī)則
表、列
使用業(yè)務(wù)模塊開頭,如tb_order,列名以下劃線分割
索引
create_time、update_time必須包含索引
主鍵索引
數(shù)據(jù)庫自動(dòng)
唯一索引、組合唯一索引
uk_colName_colName
普通索引、組合普通索引
idx_colName_colName
建表示例
CREATE TABLE `user` (`id` int unsigned NOT NULL AUTO_INCREMENT,`username` varchar(128) NOT NULL DEFAULT '' COMMENT '用戶名',`cert_no` varchar(64) NOT NULL DEFAULT '' COMMENT '身份證號(hào)',`gender` tinyint NOT NULL DEFAULT '0' COMMENT '性別0女1男',`active_date` date NOT NULL DEFAULT '1970-01-01' COMMENT '激活時(shí)間',`inactive_time` datetime NOT NULL DEFAULT '1970-01-01 08:00:01' COMMENT '失效時(shí)間',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',PRIMARY KEY (`id`),UNIQUE KEY `idx_cert_no` (`cert_no`) USING BTREE,KEY `idx_username_gender` (`username`,`gender`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8;
后臺(tái)回復(fù)“加群”,帶你進(jìn)入高手如云交流群
推薦閱讀:
