前言:
在我們項目開發中,數據庫及表的設計可以說是非常重要,我遇到過很多庫表設計比較雜亂的項目,像表名、字段名命名混亂、字段類型設計混亂等等,此類數據庫后續極難維護與拓展。我一直相信只有優秀的庫表設計才能發揮出MySQL最大的性能,前面有篇文章也分享了數據庫的使用規范,本篇文章主要講幾個庫表設計的小技巧,希望對大家有所啟發。
1.int類型的選用
整型字段類型包含 tinyint、smallint、mediumint、int、bigint 五種,占用空間大小及存儲范圍如下圖所示:

存儲字節越小,占用空間越小。所以本著最小化存儲的原則,我們要盡量選擇合適的整型,下面給出幾個常見案例及選擇建議。
- 根據存儲范圍選擇合適的類型,比如人的年齡用 unsigned tinyint(范圍 0~255,人的壽命不會超過 255 歲);海龜就必須是smallint,但如果是太陽的年齡,就必須是int。
- 若存儲的數據為非負數值,建議使用 UNSIGNED 標識,可以擴大正數的存儲范圍。
- 短數據使用 TINYINT 或 SMALLINT,比如:人類年齡,城市代碼。
- 存儲狀態變量的字段用 TINYINT ,比如:是否刪除,0代表未刪除 1代表已刪除。
- 主鍵列,無負數,建議使用 INT UNSIGNED 或者 BIGINT UNSIGNED;預估字段數字取值會超過 42 億,使用 BIGINT 類型。
下面給出建表語句示范:
CREATE TABLE `tb_int` (
`increment_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
`stu_age` tinyint unsigned NOT NULL COMMENT '學生年齡',
`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測試表';