0

我正在尝试设计一个数据结构,其中类/表本身具有多个差异化。我不知道该怎么称呼它,或者我是否使用了正确的术语。

希望我可以用下面的例子来说明我的问题:

有一个网上商店,有人买了东西然后去结账。在结账时,他们可以选择他们的付款方式。客户选择现金和使用什么货币。

另一位客户也这样做,但使用信用卡在线支付。

现在我有以下针对这种情况的 mysql 方案:

**Order**
order_id
customer_id
is_paid
payment_type_id

**payment_type**
payment_type_id
payment_name

以及一个包含常用信息的客户表。但是,如果已付款,以及是否需要有关客户将如何付款的信息,我在哪里保存。

这样的数据库会是什么样子,查询会是什么样子?

我不喜欢表中的一个小字段,其中数据可能是任何取决于查询问题的类型(或者这是要走的路?)原因。

希望我对我的要求足够清楚。

4

2 回答 2

0

如果您希望为每个订单附加一次付款,那么“is_paid”以及付款类型就可以了。在这种情况下,您也想要那里的货币。因为它与付款类型无关。

如果您想了解有关付款的更多信息,例如付款时间,或者您考虑一次支付多个订单,或者即使付款没有与订单同时发生,我只会看到问题,并且你想分离概念。

要解决第一个而不是 is_paid 的问题,您可以有一个 datetime 字段,当它为 NULL 时不支付。对于第二次和第三次,您还需要一些付款实体。对于具有一些关于付款的逻辑的更丰富的模型,我会有类似的东西:

**Order**
id
payment_id
...
(all sort of info about the order)

** Payment **
id
customer_id
payment_type (or payment_type_id)
payment_value
payment_currency
payment_date
...
(more info about the payment)

根据您对 payment_type 的处理方式,您可以考虑仅使用描述类型的值或表的 id 以及您已经拥有的更多信息。

但是,如果您只有订单 1..1 付款,这将是一种过度杀伤,在这种情况下,只需按照订单存储付款信息即可。

于 2013-06-17T20:03:44.910 回答
0

这是主观的,但我通常在订单表中有支付类型(现金、信用卡、灵魂等)、支付金额(100.00)和支付货币(美元、加元、墨西哥比索等)字段,或者,如果您的支付系统支持,您可以添加转换因子。

于 2013-06-17T19:38:46.940 回答