数据库脚本开发规范
数据库脚本开发规范:
一、 新表创建规范
1、创建表的时候不要有drop表的语句。
2、原则上,每个新建的表必须包含下面5个字段(只会新增,不会修改时,至少前面3个字段,如日志记录表):
`uuid` char(32) NOT NULL DEFAULT '00000000000000000000000000000000' COMMENT '物理主键uuid',
`created_by` varchar(50) NOT NULL COMMENT '创建人',
`created_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` varchar(50) NOT NULL COMMENT '修改人',
`updated_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
其中,uuid、created_date、updated_date采用trigger或默认值由数据库自动赋值,sql语句中(insert/update)无需对这3个字段进行赋值。
3、原则上不使用自增id做唯一键,如果必须使用,命名方式请定义为具体业务含义的xxx_id,不能定义为通用模糊的‘id’两个字母。
4、表及每个字段必须有comment描述。
5、字段的命名需与Java中dto的字段命名保持一致,中间用‘_’分割,尽量用准确的英文来表述字段含义,不能出现无意义的字母、数字等定义字段。
6、字段的长度必须是有考究的,不能随便指定,需考虑可能的扩展,也不宜过长。
7、创建的索引必须要有对应的名称,不能使用工具自动生成的随机名称。索引命名方式:ix_表名_索引字段名,唯一索引命名方式:uk_表名_索引字段名。
8、创建的外键必须要有对应的名称,不能使用工具自动生成的随机名称。外键命名方式:fk_表名_外键字段名。
9、创建的触发器必须要有对应的名称,不能使用工具自动生成的随机名称。触发器命名方式:tr_表名_触发字段名。
10、表引擎使用innodb:ENGINE=InnoDB,字符集使用utf-8:CHARSET=utf8
11、created_by、updated_by字段不能用user_id等数字,需要使用更直观的user_name等来填充。
例子:
CREATE TABLE `pc_qrtz_job_details` (
`uuid` char(32) NOT NULL DEFAULT '00000000000000000000000000000000' COMMENT '物理主键uuid',
`job_name` varchar(50) NOT NULL DEFAULT '' COMMENT '任务名称',
`job_group` varchar(50) NOT NULL COMMENT '任务分组',
`target_bean_name` varchar(50) NOT NULL COMMENT '任务执行bean的名称',
`system_owner` varchar(20) NOT NULL,
`description` varchar(100) NOT NULL COMMENT '任务描述',
`created_by` varchar(50) NOT NULL COMMENT '创建人',
`created_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` varchar(50) NOT NULL COMMENT '修改人',
`updated_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`uuid`),
UNIQUE KEY `uk_pc_qrtz_job_details_job_name_group` (`job_name`,`job_group`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TRIGGER `tr_pc_qrtz_job_details_created_date` BEFORE INSERT ON `pc_qrtz_job_details` FOR EACH ROW SET new.uuid=uuid2();
CREATE TRIGGER `tr_pc_qrtz_job_details_updated_date` BEFORE UPDATE ON `pc_qrtz_job_details` FOR EACH ROW SET new.updated_date=NOW();
二、 字段新增/修改规范
新增或修改字段必须一个一个字段的新增或修改,不能做批量新增或修改。其他约束参考新表创建规范。
例子:
alter table py_users_integral add reserve_quota DECIMAL(11,2) NOT NULL DEFAULT '0.00' COMMENT '预约额度';
三、 初始化数据规范
对于大批量的数据初始化,如新增或修改记录超过1万行,需采用分段提交的方式处理。
例子:
后续补充。
数据库脚本命名规范:
ddl_database_01_zhangsan.sql
dml_database_01_zhangsan.sql
命名规则:1、脚本类型,ddl:创建或修改表结构、存储过程等,dml:初始化数据等数据操作;2、脚本执行对应数据库名称;3、脚本序号,脚本序号代表了执行顺序,不允许有编号一样的;4、该脚本负责人。
任何需移交的脚本都应该是在开发库上验证无错误的