表结构默认字段
所有表使用 InnoDB 引擎,utf8mb4 字符集 前缀规则 所有表必须使用 关联原则 作为前缀。方便指向关联业务 例如:orders 主表 orders_ext 扩展表 orders_chang 转单表
必须添加的字段
`change_id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', `remark` varchar(255) DEFAULT '' COMMENT '备注', `over_flag` tinyint NOT NULL DEFAULT '0' COMMENT '完结标识 0-未完结,1-已完结', `create_user` int NOT NULL COMMENT '创建人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_user` int DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY ( `change_id` ), KEY `idx_create_time` (`create_time`), KEY `idx_update_time` (`update_time`),
索引规则
普通索引:idx_xxx 唯一索引:uniq_xxx 每个表必须有唯一约束
为什么这么设计:
完结标识,创建时间,更新时间, 有助于统一进行数据归档,提高归档效率、报表生成的效率、 分摊主库压力,提升查询效率,减少运营成本 。
数据归档
什么是归档:数据定期从主库中移除,转移到备份库中,主系统中不在提供查询 归档的目的:分摊主库压力,提升查询效率,减少运营成本 什么数据该归档:已完结并且创建时间超过1.5年以上的数据 归档后需要查询怎么办:通过备份库导出数据查询
样例表
CREATE TABLE `orders_change` ( `change_id` BIGINT NOT NULL COMMENT 'id', `change_no` VARCHAR ( 64 ) NOT NULL COMMENT '转第三方业务单号', `orders_id` BIGINT NOT NULL COMMENT 'order表订单ID', `tracking_number` VARCHAR ( 64 ) NOT NULL DEFAULT '' COMMENT 'order表跟踪号', `reference_no` VARCHAR ( 64 ) NOT NULL DEFAULT '' COMMENT 'order表参考号', `change_status` TINYINT NOT NULL DEFAULT '1' COMMENT '转单状态 1-正常,99-取消', `change_site_id` INT DEFAULT '0' COMMENT '转单发起网点', `change_carrier_id` INT DEFAULT NULL COMMENT '转单服务商(承运商)id', `change_carrier_code` VARCHAR ( 64 ) DEFAULT '' COMMENT '转单服务商(承运商)code', `change_order_code` VARCHAR ( 64 ) DEFAULT '' COMMENT '第三方系统生成的面单号', `change_tracking_no` VARCHAR ( 64 ) DEFAULT '' COMMENT '第三方系统生成的参考单号', `change_file_path_flag` TINYINT NOT NULL DEFAULT '0' COMMENT '获取第三方三方面单标识 0-未获取,1-已获取,2-获取失败', `change_file_path` VARCHAR ( 512 ) NOT NULL DEFAULT '' COMMENT '第三方面单文件路径', `remark` VARCHAR ( 255 ) DEFAULT NULL COMMENT '备注', `over_flag` TINYINT NOT NULL DEFAULT '0' COMMENT '完结标识 0-未完结,1-已完结', `create_user` BIGINT NOT NULL COMMENT '创建人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_user` BIGINT DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY ( `change_id` ), UNIQUE KEY `uniq_change_no` ( `change_no` ), KEY `idx_tracking_number` ( `tracking_number` ), KEY `idx_orders_id` ( `orders_id` ), KEY `idx_create_time` ( `create_time` ), KEY `idx_update_time` ( `update_time` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COMMENT = '转第三方承配主表';
所有表对应的实体类必须继承 BasePo
/** * 基础实体类 * * @author dengpengbin */ @Data public class BasePo implements Serializable { /** * 创建人 */ @Schema(description = "创建人", hidden = true) @TableField(fill = FieldFill.INSERT) private Long createUser; /** * 创建时间,由数据库维护 */ @Schema(description = "创建时间", hidden = true) private LocalDateTime createTime; /** * 更新人 */ @TableField(fill = FieldFill.INSERT_UPDATE) @Schema(description = "更新人", hidden = true) private Long updateUser; /** * 更新时间,由数据库维护 */ @Schema(description = "更新时间", hidden = true) private LocalDateTime updateTime; }
代码规范
1.所有异常类统一使用 ServiceException 2.实体类应与数据库表名保持语义一致,使用驼峰命名法,首字母大写。 3.id 统一使用 @TableId(value = "xx_id",type = IdType.ASSIGN_ID) 映射 4.字段应与数据库字段保持一致,必要时使用 @TableField 映射 5.使用 @RequestBody 时,前端必须使用 application/json。 6.接口返回统一使用 R<T> 封装,避免直接返回原始对象。 7.所有业务异常抛出 ServiceException 8.所有常量类以 Constant 结尾。 9.字典值建议统一写到 Enum 中,包含 getCode() 和 getDesc() 方法。 10.使用 Swagger 注解,如 @Operation, @Schema。