我有一个创建订单的系统,该订单可以记入房屋帐户、货到付款 (COD) 或从信用卡中收取。我创建了以下表格:
ORDERS
order_id
billingoption_id
BILLINGOPTIONS
billingoption_id
我不确定应该如何为计费数据构建下一个表。我应该为每种类型的计费选项(即 COD、信用卡和家庭账户)建立一个单独的表吗?那么我会在 Orders 表上有另一个外键列来引用计费数据的记录吗?
我有一个创建订单的系统,该订单可以记入房屋帐户、货到付款 (COD) 或从信用卡中收取。我创建了以下表格:
ORDERS
order_id
billingoption_id
BILLINGOPTIONS
billingoption_id
我不确定应该如何为计费数据构建下一个表。我应该为每种类型的计费选项(即 COD、信用卡和家庭账户)建立一个单独的表吗?那么我会在 Orders 表上有另一个外键列来引用计费数据的记录吗?
你可以用任何一种方式来做:一个大的喇叭billingoptions
表,它的字段包含所有类型,NULL 表示不适用于给定类型的字段,或者一堆“明星”父表的子billingoptions
表. 两者都有其优点和缺点。
对于大喇叭桌,
对于小婴儿桌,
在工作中,我们最终选择了小婴儿桌。它看起来像这样:
表顺序: --> OrderId PK -->(很多其他领域) 餐桌付款: --> PaymentId PK --> OrderId (FK) [每个订单可能有多个付款] --> PaymentType [受限字段包含类似的值 'PAYPAL' 或 'CREDIT',你用它来知道哪个 要查找的婴儿表,可以包含其他 信息] 表付款贝宝: --> PaymentPayPalId PK --> PaymentId FK 指向 Table Payments --> 事务号 -->(其他 PayPal 特定字段) 表付款检查: --> PaymentCheckId PK --> PaymentId FK 指向 Table Payments --> 路由号 -->(其他电子支票特定字段) + 其余付款类型的其他表格....
所有支付类型共享三个交易相关表:
表付款批准: --> PaymentApprovalId PK --> PaymentId FK 指向 Table Payments --> 状态 [一些标志意味着“成功”、“失败”、“逆转”等] --> ProcessorMessage [服务发回的东西,比如'(M) CVV2 Matched'] --> 金额 -->(其他行政领域) 表支付存款: --> PaymentDepositId PK --> PaymentApprovalId FK 指向表 PaymentApprovals --> 状态 --> 处理器消息 --> 金额 -->(其他行政领域) 表付款退款: --> PaymentRefundId PK --> PaymentDepositId FK 指向表 PaymentDeposits --> 状态 --> 处理器消息 --> 金额 -->(其他行政领域)
我们所有的付款方式(信用卡、PayPal、Google Checkout、支票、现金、商店信用和汇票)都被抽象为适合这个 Approval --> Deposit --> Refund 比喻,并且 UI 调用相同的方法anIPayment
和IPaymentProcessor
具有不同实现的接口(CybersourcePaymentProcessor
,PayPalPaymentProcessor
等)。尽管有时 GUI 会向用户显示不同的措辞(例如,它会说“授权”和“收费”而不是“批准”和信用卡支付的“存款”,输入现金的屏幕一举执行批准/存款步骤。)
希望这是有道理的。听起来您实际上并没有存储付款信息,但考虑这些事情最终会在哪里是很有用的。
专注于事物。实际的东西。试着先用自然语言简单、直接地描述事物。
然后,当您要求设计指导时,您可以提供定义。在某些情况下,编写定义的行为会使设计具体化。
订单就是东西。订单的属性是什么?客户、产品、付款/计费选项。
计费选项(几乎)是东西。显然,您可以定义和识别它们。(我不确定我能不能。从你的问题来看,你似乎可以。但如果没有一句话总结,我不确定 Billion Options 发生了什么。
什么是“计费数据”?这是什么东西?它有什么属性(或属性)?
“计费数据”与订单有何关联?它与计费选项有何关系?
随意用每件事的定义来更新问题。