首先,我感谢任何帮助。
我正在努力寻找一些数据库设计的最佳方法,而且我甚至不确定在哪里开始搜索我甚至追求的设计类型。
简而言之,我们有一堆付款方式类型,例如现金,信用卡和PayPal。但是这些方法中的每一个都需要它们自己的一组参数用于它们的设置细节(即用于PayPal的API细节的信息)以及用于需要不同字段集的每个方法的事务 - 即。对于信用卡 - 我们需要开始日期,结束日期,卡号等。 - 对于paypal,我们需要电子邮件地址和其他一些东西。
现在 - 我可以只使用表格payment_method_types
,payment_methods
和payments
,其中包含涵盖所有基础的所有必填字段 - 例如paypal_email_address
字段等。但有没有更好的解决方案,模仿更多的基于文档的数据库,你只需拥有相关的领域?
例如,以下表格payment_method_types
,paypal_payment_methods
,cash_payment_methods
,paypal_payments
,cash_payments
等等。这看起来并不那么好。< / p>
对于我想要达到的目标,必须有一个很好的解决方案吗?我是否只需要包含所有可能的字段(即。paypal_email_address
等...)并在我的应用程序中处理它?</ p>
非常感谢任何意见。
答案 0 :(得分:1)
我可以通过关系人:)来投票,但你可以在JSON(在PostgreSQL版本9.3中有JSON的良好支持)或hstore列中存储这类信息,它可以是关系数据库和noSQL风格的完美结合。
您可以在类型列中存储Amount,Date,Currency等常用字段,并使用一列JSON / hstore类型来存储卡号等其他详细信息。所以你的数据可能如下:
Type Date Amount Currency Additional
Credit Card 2013-08-01 15.1 EUR {Card Number: "XXXX-XXXX-XXXX-XXXX"}
PayPal 2013-07-02 103.8 USD {Email: "client@company.com"}
或hstore:
Type Date Amount Currency Additional
Credit Card 2013-08-01 15.1 EUR Card Number => "XXXX-XXXX-XXXX-XXXX"
PayPal 2013-07-02 103.8 USD Email => "client@company.com"
或者您可以创建子表以获取其他信息 - 因此您可以将常用数据存储在表格Payments
中,并将所有其他信息存储在PaymentsPayPal
,PaymentsCreditCard
等等。
答案 1 :(得分:1)
这个答案可能非常复杂,但我会选择一些简单的东西来激发灵感。像
这样的东西CreditCardPayment < ActiveRecord::Base
include PaymentType
def paypal_some_kind_of_id
2
end
end
PaypalPayment < ActiveRecord::Base
include PaymentType
def paypal_some_kind_of_id
1
end
end
然后,每当处理付款时,只编写一种方法,并确保该方法适用于PaypalPayment
和CreditCardPayment
对象。对于所有类都相同的方法可以在PaymentType模块中,以保持代码干燥。