Appearance
DDL 语句生成规范
JPwise 配置生成系统的数据库DDL生成技术规范
📋 概述
本文档定义了JPwise平台配置生成过程中数据库DDL语句的生成标准、模板规范和质量要求。所有配置生成都必须严格遵循此规范。
🗄️ MySQL DDL 生成模板
主表创建模板
sql
-- 创建主表
CREATE TABLE `{TABLE_NAME}` (
`ID` varchar(50) NOT NULL COMMENT '主键',
-- 业务字段
{BUSINESS_FIELDS}
-- 系统字段
`CREATORTIME` datetime DEFAULT NULL COMMENT '创建时间',
`CREATORUSER` varchar(50) DEFAULT NULL COMMENT '创建人ID',
`CREATORUSERNAME` varchar(50) DEFAULT NULL COMMENT '创建人',
`LASTMODIFYTIME` datetime DEFAULT NULL COMMENT '修改时间',
`LASTMODIFYUSER` varchar(50) DEFAULT NULL COMMENT '修改人ID',
`LASTMODIFYUSERNAME` varchar(50) DEFAULT NULL COMMENT '修改人',
`ORGANIZE` varchar(50) DEFAULT NULL COMMENT '组织ID',
`ENABLEDMARK` varchar(10) DEFAULT NULL COMMENT '删除标志',
`DELETETIME` datetime DEFAULT NULL COMMENT '删除时间',
`DELETEUSER` varchar(50) DEFAULT NULL COMMENT '删除人ID',
`DELETEUSERNAME` varchar(50) DEFAULT NULL COMMENT '删除人',
`SORTCODE` int(10) DEFAULT NULL COMMENT '排序号',
`FLOWPHASE` varchar(50) DEFAULT NULL COMMENT '流程状态',
`STEPNAME` varchar(200) DEFAULT NULL COMMENT '环节名称',
PRIMARY KEY (`ID`),
KEY `idx_creatortime` (`CREATORTIME`),
KEY `idx_organize` (`ORGANIZE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='{TABLE_COMMENT}';
子表创建模板
sql
-- 创建子表(如果有)
CREATE TABLE `{SUB_TABLE_NAME}` (
`ID` varchar(50) NOT NULL COMMENT '主键',
`{MAIN_TABLE_FK}` varchar(50) NOT NULL COMMENT '主表外键',
-- 子表业务字段
{SUB_BUSINESS_FIELDS}
-- 系统字段
`CREATORTIME` datetime DEFAULT NULL COMMENT '创建时间',
`CREATORUSER` varchar(50) DEFAULT NULL COMMENT '创建人ID',
`LASTMODIFYTIME` datetime DEFAULT NULL COMMENT '修改时间',
`LASTMODIFYUSER` varchar(50) DEFAULT NULL COMMENT '修改人ID',
`SORTCODE` int(10) DEFAULT NULL COMMENT '排序号',
PRIMARY KEY (`ID`),
KEY `idx_main_fk` (`{MAIN_TABLE_FK}`),
CONSTRAINT `fk_{MAIN_TABLE_FK}` FOREIGN KEY (`{MAIN_TABLE_FK}`) REFERENCES `{MAIN_TABLE_NAME}` (`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='{SUB_TABLE_COMMENT}';
📊 字段类型映射规范
基础数据类型映射
JSON 类型 | MySQL 类型 | 说明 | 使用场景 |
---|---|---|---|
varchar | VARCHAR(n) | 字符串,n 为长度 | 短文本、编号、名称 |
text | TEXT | 长文本 | 备注、描述、内容 |
longtext | LONGTEXT | 超长文本 | 富文本、大段内容 |
decimal | DECIMAL(m,n) | 数值,m 总长度,n 小数位 | 金额、比例、精确数值 |
int | INT | 整数 | 数量、序号、标识 |
bigint | BIGINT | 大整数 | 大数值、雪花ID |
datetime | DATETIME | 日期时间 | 完整时间戳 |
date | DATE | 日期 | 仅日期信息 |
time | TIME | 时间 | 仅时间信息 |
char(1) | CHAR(1) | 单字符 | 状态标识、性别 |
特殊字段类型处理
业务类型 | 推荐MySQL类型 | 长度建议 | 备注 |
---|---|---|---|
用户ID | VARCHAR(50) | 50 | 支持雪花算法ID |
手机号 | VARCHAR(20) | 20 | 国际号码兼容 |
邮箱 | VARCHAR(200) | 200 | 支持长邮箱地址 |
身份证 | VARCHAR(20) | 20 | 支持各种证件号 |
金额 | DECIMAL(10,2) | 10,2 | 财务标准精度 |
比例 | DECIMAL(10,4) | 10,4 | 百分比精度 |
状态码 | VARCHAR(50) | 50 | 枚举值存储 |
附件路径 | TEXT | - | 支持多文件路径 |
🏗️ DDL 生成规则
1. 表名命名规范
主表命名
- 格式:
T_{MODULE}_{FUNCTION}
- 示例:
- 用户管理 →
T_SYS_USERMANAGEMENT
- 合同管理 →
T_BIZ_CONTRACTMANAGEMENT
- 开票申请 →
T_FIN_INVOICEAPPLY
- 用户管理 →
子表命名
- 格式:
{主表名}_{子表业务名}
- 示例:
- 用户权限 →
T_SYS_USERMANAGEMENT_PERMISSIONS
- 收款计划 →
T_BIZ_CONTRACTMANAGEMENT_PAYMENTPLAN
- 用户权限 →
2. 字段命名规范
字段名格式
- 全大写字母
- 下划线分隔单词
- 语义清晰明确
常用字段命名标准
sql
-- 基础信息字段
NAME / FULLNAME -- 名称
CODE / NUMBER -- 编号
TITLE -- 标题
DESCRIPTION -- 描述
-- 关联字段
USERID / USER_ID -- 用户ID
DEPARTMENTID -- 部门ID
ORGANIZEID -- 组织ID
-- 时间字段
STARTTIME / STARTDATE -- 开始时间/日期
ENDTIME / ENDDATE -- 结束时间/日期
CREATETIME -- 创建时间
-- 状态字段
STATUS -- 状态
STATE -- 状态
ENABLED -- 启用标识
DELETED -- 删除标识
-- 金额字段
AMOUNT -- 金额
PRICE -- 价格
RATE -- 比率
3. 索引创建规范
必需索引
sql
-- 主键索引(自动创建)
PRIMARY KEY (`ID`)
-- 系统字段索引
KEY `idx_creatortime` (`CREATORTIME`) -- 创建时间索引
KEY `idx_organize` (`ORGANIZE`) -- 组织权限索引
KEY `idx_enabledmark` (`ENABLEDMARK`) -- 删除标识索引
业务索引
sql
-- 外键索引
KEY `idx_user_id` (`USERID`)
KEY `idx_department_id` (`DEPARTMENTID`)
-- 状态索引
KEY `idx_status` (`STATUS`)
KEY `idx_state` (`STATE`)
-- 时间范围索引
KEY `idx_date_range` (`STARTDATE`, `ENDDATE`)
-- 复合业务索引
KEY `idx_user_status` (`USERID`, `STATUS`)
KEY `idx_org_create` (`ORGANIZE`, `CREATORTIME`)
唯一性索引
sql
-- 业务唯一性
UNIQUE KEY `uk_code` (`CODE`) -- 编号唯一
UNIQUE KEY `uk_email` (`EMAIL`) -- 邮箱唯一
UNIQUE KEY `uk_mobile` (`MOBILE`) -- 手机唯一
4. 约束和外键规范
外键约束
sql
-- 子表外键约束
CONSTRAINT `fk_main_table` FOREIGN KEY (`MAIN_TABLE_ID`)
REFERENCES `MAIN_TABLE` (`ID`) ON DELETE CASCADE
-- 关联表外键约束
CONSTRAINT `fk_user` FOREIGN KEY (`USERID`)
REFERENCES `jnpf_user` (`id`) ON DELETE SET NULL
检查约束
sql
-- 状态值检查(MySQL 8.0+)
CONSTRAINT `chk_status` CHECK (`STATUS` IN ('enabled', 'disabled', 'deleted'))
-- 数值范围检查
CONSTRAINT `chk_rate` CHECK (`RATE` >= 0 AND `RATE` <= 100)
🔧 技术实现规范
1. 数据库引擎和编码
sql
-- 固定配置
ENGINE=InnoDB -- 支持事务和外键
DEFAULT CHARSET=utf8mb4 -- 支持完整Unicode
COLLATE=utf8mb4_unicode_ci -- 排序规则
2. 系统字段标准
必需系统字段
sql
-- 创建信息
`CREATORTIME` datetime DEFAULT NULL COMMENT '创建时间',
`CREATORUSER` varchar(50) DEFAULT NULL COMMENT '创建人ID',
`CREATORUSERNAME` varchar(50) DEFAULT NULL COMMENT '创建人',
-- 修改信息
`LASTMODIFYTIME` datetime DEFAULT NULL COMMENT '修改时间',
`LASTMODIFYUSER` varchar(50) DEFAULT NULL COMMENT '修改人ID',
`LASTMODIFYUSERNAME` varchar(50) DEFAULT NULL COMMENT '修改人',
-- 权限控制
`ORGANIZE` varchar(50) DEFAULT NULL COMMENT '组织ID',
-- 软删除
`ENABLEDMARK` varchar(10) DEFAULT NULL COMMENT '删除标志',
`DELETETIME` datetime DEFAULT NULL COMMENT '删除时间',
`DELETEUSER` varchar(50) DEFAULT NULL COMMENT '删除人ID',
`DELETEUSERNAME` varchar(50) DEFAULT NULL COMMENT '删除人',
-- 排序和流程
`SORTCODE` int(10) DEFAULT NULL COMMENT '排序号',
`FLOWPHASE` varchar(50) DEFAULT NULL COMMENT '流程状态',
`STEPNAME` varchar(200) DEFAULT NULL COMMENT '环节名称'
流程表额外字段
sql
-- 流程控制字段
`FLOWID` varchar(50) DEFAULT NULL COMMENT '流程实例ID',
`TASKID` varchar(50) DEFAULT NULL COMMENT '当前任务ID',
`TASKOPERATOR` varchar(500) DEFAULT NULL COMMENT '任务处理人',
`FLOWSTATUS` int(10) DEFAULT 0 COMMENT '流程状态',
`FLOWFINISHTIME` datetime DEFAULT NULL COMMENT '流程结束时间'
3. 注释规范
表注释
sql
COMMENT='用户管理主表,存储用户基本信息、部门归属、角色权限等核心数据'
字段注释
sql
`USERNAME` varchar(100) NOT NULL COMMENT '用户姓名',
`EMAIL` varchar(200) NOT NULL COMMENT '电子邮箱',
`STATUS` varchar(50) DEFAULT 'enabled' COMMENT '用户状态:enabled-启用,disabled-禁用,locked-锁定'
📁 文件生成规范
1. 文件命名和路径
路径:.docs/config/generated/
命名:{功能编码}_DDL_{时间戳}.sql
示例:UserManagement_DDL_20250816.sql
2. 文件结构模板
sql
-- =============================================
-- {功能名称} DDL 语句
-- 生成时间: {生成时间}
-- 功能编码: {功能编码}
-- =============================================
-- 创建主表:{表名}
CREATE TABLE `{主表名}` (
-- 表结构定义
);
-- 创建子表:{子表名}(如果有)
CREATE TABLE `{子表名}` (
-- 表结构定义
);
-- 创建相关字典数据
INSERT INTO `jnpf_dictionary` (...) VALUES (...);
-- 创建字典项数据
INSERT INTO `jnpf_dictionarydata` (...) VALUES (...);
-- 创建索引优化查询性能
CREATE INDEX `{索引名}` ON `{表名}` (...);
-- 添加表注释
ALTER TABLE `{表名}` COMMENT = '{表说明}';
✅ 质量检查清单
DDL生成前检查
- [ ] 字段命名符合规范(全大写、下划线分隔)
- [ ] 数据类型选择正确
- [ ] 字段长度设置合理
- [ ] 必需字段设置NOT NULL
- [ ] 系统字段完整包含
DDL生成后检查
- [ ] 表名命名规范正确
- [ ] 主键和索引设置完整
- [ ] 外键约束设置正确
- [ ] 注释信息完整准确
- [ ] 字典数据预置完整
- [ ] 文件命名和保存路径正确
数据库兼容性检查
- [ ] MySQL 5.7+ 语法兼容
- [ ] 字符集设置正确(utf8mb4)
- [ ] 引擎设置正确(InnoDB)
- [ ] 索引类型选择合理
- [ ] 约束设置不冲突
📞 支持和维护
问题反馈
如发现DDL生成规范问题,请及时反馈:
- DDL语法错误 - 报告具体的语法问题
- 命名规范问题 - 建议更好的命名方式
- 性能优化建议 - 提出索引和结构优化方案
版本更新
本规范会根据实际使用情况和技术发展持续更新,请关注版本变化。
记住:严格遵循DDL规范是确保数据库设计质量和系统稳定性的基础!