本文为自己开发过程中的总结,仅供参考
===============数据库表设计===============
===命名相关===
表名统一添加前缀"t_", 后面时可以参考目录结构的形势, 通过表名一段一段细分该表属于什么类型的功能. 如"t_sys_role"表示的含义为: 系统(sys)角色(role)相关的表(t_)
字段名多个单词之间使用下划线"_"分割, 不用关键字做为列名, 列名和实体字段名保持一致, 相关功能的字段紧挨着, 方便查看(如:地址, 详细地址, 地址经纬度等字段紧邻).
===字段相关===
1. 基础字段:
id(表记录唯一id, 即表主键id),
create_time(记录创建时间, 年月日时分秒),
update_time(记录最后更新时间, 年月日时分秒),
deleted(是否删除, 做软删除使用),
logic_id(业务id编号, 添加唯一索引, 等效于主键id. 如在机构表中, 机构编号我们可以设置固定的开头, 固定的格式,使数据格式保持一致 1. 在数据库迁移的时候, 因数据的关联是通过logic_id关联的,所以就不用担心id的处理方式了. 2. 因id一般为自增, 或者随机, 这些都造成编号差异性较大, 但logic_id我们可以通过设置规则, 保持其规律性.)
2. 业务相关字段同时出现, 并可以做组合索引. 主键id已经能唯一标识我们的记录, 但这个仅仅是物理层面的标识, 不能满足我们逻辑上的唯一性, 如用户表, 一般会认为姓名, 证件类型, 证件号码相同的为同一个用户, 所以当用户注册的时候, 如果我们不做任何的逻辑唯一性校验, 很容易造成同一用户注册多次的现象.
===其他原则===
. 不建议使用外键, 至少是开发阶段调试数据,太痛苦了
.是否含义的字段, 0:表示否, 1:表示是
===============java实体设计===============
.使用继承,将公共的字段放在父类中
.日期类型的字段, 可以采用日期, 也可以采用字符串类型, 但不要采用数字类型(不容易操作, 如:2点2分20秒, 可能会存为2220). 如果使用日期类型, 则可以考虑使用日期转换器, 将前端传递的日期字符串转换为相应的日期, 使用日期json序列化方式(com.fasterxml.jackson.annotation.JsonFormat的@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")), 将日期输出为字符串给前端.
.驼峰命名, 见名知意, 适当缩写(保持项目中缩写一致)控制字段长度
.是否含义的字段, 可以考虑使用if为前缀, 替换is前缀, isShow-->ifShow
.字典类型的属性, 可以使用代号, 但一定要给代号设置相应的枚举值, 便于理解, 统一
. 建模时,考虑一定参数的冗余, 以减少多表查询