后端、接口与数据 · 综合

设计一个能用很多年的数据模型

一句话: 好模型表达的是业务现实,而不是别人最初让你做的那个页面。

从实体开始

世界上有哪些东西——客户、订单、商品、支付——以及它们之间的关系。用业务团队说话时用的词来命名,能省下数不清的误解。

不要把多对多关系压平成文本字段。「用逗号分隔的标签」是一笔债,在你第一次需要按它筛选时会痛苦地偿还。

区分事实与状态

当前状态会变。事实——已经发生了。订单有状态;支付是一个已发生的事件。丢掉历史的系统回答不了「那天的价格是多少」这种基本问题。

所以:在状态记录旁边保留事件记录,尤其是一切涉及钱和权限的地方。

永远值得有的字段

创建时间和更新时间、由谁执行、用于检测冲突的版本或时间戳,以及在可能需要恢复的地方用软删除而不是硬删除。

深入一层

当模型需要变更时,优先增加而不是删除,并把变更作为分阶段迁移来执行。简短地记录模型决策——为什么是两张表而不是一张——因为一年后没人会记得,而把一个刻意为之的设计「简化掉」的诱惑很大。