数据库设计规范(MySQL版)
数据库名称
- 统一小写,并且使用下划线进行连接
数据表名称
- 统一小写,并且使用下划线进行连接
- 加上业务名前缀
表字段名称
- 统一小写,并且使用下划线进行连接
- 建议:status来表示状态
表字段类型及长度
- 尽可能选择占用存储空间小的字段类型,在满足正常业务需求的情况下,从小到大,往上选。
如果字符串长度固定,或者差别不大,可以选择char类型。如果字符串长度差别较大,可以选择varchar类型。
是否字段,可以选择bit类型。
枚举字段,可以选择tinyint类型。
主键字段,可以选择bigint类型。
金额字段,可以选择decimal类型。
时间字段,可以选择timestamp或datetime类型。
必须设置的字段
- ID属性:id,主键,unsignal bigint,自增策略(无特别要求,优先自增,步长为1;其次是雪花算法,最后是UUID和Redis的id策略)在
单个
数据库中,主键可以通过AUTO_INCREMENT
,设置成自动增长
的。
但在分布式
数据库中,特别是做了分库分表的业务库中,主键最好由外部算法(比如:雪花算法)生成,它能够保证生成的id是全局唯一的。 - 逻辑删除:is_deleted
- 创建时间:create_time
- 修改时间:update_time
- 乐观锁(版本):version
表设计的三范式
Java实体类的类型对应表字段类型
- 要用统一基本类型或是包装类型,看业务情况。
- 基本类型:
优点:
1,用于计算是效率高;
2,值比较方便,使用 == 就可以了。
缺点:
1,从数据库中查出值时可能会有null,基本类型接收NULL值有NPE风险(java.lang.NullPointerException NPE 空值异常);
2,默认值和NULL值不能传达同一种信息,例如考试分数字段,如果使用Integer类型,那么没有参加考试的分数可以设置为null;如果用int类型,那么分数值都是0,无法没有参加考试还是参加考试得0分。 - 包装类型:
优点:
1,可以存放null,从数据库中查出值时可能会有null;
缺点:
1,不能使用 == 比较相等。
2,占用更多的内存空间; - 建议:所有POJO类属性必须使用包装数据类型;所有的局部变量推荐使用基本数据类型。