我应该只使用一张桌子吗?

时间:2011-10-01 11:23:12

标签: database database-design relational-database entity-relationship

我有一个实体Order

订单包含日期,客户,处理订单的员工等信息。

现在订单还需要存储一个状态,即区分赢单和丢失订单。

这个想法是客户可以向公司提交订单,但最终可以退出

(作为域名信息,订单不是商品。它是一家服务公司,它试图处理客户并在他们可以交付订单和价格等时提供报价。因此,客户可能会找到更好的burgain和备份并停止公司的订购流程。

公司希望获得订单和订单丢失的数据,赢得订单和丢失订单之间的差异仅仅是几个属性,例如ReasonLost可以是PriceTime

我的问题是,Order的最佳代表是什么?

我正在考虑使用单个表,只有获得的订单,ReasonLost为空。

如果这些新实体的差异不显着,为WonOrderLostOrder创建单独的表是否有意义?

这种情况下最好的模型是什么?

2 个答案:

答案 0 :(得分:2)

使用一张桌子。添加OrderState字段。

警告:如果你每天要做数百万笔交易,那么这样的决定需要更多的关注和分析。

答案 1 :(得分:1)

您可以考虑另一种替代设计。在此替代方案中,您为订单丢失原因保留第二个表,并将其作为可选的1:1与订单表相关联。请注意,这实际上是超类型/子类型模式的实现,其中丢失的订单子类型具有一个附加属性。

看起来像这样:

ERD

在下列任何情况下,此替代方案可能具有吸引力:

  • 你输的订单很少。
  • 您的订单表格不够广,无法保留足够长的订单原因。
  • 你丢失的订单原因非常非常大(甚至是BLOB)。
  • 您对于在订单表中维护丢失订单原因存在美学上的反对意见。