Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在数据库中处理退款或/存储积分的最佳方法?_Database_Database Design_E Commerce - Fatal编程技术网

Database 在数据库中处理退款或/存储积分的最佳方法?

Database 在数据库中处理退款或/存储积分的最佳方法?,database,database-design,e-commerce,Database,Database Design,E Commerce,假设我有一个web应用程序,它是某种类型的存储。我有一张桌子,里面有所有的货币交易 客户ID、订单ID、支付金额等 这张表是用来做销售报告的 现在我们想给客户某种形式的信用,要么是礼券,要么是退款 将其与a-amount一起输入同一个表中是一个坏主意吗?还是把这些放在另一张桌子上比较好 使用此表结构设置站点时是否存在重大缺陷 我已经建立了一些类似这样的系统,但没有从其他人那里得到太多反馈,你们通常如何为数据库这样的存储设置表 谢谢, Ken通常,您会有理由退款,因此此用例的模式已经不同于购买的模

假设我有一个web应用程序,它是某种类型的存储。我有一张桌子,里面有所有的货币交易

客户ID、订单ID、支付金额等

这张表是用来做销售报告的

现在我们想给客户某种形式的信用,要么是礼券,要么是退款

将其与a-amount一起输入同一个表中是一个坏主意吗?还是把这些放在另一张桌子上比较好

使用此表结构设置站点时是否存在重大缺陷

我已经建立了一些类似这样的系统,但没有从其他人那里得到太多反馈,你们通常如何为数据库这样的存储设置表

谢谢,
Ken

通常,您会有理由退款,因此此用例的模式已经不同于购买的模式

那么现在你的选择是,你应该在这两个地方都存储退款吗?拥有多个真相来源总是让我感到不舒服

您将需要决定如何计算客户的总体平衡,将输入/输出存储在多个位置将使这一过程变得更加困难。因此,您又回到了一个单独的资金进出存储和一个单独的元数据存储退款

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

Refund
------
PurchaseId
Reason
显然还有其他字段,如您所说-ve退款值

碰巧的是,这更接近于真实世界的纸质账本和单独的“退款”簿


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

剥猫皮的方法有上百种,但这里有一些“思想食粮”要点:

  • 您可能会添加一个“退款”列,如果是退款,则该列将包含“1”,如果是销售,则该列将包含“0”。然后,您必须决定是否将金额全部保留为正值(如果退款栏中有“1”,则只需减去),或者如果您希望金额为正值和负值,则只需将退款栏视为更多的指标(可能出于报告目的)
  • 你应该考虑一下你的购买行为!你认为它更像是“交易ID”还是“订单号”。乍一看似乎没有什么区别,但交易ID对于每个条目都有一个唯一的ID,这意味着购买将是0000,退款将是0001(对于exmaple)。如果您将其视为订单号,则购买将为0000,退货也将为0000,以便您知道退款与该特定用途有关
  • 在我前面的观点的基础上,我建议考虑一个单独的退款表,该表将包含一个唯一的ReturnId、CustomerID、OriginalPurchaseID、ItemID、Amount和Reason列(也许还有PaymentMethod)。您的销售表将保持基本相同:(唯一)PurchaseID、CustomerID、ItemID、Amount、PaymentMethod。此外,请小心使用ItemID,因为当前设置需要为每个ItemID单独输入一个条目(重复purchaseID)

希望这能帮上一点忙,并能引导你找到一个更好的结构。不要害怕有多个表,只要确保你有一个很好的方法来关联它们就行了

我只是担心,如果有多个表,而您可以只使用一个表,那么编写代码会变得更慢、更复杂。把它放在一张桌子上有什么不对?我当然认为Orrid ID和事务ID是不同的,所以在一个表中是否有一个问题,这个表中的值是负值,可能是重复的顺序ID。或者在礼品券的情况下,新订单ID的金额为负数。同样,对于跟踪订单项目,我显然需要跟踪订购时每个项目的价格。人们是否倾向于先有一个表来存放物品,然后是另一个表来存放订购物品,该表中有物品购买时的价格,并有一个带有orderid的外键,然后在这种情况下,将订购物品的金额相加应该等于交易表中的金额……这似乎是多余的。这通常是如何处理的?也许我应该看看一些比较流行的购物车,看看它是怎么做的。2张小桌子比1张大桌子搜索得快。特别是如果你知道你正在寻找一个销售或回报(你可能会立即知道)!如果您确实需要从这两个表中提取数据,那么只需连接销售表即可。purchaseID=return.originalPurchaseID。正如我在回答中所说的,如果(并且只有)您正确地构建和关联了多个表,那么不要害怕它们。很多时候,多张桌子变成噩梦的原因是没有提前考虑。你现在似乎在避免那个错误,所以你应该表现得很好!此外,我还需要考虑如何处理订单上的多个项目。(我在回答中提到了这一点,但我没有详细说明,因为我没有时间为您研究一个好的答案)