进销存数据库设计

时间:2011-12-28 20:10:52

标签: database database-design invoice discount

我几天前创建了一个处理发票的应用程序。我想知道如何最好地将折扣整合到我的发票中。我应该将其作为否定项目(在invoice_items表中)或者我应该在发票表中创建“折扣”列吗?

3 个答案:

答案 0 :(得分:6)

我会将它作为负值项目。原因是:

  • 通过开发票,计算值永远保持不变非常重要;即使您的计算公式稍后更改,您也可以正确地再现任何给定的发票。如果当时计算的值不正确,情况就是如此 - 它就是这样。
  • 拥有价值金额意味着可以轻松处理特殊情况的人工调整 - 例如,您的营销经理/会计师可能会决定因延迟交付而给予100美元的一次性折扣。这是负面价值的微不足道的 - 只需添加另一行,但折扣率很难/麻烦
  • 每张发票可以有多个折扣金额
  • 它非常灵活 - 它有自己的存在空间,无论它需要什么。事实上,我会将折扣作为另一种“产品”(甚至可能是多种产品 - 每种不同的折扣原因,例如圣诞节,优惠券,推荐等等。
  • 使用自己的项目,您可以像任何其他“产品”一样添加理由说明 - 例如“支付现金的10%折扣”或其他
  • 您不需要任何特殊代码或数据库列!只需按照以前的总项目将其打印在发票上。 “没有勺子(折扣)”:这只是另一个项目 - 可能比没有代码/数据库更改更简单吗?
  • 并非所有项目都应打折 - 例如退款,退货,订阅(如适用)。它变得太复杂,没有必要在数据库中表示折扣的业务逻辑。将计算等保留在应用程序代码中,将结果存储在db
  • 拥有自己的项目意味着计算可以任意复杂。这意味着随着复杂性的增加,无需维护数据库维护/修改代码比维护/修改数据库容易得多。
  • 最后,我成功建立了一个发票系统,我采用了“项目”的方法,它运作得很好

答案 1 :(得分:2)

这些选择对你有什么影响?例如,您希望以后有多个折扣或非常指定的折扣吗?如果每张发票只有一个折扣,那么我就不会比任何需要更复杂。在我看来,将它放在发票表中更容易也更清晰 - 将其作为负面项目会使项目处理更加困难,我认为。

答案 2 :(得分:2)

我完全同意尽可能简单,但要考虑的一件事是否应该免除折扣?在这种情况下,您需要在细节中添加一个bool字段,以记住哪一行应该有折扣。