我有一个系统可以创建一个订单,并且该订单可以通过一个账户进行计费,发送货到付款(COD)或者向信用卡收取。我创建了下面的表格:我可以使用什么数据库模式来保存不同类型的帐单数据?
订单
ORDER_ID
billingoption_id
BILLINGOPTIONS
billingoption_id
我不确定如何邻桌应计费的数据基础之上。我应该为每种类型的结算选项(即COD,信用卡和住宅帐户)建立一个单独的表格吗?那么我会在Orders表上有另外一个外键列来引用记帐数据的记录吗?
我有一个系统可以创建一个订单,并且该订单可以通过一个账户进行计费,发送货到付款(COD)或者向信用卡收取。我创建了下面的表格:我可以使用什么数据库模式来保存不同类型的帐单数据?
订单
ORDER_ID
billingoption_id
BILLINGOPTIONS
billingoption_id
我不确定如何邻桌应计费的数据基础之上。我应该为每种类型的结算选项(即COD,信用卡和住宅帐户)建立一个单独的表格吗?那么我会在Orders表上有另外一个外键列来引用记帐数据的记录吗?
你可以这样做:一个大鸣喇叭billingoptions
表有字段s包含所有类型,对于不适用于给定类型的字段使用NULL,或者对父表billingoptions
进行“脱颖而出”的一堆婴儿表。两者都有其优点和缺点。
对于大鸣喇叭表,
对于小宝宝表,
在工作中,我们结束了去小婴儿桌。它看起来是这样的:
Table Orders: --> OrderId PK --> (Lots of Other Fields) Table Payments: --> PaymentId PK --> OrderId (FK) [There may be more than one payment per order] --> PaymentType [Restricted field contains values like 'PAYPAL' or 'CREDIT', you use this to know which baby table to look up that can contain additional information] Table PaymentsPayPal: --> PaymentPayPalId PK --> PaymentId FK points to Table Payments --> TransactionNo --> (Other PayPal specific fields) Table PaymentsCheck: --> PaymentCheckId PK --> PaymentId FK points to Table Payments --> RoutingNo --> (Other e-check specific fields) + other tables for remaining payment types....
所有支付类型的企业有三个共同事务相关的表:
Table PaymentApprovals: --> PaymentApprovalId PK --> PaymentId FK points to Table Payments --> Status [Some flag meaning 'Succeeded', 'Failed', 'Reversed', etc] --> ProcessorMessage [Something the service sent back, like '(M) CVV2 Matched'] --> Amount --> (Other administrative fields) Table PaymentDeposits: --> PaymentDepositId PK --> PaymentApprovalId FK points to Table PaymentApprovals --> Status --> ProcessorMessage --> Amount --> (Other administrative fields) Table PaymentRefunds: --> PaymentRefundId PK --> PaymentDepositId FK points to Table PaymentDeposits --> Status --> ProcessorMessage --> Amount --> (Other administrative fields)
我们所有的付款方式(信用卡,贝宝,谷歌结帐,支票,现金,商店信用和汇票)被抽象以符合该批准 - >存款 - >退款隐喻,并且UI在具有不同实施方式的IPayment
和IPaymentProcessor
接口上调用相同的方法(CybersourcePaymentProcessor
,PayPalPaymentProcessor
等)。尽管有时GUI会向用户显示不同的语言(例如,它会说“授权”和“收费”而不是“批准”,而且用户可能会说“授权”和“收费”),而抽象在这些不同方法的过去一年半中运行良好用于信用卡支付的“存款”和用于进入现金的屏幕一举进行批准/存款步骤。)
希望是有道理的。这听起来像是你实际上并没有存储付款信息,但考虑这些事情最终会发生的地方很有用。
专注于事物。实际的东西。试着简单地,直接地,首先用自然语言来描述事物。
然后,当您要求设计指导时,您可以提供定义。在某些情况下,编写定义的行为将会使设计结晶。
订单是东西。订单的属性是什么?客户,产品,付款/账单选项。
结算选项是(几乎)东西。显然,你可以定义和识别它们。 (我不确定我可以,从你的问题看来,你可能可以,但是如果没有一句话总结,我不确定Billion Options会发生什么事情。数据?”什么样的事情是什么?什么属性(或属性),它有?
如何做一个‘结算数据’涉及到订单?它是如何涉及结算选项?
感觉免费更新与每个事物的定义问题。