工程实践

政企项目数据库设计的几个基础约定

· 三面体

建表设计需要结合实际情况在性能、语义、操作便捷性等维度上综合考量

数据库

ID字段名最好带有语义性质

主键采用自增 ID,同时字段名添加业务语义前缀,兼顾关联查询效率与可读性。其他关联表亦使用语义化id名称进行关联。

推荐用 tinyint 存状态码

tinyint 状态码可以存储多种状态,方便扩充,扩展性要比布尔类型强。

强制增加软删除标记

政企项目最好不要物理删除,所有删除都使用逻辑删除,或者叫软删除。我们应该对物理删除保持天然敏感性!!

自动保存创建和更新时间

创建时间和更新时间作为每条记录的基础元数据。

普通状态字段只存状态码

普通状态字段只存状态码,状态名称交给枚举或字典表;只有需要保留历史快照时,才同时保存状态码和状态名称。

解耦和冗余二者取平衡

需要流水信息、历史存档、审计查询、表单操作等基于历史既定事实的表单要快照化,即数据库设计要冗余历史信息。入申请单申请人、申请部门、审核人、审核部门等信息就需要冗余存储,不能只存储当前操作者用户id,因为用户信息可能会变。如果只是表示当前现状则遵循解耦的原则,通过关联查询获取相关信息即可。

一句话概括如果需要查看“当时”库表设计就要快照化,如果需要看当前库表设计就要解耦。

总结

建表设计没有最优模版,但有个基本原则:团队共识>个人喜好,业务需要>设计规范。需要结合实际情况在性能、语义、操作便捷性等维度上综合考量。