likes
comments
collection
share

基于AI生成的MySQL建表SOP

作者站长头像
站长
· 阅读数 27

简介

希望通过一套SOP,提高MySQL建表效率,降低出错的可能性。使用填表+AI的形式,可以省去编写MySQL建表脚本的过程。

SOP

MySQL建表

表属性
表名user
引擎InnoDB
字符集utf8
表注释用户表
字段名数据类型是否允许为空默认值注释
idunsigned bigintNOT NULLAUTO_INCREMENT主键
user_namevarchar(50)NOT NULLDEFAULT ''用户名
user_rankunsigned intNOT NULLDEFAULT '0'用户等级
gmt_createdate_timeNOT NULLCURRENT_TIMESTAMP创建时间
gmt_modifieddate_timeNOT NULLCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP更新时间
字段名索引名索引类型是否为联合索引
user_rankidx_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='用户表';

建表规约

  1. 引擎统一使用InnoDB或与旧表相同
  2. 字符集统一使用utf8或与旧表相同
  3. 所有字段都应为NOT NULL
  4. 所有字段都应有默认值
  5. 字符类型字段使用varchar
  6. 数字类型字段参考下表
对象年龄区间类型字节
150岁之内unsigned tinyint1
数百岁unsigned smallint2
恐龙化石数千万岁unsigned int4
太阳约50亿年unsigned bigint8
  1. 所有表应至少包含idgmt_creategmt_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
表注释资源表
字段名数据类型是否允许为空默认值注释
idunsigned bigintNOT NULLAUTO_INCREMENT主键
nameVARCHAR(100)NOT NULLDEFAULT ''名称
urlVARCHAR(6000)NOT NULLDEFAULT ''URL
typeunsigned tinyintNOT NULLDEFAULT '0'类型。0表示文字、1表示图片、2表示视频
formatunsigned smallintNOT NULLDEFAULT '0'格式。
lengthunsigned intNOT NULLDEFAULT '0'长度单位:像素
widthunsigned intNOT NULLDEFAULT '0'宽度。单位:像素
sizeunsigned bigintNOT NULLDEFAULT '0'大小。单位:kb
durationunsigned bigintNOT NULLDEFAULT '0'持续时间。单位:ms
user_idunsigned bigintNOT NULLDEFAULT '0'用户id
statusunsigned tinyintNOT NULLDEFAULT '0'状态
gmt_createdate_timeNOT NULLCURRENT_TIMESTAMP创建时间
gmt_modifieddate_timeNOT NULLCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP更新时间
字段名索引名索引类型是否为联合索引
user_ididx_resource_user_id普通索引

单元表

一个单元下拥有多个资源

表属性
表名unit
引擎InnoDB
字符集utf8
表注释单元表
字段名数据类型是否允许为空默认值注释
idunsigned bigintNOT NULLAUTO_INCREMENT主键
namevarchar(100)NOT NULLDEFAULT ''名称
statusunsigned tinyintNOT NULLDEFAULT '0'状态
gmt_createdate_timeNOT NULLCURRENT_TIMESTAMP创建时间
gmt_modifieddate_timeNOT NULLCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP更新时间

单元资源表

单元表与资源表间的关系表

表属性
表名unit_resouce
引擎InnoDB
字符集utf8
表注释单元资源表
字段名数据类型是否允许为空默认值注释
idunsigned bigintNOT NULLAUTO_INCREMENT主键
unit_idunsigned bigintNOT NULLDEFAULT '0'单元id
resource_idunsigned bigintNOT NULLDEFAULT '0'资源id
statusunsigned tinyintNOT NULLDEFAULT '0'状态
gmt_createdate_timeNOT NULLCURRENT_TIMESTAMP创建时间
gmt_modifieddate_timeNOT NULLCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP更新时间
字段名索引名索引类型是否为联合索引
unit_ididx_unit_resouce_unit_id普通索引

地区表

一个单元有地区特性

表属性
表名unit_district
引擎InnoDB
字符集utf8
表注释单元地区表
字段名数据类型是否允许为空默认值注释
idunsigned bigintNOT NULLAUTO_INCREMENT主键
unit_idunsigned bigintNOT NULLDEFAULT '0'单元id
provincevarchar(100)NOT NULLDEFAULT ''省份
cityvarchar(100)NOT NULLDEFAULT ''城市
statusunsigned tinyintNOT NULLDEFAULT '0'状态
gmt_createdate_timeNOT NULLCURRENT_TIMESTAMP创建时间
gmt_modifieddate_timeNOT NULLCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP更新时间
字段名索引名索引类型是否为联合索引
unit_ididx_unit_district_unit_id普通索引

关键词

一个单元有关键词特性

表属性
表名unit_keyword
引擎InnoDB
字符集utf8
表注释单元关键词表
字段名数据类型是否允许为空默认值注释
idunsigned bigintNOT NULLAUTO_INCREMENT主键
unit_idunsigned bigintNOT NULLDEFAULT '0'单元id
keywordvarchar(100)NOT NULLDEFAULT ''关键词
statusunsigned tinyintNOT NULLDEFAULT '0'状态
gmt_createdate_timeNOT NULLCURRENT_TIMESTAMP创建时间
gmt_modifieddate_timeNOT NULLCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP更新时间
字段名索引名索引类型是否为联合索引
unit_ididx_unit_keyword_unit_id普通索引
转载自:https://juejin.cn/post/7346804737079984138
评论
请登录