1

首先,我感谢任何帮助。

我正在努力寻找一些数据库设计的最佳方法,我什至不完全确定从哪里开始搜索我所追求的设计类型。

简而言之,我们有很多支付方式类型,例如现金、信用卡和贝宝。但是这些方法中的每一个都需要它们自己的参数集,用于设置详细信息(即 PayPal 的 API 详细信息)以及需要不同字段集的每种方法的交易 - 即。对于信用卡 - 我们需要开始日期、结束日期、卡号等。 - 对于贝宝,我们需要电子邮件地址和其他一些东西。

现在 - 我可以简单地拥有表格:payment_method_typespayment_methods并且payments它具有涵盖所有基础的所有必需字段 - 例如paypal_email_address字段等。但是有没有更好的解决方案来模拟更多基于文档的数据库,您只需拥有相关领域?

例如下面的表格payment_method_types, paypal_payment_methods, cash_payment_methods,paypal_payments等等cash_payments。这看起来不太好。

对于我想要实现的目标,必须有一个好的解决方案?我是否只需要包含所有可能的字段(即paypal_email_address等)并在我的应用程序中处理它?

非常感谢您的任何意见。

4

2 回答 2

1

我可能会被关系型的人否决:),但是您可以将这种类型的信息存储在JSON(PostgreSQL 版本 9.3 中对 JSON 有很好的支持)或hstore列中,它可能是关系数据库和 noSQL 风格的良好组合。

您可以在类型列中存储金额、日期、货币等常见字段,并使用 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,并将所有附加信息存储在 中PaymentsPayPalPaymentsCreditCard依此类推。

于 2013-08-30T14:07:10.060 回答
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

然后,无论何时处理付款,只编写一个方法,并确保该方法适用于 aPaypalPayment和一个CreditCardPayment对象。对所有类都相同的方法可以放在 PaymentType 模块中,以保持代码干爽。

于 2013-08-30T14:23:51.207 回答