【问题标题】:how to make user change his address without affecting the same one in the order?如何让用户更改他的地址而不影响订单中的同一地址?
【发布时间】:2023-02-05 19:56:13
【问题描述】:

我希望每个订单都有一个送货地址,但是如果我在 order 表中添加了 shipping_addresss_id 然后用户订购了一些东西并且它已经发货并交付然后几个月后用户将他的送货地址更改为其他地址,然后他订购的订单几个月前也会改成他提供的新地址导致错误的结果,如果他完全删除地址也会出现问题,我想到了这个解决方案: 每当用户订购时,我都会从shipping_address表中向他提供他所有的addresses,他会选择一个,但不是指向shipping_address_id,我会得到address的硬字符串并保存它,是吗一个好的解决方案?

这是整个database

【问题讨论】:

  • 订单是时间的快照。是的,将地址和任何其他可能更改的内容复制到 Order 表中。将价格复制到OrderLine 表中。

标签: database database-design erd domain-model


【解决方案1】:

事实上,客户可以为新订单选择的当前可能送货地址列表与包裹离开仓库后无法更改的用于送货的历史地址之间存在差异。

解决这个问题的主要方法有以下三种:

  1. 反规范化:在订单中包含必填的地址字段,一旦订单处于装运状态(例如“准备好取货”或“承运人已取货”),就不再更改它。填充它的最简单方法发货订单地址似乎是在状态更改时复制有效的送货地址。

    优点:

    • 易于实施和使用,不影响(所需)送货地址的管理。

    缺点:

    • 订单将包含与不同关注点相对应的信息,这使得维护变得困难:如果地址格式发生变化,您还必须更改订单实体。
    • 订单将包含大量冗余地址。
    • 此外,您可能有重复代码,因为显示有效送货地址的方式与所需送货地址不同。
  2. 添加一个 shipped_address 实体对于有效的订单送货地址:您只需将送货时使用的地址存储在那里,并与相关订单相关联。

    优点 缺点:通过将地址隔离在单独的表中,它在某种程度上减少了第一个选项的缺点,但非常相似。

  3. 智能送货地址管理:重新考虑送货地址的使用方式。您的订单也应参考送货地址。在这种情况下,您必须确保已发货订单中使用的送货地址不再更改(例如使用标志)。如果客户的地址发生变化并且当前地址是这样的标记地址,那么您将创建一个新地址而不是现有地址。由于客户可能有多个所需的送货地址,因此您还需要注意客户是否仍想使用历史地址。

    优点:

    • 确保反规范化并防止冗余地址
    • 只要没有订单有效地运送到该地址,并且在一个地方,就可以更新运送地址
    • 保留已发货订单的送货地址
    • 部署送货地址始终以相同的方式完成,无论是历史地址还是真实地址。

    缺点:

    • 需要更仔细地管理送货地址。

    结论:我建议选择选项 3。它需要您更多地考虑送货地址和地址状态,但最终会导致更强大的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多