购物车“订单”表的订单状态类型的最佳分类是什么?

Sim*_*ver 3 shopping-cart database-design

我已经看到了几种不同的购物车架构,它们具有不同的表,分别用于订单状态类型/运输状态类型/付款状态类型。

我想在我的项目中第一次做到这一点,并想知道什么是最好的方法,并希望有人为我提供示例表。

关键当然是无论我使用多少列,它们都必须表示互斥的事物。

我在想一些类似的事情:

OrderStatus-摘要状态PaymentStatus-已付款/未付款/部分已付款/错误发货状态-未发货/已部分发货/已发货/已交付

打破这种状况的最佳方法是什么?我是否也应具有“摘要”状态,该状态也代表整个“人类可读”状态以及流程每个独立部分的单独状态?

Cra*_*ker 5

每当您具有“相互排斥”的各种状态时,就意味着只有一个列,该列具有多个可能的值。在大多数情况下,应该限制这些值,而最好的和最常见的方法之一是通过“字典”或“查找”表的外键。因此,最基本的说,您可能会遇到以下情况:

  • 表订单(OrderID,OrderStatusID等)
  • 表OrderStatus(OrderStatusID,名称)

OrderStatus的值如下:* 1,“已付费” * 2,“未付费” * 3,“已发货” * 4,“未发货”

重要的部分是确定哪些状态确实与其他状态互斥。例如,上面的示例行可能不是很好,因为您的订单可能同时为“已付费”和“已发货”。如果是这种情况,那么您可以将OrderStatus分为PaymentStatus和ShippingStatus(如您所暗示)。

确定是否拆分这些行实际上取决于您和您的特定需求。但是,无论你决定,假设你拥有在某个时候去改变它。通常,永不更改的唯一应用程序/数据库是因缺乏使用而放弃的失败应用程序/数据库。“第一时间做到正确”是一个令人钦佩的目标,提前进行研究是必要的,但您几乎肯定不会实现。取而代之的是,将精力花在使其余的设计/代码足够灵活和可更改上,以便您可以对部分设计/代码进行重新处理,而不必拆除整个应用程序。