mirror of
https://gitee.com/xiaonuobase/snowy.git
synced 2026-10-06 06:52:58 +08:00
3.9 KiB
3.9 KiB
数据库设计规范
详细规范与菜单 SQL 模板见
.claude/skills/database-ops。本文是速览。
硬性规则
- 表名/字段名全大写下划线;新业务表前缀
BIZ_(出厂 biz 域复用 SYS_/DEV_ 表是历史设计,勿模仿) - 主键
ID varchar(20)字符串雪花(MyBatis-Plus ASSIGN_ID),禁 bigint 自增 - 每表尾部固定审计字段组(与 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 '更新用户',
- 表与字段都要中文 COMMENT;utf8mb4 / InnoDB
- 树形表加
PARENT_ID varchar(20);关联字段varchar(20)存对方 ID - 唯一性:不要用数据库唯一索引(逻辑删除冲突),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/提示手动执行