我试着查看类似的StackOverlow帖子,而这些关于模式输入的问题似乎是有效的。而且,我是一名软件开发人员,而不是行业的DB专家。所以希望这一切都能很好地实现。
我正在使用Server,尽管我认为这个问题足够通用,因此它可能适用于几乎任何SQL产品,因为它涉及到我的场景的最佳模式。
我正在写一个推荐支付系统,根据这个系统,商店可以信用并偿还推荐客户的个人。这些实体是-
当确定什么是支付给推荐人,我需要总结所有的转诊采购,但没有被记入。支付尝试时的金额是支付的金额。
令人困惑的是,当一个管理员支付一笔款项时,它可能因为许多原因而失败(资金不足,推荐人给出了糟糕的PayPal信息,等等)。所有这些都需要储存起来,以便我不仅可以回顾过去的付款尝试,确定失败的原因和涉及哪些转诊采购,而且还可以确定哪些转诊采购尚未记入转诊者的账项。
我所能设计的最佳模式如下:

这里的要点是,每个PaymentAttempt保存付款尝试的状态(成功/失败),在付款尝试中贷记的每个转介购买都有一个链接表,它将其与付款尝试相关联。因此,一次转诊购买可能涉及到对推荐人的任何次数的努力,最后一次是成功的尝试。
最终,我的问题是这样的:当我需要回去,然后确定推荐人需要在以后的某个日期支付多少钱时,如果我需要查询所有与推荐人相关的ReferralPurchases,然后加入所有的ReferralPurchase/PaymentAttempt链接表,然后加入相关的PaymentAttempt状态表,找出哪些推荐购买还没有得到贷记,那么在未来的几年里,这会是一个痛苦吗?我可以看到,我自己需要创建相当奇怪的查询,仅仅是为了找到这五项尚未得到确认的采购。
或者,我可以用状态标志更新ReferralPurchase本身,但这是否被认为是“请求”数据完整性(我想我可以看到有人说这是糟糕的设计,因为状态可以以其他方式被查询,并且可能是一个错误可能导致在没有适当记录的情况下设置比特来保证它的完整性)?这设计不好吗?
还是有什么更好的方法来解释呢?
发布于 2015-11-10 06:42:28
我会尽力帮助你,希望我能正确理解你的问题。如果我在设计这个系统的话,就会有两张特别适合我的桌子。表和它们的列是。
ReferralPurchase
·ReferralPurchase_Id (PK)
·Referrer_Id (指向person表)
·Referral _Id (指向person表)
支付
·Payment_Id (PK)
·ReferralPurchase_Id (FK)
·AmountToBePaid
·StatusOfPayment
·DateLogged
·DatePaymentMade (如果状态不成功,则为零)
·Admin_Id (指向person表)
发布于 2015-11-10 07:01:10
本,不知道你所说的状态字段是什么意思。我会避开生命周期状态字段,但会考虑布尔值。例如:
在isPaid上设置ReferralPurchase标志似乎是一种合理的方法。它只应在确认付款后更新,如果对设置它的原因有疑问,则证据将以来自PaymentAttempt和链接表的历史记录的形式存在。这将简化对未支付款项的查询,而尚未支付的付款将只是不完整的PaymentAttempts。从理论上讲,历史可能与国旗的价值相矛盾。
或者,如果我这样说的话,链接表上可以有一个isSuccessful标志,它“更接近源”,因为它不能像历史本身那样很容易地发生冲突(例如,编码器不允许为给定的ReferralPayment标记多行isSuccessful )。寻找未支付的款项只是那些不存在ReferralPayments链接记录的isSuccessful。
其他人对此会有不同的看法。告诉我们你往哪走。
https://stackoverflow.com/questions/33623665
复制相似问题