简介
希望通过一套SOP,提高MySQL建表效率,降低出错的可能性。使用填表+AI的形式,可以省去编写MySQL建表脚本的过程。
SOP
MySQL建表
表属性 |
值 |
表名 |
user |
引擎 |
InnoDB |
字符集 |
utf8 |
表注释 |
用户表 |
字段名 |
数据类型 |
是否允许为空 |
默认值 |
注释 |
id |
unsigned bigint |
NOT NULL |
AUTO_INCREMENT |
主键 |
user_name |
varchar(50) |
NOT NULL |
DEFAULT '' |
用户名 |
user_rank |
unsigned int |
NOT NULL |
DEFAULT '0' |
用户等级 |
gmt_create |
date_time |
NOT NULL |
CURRENT_TIMESTAMP |
创建时间 |
gmt_modified |
date_time |
NOT NULL |
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
更新时间 |
字段名 |
索引名 |
索引类型 |
是否为联合索引 |
user_rank |
idx_user_user_rank |
普通索引 |
否 |
将以上三张表丢给AI,即可生成如下建表脚本
CREATE TABLE `user` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_name` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名',
`user_rank` int unsigned NOT NULL DEFAULT '0' COMMENT '用户等级',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_user_user_rank` (`user_rank`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
建表规约
引擎统一使用InnoDB
或与旧表相同
字符集统一使用utf8
或与旧表相同
所有字段都应为NOT NULL
所有字段都应有默认值
字符类型字段使用varchar
数字类型字段参考下表
对象 |
年龄区间 |
类型 |
字节 |
人 |
150岁之内 |
unsigned tinyint |
1 |
龟 |
数百岁 |
unsigned smallint |
2 |
恐龙化石 |
数千万岁 |
unsigned int |
4 |
太阳 |
约50亿年 |
unsigned bigint |
8 |
所有表应至少包含id
、gmt_create
、gmt_modified
三个字段
notes/MySQL/MySQL数据库开发的三十六条军规.md at master · guanguans/notes (github.com)
p3c/p3c-gitbook/MySQL数据库/建表规约.md at master · alibaba/p3c (github.com)
MySQL 时区全解,datetime 和 timestamp 区别,GMT、UTC、CST、东八区分别指什么? | 老郭种树 (guozh.net)
应用
资源表
资源检索系统中,图片、视频等资源以url的形式存储在数据库中,并拥有类型、格式等属性。
表属性 |
值 |
表名 |
resource |
引擎 |
InnoDB |
字符集 |
utf8 |
表注释 |
资源表 |
字段名 |
数据类型 |
是否允许为空 |
默认值 |
注释 |
id |
unsigned bigint |
NOT NULL |
AUTO_INCREMENT |
主键 |
name |
VARCHAR(100) |
NOT NULL |
DEFAULT '' |
名称 |
url |
VARCHAR(6000) |
NOT NULL |
DEFAULT '' |
URL |
type |
unsigned tinyint |
NOT NULL |
DEFAULT '0' |
类型。0表示文字、1表示图片、2表示视频 |
format |
unsigned smallint |
NOT NULL |
DEFAULT '0' |
格式。 |
length |
unsigned int |
NOT NULL |
DEFAULT '0' |
长度单位:像素 |
width |
unsigned int |
NOT NULL |
DEFAULT '0' |
宽度。单位:像素 |
size |
unsigned bigint |
NOT NULL |
DEFAULT '0' |
大小。单位:kb |
duration |
unsigned bigint |
NOT NULL |
DEFAULT '0' |
持续时间。单位:ms |
user_id |
unsigned bigint |
NOT NULL |
DEFAULT '0' |
用户id |
status |
unsigned tinyint |
NOT NULL |
DEFAULT '0' |
状态 |
gmt_create |
date_time |
NOT NULL |
CURRENT_TIMESTAMP |
创建时间 |
gmt_modified |
date_time |
NOT NULL |
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
更新时间 |
字段名 |
索引名 |
索引类型 |
是否为联合索引 |
user_id |
idx_resource_user_id |
普通索引 |
否 |
单元表
一个单元下拥有多个资源
表属性 |
值 |
表名 |
unit |
引擎 |
InnoDB |
字符集 |
utf8 |
表注释 |
单元表 |
字段名 |
数据类型 |
是否允许为空 |
默认值 |
注释 |
id |
unsigned bigint |
NOT NULL |
AUTO_INCREMENT |
主键 |
name |
varchar(100) |
NOT NULL |
DEFAULT '' |
名称 |
status |
unsigned tinyint |
NOT NULL |
DEFAULT '0' |
状态 |
gmt_create |
date_time |
NOT NULL |
CURRENT_TIMESTAMP |
创建时间 |
gmt_modified |
date_time |
NOT NULL |
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
更新时间 |
单元资源表
单元表与资源表间的关系表
表属性 |
值 |
表名 |
unit_resouce |
引擎 |
InnoDB |
字符集 |
utf8 |
表注释 |
单元资源表 |
字段名 |
数据类型 |
是否允许为空 |
默认值 |
注释 |
id |
unsigned bigint |
NOT NULL |
AUTO_INCREMENT |
主键 |
unit_id |
unsigned bigint |
NOT NULL |
DEFAULT '0' |
单元id |
resource_id |
unsigned bigint |
NOT NULL |
DEFAULT '0' |
资源id |
status |
unsigned tinyint |
NOT NULL |
DEFAULT '0' |
状态 |
gmt_create |
date_time |
NOT NULL |
CURRENT_TIMESTAMP |
创建时间 |
gmt_modified |
date_time |
NOT NULL |
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
更新时间 |
字段名 |
索引名 |
索引类型 |
是否为联合索引 |
unit_id |
idx_unit_resouce_unit_id |
普通索引 |
否 |
地区表
一个单元有地区特性
表属性 |
值 |
表名 |
unit_district |
引擎 |
InnoDB |
字符集 |
utf8 |
表注释 |
单元地区表 |
字段名 |
数据类型 |
是否允许为空 |
默认值 |
注释 |
id |
unsigned bigint |
NOT NULL |
AUTO_INCREMENT |
主键 |
unit_id |
unsigned bigint |
NOT NULL |
DEFAULT '0' |
单元id |
province |
varchar(100) |
NOT NULL |
DEFAULT '' |
省份 |
city |
varchar(100) |
NOT NULL |
DEFAULT '' |
城市 |
status |
unsigned tinyint |
NOT NULL |
DEFAULT '0' |
状态 |
gmt_create |
date_time |
NOT NULL |
CURRENT_TIMESTAMP |
创建时间 |
gmt_modified |
date_time |
NOT NULL |
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
更新时间 |
字段名 |
索引名 |
索引类型 |
是否为联合索引 |
unit_id |
idx_unit_district_unit_id |
普通索引 |
否 |
关键词
一个单元有关键词特性
表属性 |
值 |
表名 |
unit_keyword |
引擎 |
InnoDB |
字符集 |
utf8 |
表注释 |
单元关键词表 |
字段名 |
数据类型 |
是否允许为空 |
默认值 |
注释 |
id |
unsigned bigint |
NOT NULL |
AUTO_INCREMENT |
主键 |
unit_id |
unsigned bigint |
NOT NULL |
DEFAULT '0' |
单元id |
keyword |
varchar(100) |
NOT NULL |
DEFAULT '' |
关键词 |
status |
unsigned tinyint |
NOT NULL |
DEFAULT '0' |
状态 |
gmt_create |
date_time |
NOT NULL |
CURRENT_TIMESTAMP |
创建时间 |
gmt_modified |
date_time |
NOT NULL |
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
更新时间 |
字段名 |
索引名 |
索引类型 |
是否为联合索引 |
unit_id |
idx_unit_keyword_unit_id |
普通索引 |
否 |