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

时间:2009-11-17 20:36:10

标签: database-design shopping-cart

我见过几种不同的购物车架构,其中包含订单状态类型/送货状态类型/付款状态类型的不同表格。

我想第一次为我的项目做好准备,并想知道最好的方法是什么,并希望有人可以使用示例表。

关键是,无论我使用多少列,它们都必须代表相互排斥的东西。

我正在考虑以下几点:

OrderStatus - 摘要状态 PaymentStatus - 付费/未付/部分付费/错误 ShippingStatus - 未发货/部分发货/发货/ DeliveredByHand

什么是解决这个问题的最佳方法 - 我是否应该将“摘要”状态表示为整个“人类可读”状态以及该流程中每个独立部分的个别状态?

2 个答案:

答案 0 :(得分:4)

只要您拥有“互斥”的各种状态,就意味着拥有一个列,该列具有该列的多个可能值。大多数情况下,这些值应该受到约束,并且最好和最常见的方法之一是通过外键到“字典”或“查找”表。所以,在最基本的情况下,你可能会有这样的事情:

  • 表顺序(OrderID,OrderStatusID,...)
  • 表OrderStatus(OrderStatusID,Name)

OrderStatus将具有以下值:  * 1,“付费”  * 2,“无偿”  * 3,“发货”  * 4,“未发货”

重要的是确定哪些状态与其他状态实际上是互斥的。例如,我上面的示例行可能不是很好,因为您可能会有一个“付费”和“已发货”的订单。如果是这种情况,那么您可以将OrderStatus拆分为PaymentStatus和ShippingStatus(正如您所提到的那样)。

确定是否拆分这些行取决于您和您的特定需求。但是,无论你决定什么,假设你 必须在某个时候改变它。通常情况下,唯一永不改变的应用程序/数据库是由于缺乏使用而被放弃的失败的。 “第一次正确行事”是一个令人钦佩的目标,提前进行研究是有道理的,但你几乎肯定实现它。相反,花费你的精力使你的设计/代码的其余部分变得灵活。可以改变,你可以修改它的一部分,而不必撕掉整个应用程序。

答案 1 :(得分:1)

这确实取决于购物车本身的全部功能。我建议遵循SDLC,它可以让您更好地了解开始时需要哪些功能,从而更清楚地了解您需要在数据库中存储哪些数据(表/字段)。

以下是一些帮助您入门的链接:

http://en.wikipedia.org/wiki/Systems_Development_Life_Cycle

http://www.computerworld.com/s/article/71151/System_Development_Life_Cycle

一旦开始,您通常可以确定进度时需要的字段和值。

一旦确定了数据库中存储的数据需求,就可以使用数据库规范化指南来帮助构建表格

http://en.wikipedia.org/wiki/Database_normalization

希望有所帮助!