在数据库中处理退款或/存储信用的最佳方法?

时间:2010-10-22 18:25:58

标签: database database-design e-commerce

假设我有一个Web应用程序是某种商店。我有一张桌子可以容纳所有的货币交易。

custid,orderid,支付金额等等

这张表用于销售报告以及你有什么。

现在,我们希望为客户提供某种形式的信用,包括礼品券或退款。

使用-amount将它输入到同一个表中是不是一个坏主意?或者将它们放在另一个表中更好吗?

首先使用此表格结构设置网站是否存在重大缺陷?

我已经建立了一些像这样的系统,但没有得到其他人的反馈,你们通常如何设置像db这样的商店的表。

感谢, 肯

2 个答案:

答案 0 :(得分:2)

通常情况下,您有理由退款,因此此用例的架构已经不同于购买的架构。

所以现在您的选择是否应该在两个地方存储退款?它总是让我感到不舒服有多种事实来源。

您需要决定如何计算客户的整体平衡,在多个地方存储进/出会使这比应该更难。因此,您可以回到单个商店进行货币进出,以及单独存储元数据关于退款

Purchase
--------
PurchaseId
ItemId
CustomerId
Payment

Refund
------
PurchaseId
Reason

显然还有其他字段,正如你所说的那样 - 退款的价值

实际上,这更接近现实世界的纸质分类帐和单独的“退款”书。

我从来没有这样做,这只是我大声思考: - )

答案 1 :(得分:1)

有一百种皮肤猫的方法,但这里有一些“值得思考”的观点:

  • 如果是退款,您可以添加“退款”列,其中包含“1”,销售时可以添加“0”。然后,您必须决定是将所有金额保留为正值(如果退款列中有“1”,则只需减去),或者如果您希望金额为正数和负数,只需将退款列视为更多指标(可能用于报告目的)
  • 您应该考虑购买ID!您认为它更像是“交易ID”还是“订单号”。一开始似乎没有区别,但是交易ID对于每个条目都有一个唯一的ID,这意味着购买将是0000,退款将是0001(例如)。如果您将其视为订单号,则购买将为0000并且返回也将为0000,以便您知道退款与该特定目的相关。
  • 扩展我之前的观点,我建议考虑一个单独的退款表,其中包含唯一的RefundID,CustomerID,OriginalPurchaseID,ItemID,Amount和Reason列(可能还有PaymentMethod)。您的销售表将保持几乎相同:(唯一)PurchaseID,CustomerID,ItemID,Amount,PaymentMethod。另外,请注意您的ItemID,因为当前设置需要为每个itemID单独输入(带有重复的purchaseID)。

希望这有点帮助,可以引导您找到更好的结构。不要害怕有多张桌子,只要确保你有一个很好的方法来联系他们!