Files
snowy/.claude/docs/数据库设计规范.md
T
2026-08-18 21:45:12 +08:00

3.9 KiB
Raw Blame History

数据库设计规范

详细规范与菜单 SQL 模板见 .claude/skills/database-ops。本文是速览。

硬性规则

  1. 表名/字段名全大写下划线;新业务表前缀 BIZ_(出厂 biz 域复用 SYS_/DEV_ 表是历史设计,勿模仿)
  2. 主键 ID varchar(20) 字符串雪花(MyBatis-Plus ASSIGN_ID),禁 bigint 自增
  3. 每表尾部固定审计字段组(与 CommonEntity 对应):
`SORT_CODE` int NULL COMMENT '排序',
`REMARK` varchar(500) NULL COMMENT '备注',
`EXT_JSON` longtext NULL COMMENT '扩展信息',
`DELETE_FLAG` varchar(255) NULL COMMENT '删除标志',
`CREATE_TIME` datetime NULL COMMENT '创建时间',
`CREATE_USER` varchar(20) NULL COMMENT '创建用户',
`UPDATE_TIME` datetime NULL COMMENT '更新时间',
`UPDATE_USER` varchar(20) NULL COMMENT '更新用户',
  1. 表与字段都要中文 COMMENT;utf8mb4 / InnoDB
  2. 树形表加 PARENT_ID varchar(20);关联字段 varchar(20) 存对方 ID
  3. 唯一性:不要用数据库唯一索引(逻辑删除冲突),Service 层查重

标准建表模板

CREATE TABLE `BIZ_SUPPLIER`  (
  `ID` varchar(20) NOT NULL COMMENT '主键',
  `NAME` varchar(100) NULL COMMENT '名称',
  `TYPE` varchar(50) NULL COMMENT '类型(字典 SUPPLIER_TYPE)',
  `STATUS` varchar(10) NULL COMMENT '状态(ENABLE/DISABLE)',
  -- 业务字段……
  `SORT_CODE` int NULL COMMENT '排序',
  `REMARK` varchar(500) NULL COMMENT '备注',
  `EXT_JSON` longtext NULL COMMENT '扩展信息',
  `DELETE_FLAG` varchar(255) NULL COMMENT '删除标志',
  `CREATE_TIME` datetime NULL COMMENT '创建时间',
  `CREATE_USER` varchar(20) NULL COMMENT '创建用户',
  `UPDATE_TIME` datetime NULL COMMENT '更新时间',
  `UPDATE_USER` varchar(20) NULL COMMENT '更新用户',
  PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '供应商' ROW_FORMAT = Dynamic;

类型映射

Java MySQL
String(短) varchar(n)
String(长文本) text / longtext(EXT_JSON 用 longtext)
Integer int
BigDecimal decimal(18,2)
时间 datetime
加密字段 varchar 放宽(SM4 密文变长)

菜单/按钮 SQL(SYS_RESOURCE)

权威模板:snowy-plugin/snowy-plugin-gen/src/main/resources/sqlend/Mysql.sql.btl。按钮码驼峰式(前端 hasPerm 用):

INSERT INTO `SYS_RESOURCE` VALUES ('{menuId}', '{父id}', '供应商管理', 'supplier', '{code}', 'MENU', '{moduleId}', 'MENU', '/biz/supplier', 'biz/supplier/index', '{icon}', NULL, 'YES', 'YES', 'YES', 99, NULL, 'NOT_DELETE', NULL, NULL, NULL, NULL);
INSERT INTO `SYS_RESOURCE` VALUES ('{btnId}', '{menuId}', '新增供应商', NULL, 'bizSupplierAdd', 'BUTTON', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, 'NOT_DELETE', NULL, NULL, NULL, NULL);

按钮码集合:biz{Xxx}Add/Edit/Delete/Detail/BatchDelete/Import/Export。

现有 33 表(前缀分组)

  • SYS_(15+):SYS_USER、SYS_USER_EXT、SYS_ORG、SYS_POSITION、SYS_ROLE、SYS_RESOURCE、SYS_MODULE、SYS_USER_ROLE、SYS_ROLE_MENU、SYS_ROLE_BUTTON、SYS_USER_DATA_SCOPE(_MAP)、SYS_GROUP、SYS_GROUP_USER 等
  • BIZ_:BIZ_NOTICE
  • DEV_(12):DEV_CONFIG、DEV_DICT、DEV_EMAIL、DEV_FILE、DEV_JOB、DEV_LOG、DEV_MESSAGE、DEV_PUSH、DEV_SMS、DEV_SLIDESHOW、DEV_WEAK_PASSWORD 等
  • GEN_:GEN_BASIC、GEN_CONFIG
  • CLIENT_:CLIENT_USER(+关系表)
  • MOBILE_:MOBILE_RESOURCE 等
  • AUTH_:三方登录相关

准确清单:grep "CREATE TABLE" snowy-web-app/src/main/resources/_sql/snowy_mysql.sql

SQL 脚本管理

  • 全量脚本:snowy-web-app/src/main/resources/_sql/snowy_mysql.sql
  • 增量 DDL:也放 _sql/ 下,命名 {日期}_{功能}.sql(如 2026-08-18_supplier.sql)
  • AI 执行 SQL 降级链:mysql CLI → 落盘 docs/sql-pending/ 提示手动执行