前言:
在我們項(xiàng)目開發(fā)中,數(shù)據(jù)庫(kù)及表的設(shè)計(jì)可以說是非常重要,我遇到過很多庫(kù)表設(shè)計(jì)比較雜亂的項(xiàng)目,像表名、字段名命名混亂、字段類型設(shè)計(jì)混亂等等,此類數(shù)據(jù)庫(kù)后續(xù)極難維護(hù)與拓展。我一直相信只有優(yōu)秀的庫(kù)表設(shè)計(jì)才能發(fā)揮出MySQL最大的性能,前面有篇文章也分享了數(shù)據(jù)庫(kù)的使用規(guī)范,本篇文章主要講幾個(gè)庫(kù)表設(shè)計(jì)的小技巧,希望對(duì)大家有所啟發(fā)。
1.int類型的選用
整型字段類型包含 tinyint、smallint、mediumint、int、bigint 五種,占用空間大小及存儲(chǔ)范圍如下圖所示:
存儲(chǔ)字節(jié)越小,占用空間越小。所以本著最小化存儲(chǔ)的原則,我們要盡量選擇合適的整型,下面給出幾個(gè)常見案例及選擇建議。
- 根據(jù)存儲(chǔ)范圍選擇合適的類型,比如人的年齡用 unsigned tinyint(范圍 0~255,人的壽命不會(huì)超過 255 歲);海龜就必須是smallint,但如果是太陽(yáng)的年齡,就必須是int。
- 若存儲(chǔ)的數(shù)據(jù)為非負(fù)數(shù)值,建議使用 UNSIGNED 標(biāo)識(shí),可以擴(kuò)大正數(shù)的存儲(chǔ)范圍。
- 短數(shù)據(jù)使用 TINYINT 或 SMALLINT,比如:人類年齡,城市代碼。
- 存儲(chǔ)狀態(tài)變量的字段用 TINYINT ,比如:是否刪除,0代表未刪除 1代表已刪除。
- 主鍵列,無負(fù)數(shù),建議使用 INT UNSIGNED 或者 BIGINT UNSIGNED;預(yù)估字段數(shù)字取值會(huì)超過 42 億,使用 BIGINT 類型。
下面給出建表語(yǔ)句示范:
CREATE TABLE `tb_int` (
`increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
`stu_age` tinyint unsigned NOT NULL COMMENT '學(xué)生年齡',
`is_deleted` tinyint unsigned DEFAULT '0' COMMENT '0:未刪除 1:刪除',
`col1` bigint NOT NULL COMMENT 'bigint字段',
PRIMARY KEY (`increment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='int測(cè)試表';