Skip to content

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 类型说明使用场景
varcharVARCHAR(n)字符串,n 为长度短文本、编号、名称
textTEXT长文本备注、描述、内容
longtextLONGTEXT超长文本富文本、大段内容
decimalDECIMAL(m,n)数值,m 总长度,n 小数位金额、比例、精确数值
intINT整数数量、序号、标识
bigintBIGINT大整数大数值、雪花ID
datetimeDATETIME日期时间完整时间戳
dateDATE日期仅日期信息
timeTIME时间仅时间信息
char(1)CHAR(1)单字符状态标识、性别

特殊字段类型处理

业务类型推荐MySQL类型长度建议备注
用户IDVARCHAR(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规范是确保数据库设计质量和系统稳定性的基础!