简介
希望通过一套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 | 普通索引 | 否 |