我正在为通过消息队列进行通信的异步应用程序寻找数据库/表设计的想法。
有一个送餐应用程序。为了让我说订单已完成,以下服务应该接受它。(这是异步的..)
- 餐厅服务
- 司机服务
如果其中之一拒绝,订单将立即取消。
我有一个 order_details 表(只是为了简单起见)。
order_details
order_id
status
我应该将此 order_details 中的餐厅和司机接受状态保留为单独的列,还是应该将它们存储在单独的表中?
我担心的是 - 如果我们将来需要在工作流程中添加另一个组件怎么办。例如:支付服务。
我会结合您正在考虑的两种解决方案。
在描述每项任务的表格中,我会
status
为该任务设置一个字段。以及那个领域的触发器。一旦决定了任务的状态,触发器就会将值发送到主表。主表将有一个状态字段的副本(是的,它违背规范化,但为了方便),以及一个最终状态字段作为来自所有单独状态的计算字段:现在,每次更改餐厅任务的状态时,它都会反映在
restaurant
和 中order_detail
。是的,有人有可能直接在
order_table
. 如果你想避免它,你可以编写一个存储过程来收集各个任务的状态并决定最终状态。只是不要忘记调用这个存储过程。而且这必须来自客户端,因为触发器通常会在 SP 执行时出现问题。一些 DBMSevents
可以纠正这个问题,但是......作为替代方案,您可以完全摆脱数据库中的最终状态,并在每次客户需要时即时计算它。它可以作为一个视图来完成,也可以只是客户端的代码。