用于在SQL中存储付款尝试记录的模式

时间:2015-11-10 05:42:26

标签: sql sql-server database-schema

我尝试查看类似的StackOverlow帖子,似乎有关模式输入的问题是有效的。另外,我是一名软件开发人员而非交易数据库专家。所以希望这很好。

我正在使用SQL Server,虽然我认为这个问题足够通用,它可能适用于几乎所有SQL产品,因为它适用于我的场景的最佳架构。

我正在编写推荐支付系统,商店可以对推荐客户的个人进行信贷和偿还。实体是 -

  • 推荐人:为推荐客户支付费用
  • 推介:推荐的客户
  • 推介购买:推介购买的金额和日期。
  • 管理员:付费的人。

在确定向推荐人支付的费用时,我需要计算所有尚未记入的推介购买。支付尝试时的金额是获得支付的金额。

这一切的混淆部分是当管理员付款时,它可能由于多种原因(资金不足,推荐人提供不良的PayPal信息等)而失败。所有这些都需要存储,以便我不仅可以回顾过去的付款尝试,并确定失败涉及的失败和推荐购买,还可以确定哪些推荐购买尚未记入推荐人。

我能够设计的最佳架构如下: enter image description here

这里的要点是每个PaymentAttempt都保存付款尝试的状态(成功/失败),并且在付款尝试中记入的每个推荐购买都有一个链接表,该链接表将其与付款尝试相关联。然后,一次推荐购买可能涉及向推荐人提供信贷的任何数量的尝试,最后一次是成功尝试。

最终我的问题归结为:当我需要返回然后确定推荐人需要在以后支付多少时,如果我需要查询所有这几年,这将是一个痛苦吗?与推荐人相关联的推荐购买,然后加入所有的ReferralPurchase / PaymentAttempt链接表,然后加入相关的PaymentAttempt状态表,找出尚未记入哪些推荐购买?我可以看到自己需要创建非常奇怪的查询,只是为了找到尚未记入的五个购买。

或者我可以使用状态标志更新ReferralPurchase本身,但这被认为是“请求它”的数据完整性(我想我可以看到一些说这是糟糕的设计,因为状态可以通过其他方式查询,也许一个错误可能会导致该位被设置而没有适当的记录来保证它)?这是不好的设计吗?

还是有更好的方法来解决问题?

2 个答案:

答案 0 :(得分:0)

我会尽力帮助你,希望我能正确理解你的问题。如果我正在设计系统,那么会有两个表格对我而言非常突出。表和它们的列是。

<强> ReferralPurchase

•ReferralPurchase_Id(PK)

•Referrer_Id(指向人员表)

•推荐_Id(指向人员表)

付款

•Payment_Id(PK)

•ReferralPurchase_Id(FK)

•AmountToBePaid

•StatusOfPayment

•DateLogged

•DatePaymentMade(如果状态不成功则为空)

•Admin_Id(指向人员表)

答案 1 :(得分:0)

Ben,不确定你的状态字段是什么意思。我会远离生命周期状态字段,但会考虑一个布尔值。例如:

ReferralPurchase上的isPaid标志似乎是一种合理的方法。它只应在确认付款时更新,如果询问为何设置,则证据将以PaymentAttempt和链接表的历史形式存在。这将简化未付款的查询,而待付款只是不完整的PaymentAttempts。理论上有可能历史可能与国旗的价值相矛盾。

或者,你可以在链接表上有一个isSuccessful标志,它更靠近源&#34;如果我可以这样说,因为它不容易发生冲突,因为它是历史本身(只要编码器不允许标记多于一行,例如给定的ReferralPayment是成功的)。查找未付款只是那些不存在的ReferralPayments isSuccessful链接记录。

其他人会对此有不同的看法。让我们知道你走哪条路。