数据库设计(2) 单个字段层面
主要回答的问题:
- 时间字段的存储类型和该类型的优势 // datetime,timestamp,int
- 这些时间字段一般起什么作用. // 创建时间, 改动时间, 业务意义的时间
- 小数类型的存储类型和该类型的优势: // 禁止使用 float 和 double
- 金钱字段如何存储: decimal, int
- 枚举类型用不用,什么时候用,用的时候注意什么.
6.什么时候用json对象,哪些数据放json对象中.
时间字段如何记录
A:
datatime:
timestamp:
int:
是否需要update_at记录更改时间
A: 只要表的数据可能被修改,一般都需要改字段,改动任意字段自动更新改值。
Q: 如果只需要记录指定字段的更新时间呢?
A: 增加一个udpate_xxx字段,在业务代码显示记录指定字段的更新时间。
小数类型
// 附录2
6. 【强制】小数类型为 decimal,禁止使用 float 和 double。
说明:在存储的时候,float 和 double 都存在精度损失的问题,很可能在比较值的时候,得到不正确的
结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数并分开存储。
// 附录1
【建议】存储金钱的字段,建议用int,程序端乘以100和除以100进行存取。因为int占用4字节,而double占用8字节,空间浪费。
枚举类型的使用及局限
6.什么时候用json对象,那些东西放json对象中?
// 考虑把DDD领取的值对象整体作为表的1个字段,以json存储。// 注意同一个对象在不同业务中甚至同一个业务中,角色可能是在转换的。值对象|实体对象
参考
- MySQL数据库设计规范
- [阿里巴巴手册]
- 04 | 实体和值对象:从领域模型的基础单元看系统设计