我正在尝试设计一种数据结构,其中类/表本身具有多重差异。我不知道该怎么调用它或者我是否使用了正确的术语。
希望我可以用以下示例来说明我的问题:
有一个网上商店,有人买了东西然后去结账。在结帐时,他们可以选择付款类型。客户选择现金以及使用何种货币。
另一位客户也做了同样的事情,但使用信用卡在线支付。
现在针对这种情况我有以下mysql方案:
**Order**
order_id
customer_id
is_paid
payment_type_id
**payment_type**
payment_type_id
payment_name
还有一个包含常用信息的客户表。但是,如果已付款,以及如果需要有关客户如何付款的信息,我应该在哪里保存。
这样的数据库会是什么样子,查询会是什么样子?
我不喜欢表中的小字段,其中数据可以是任何内容,具体取决于查询问题的类型(或者这是要走的路吗?)。
希望我对我的要求足够清楚。
最佳答案
如果您希望将每个订单的单笔付款附加到订单上,那么“is_paid”以及付款类型就可以了。在这种情况下,您也希望那里有货币。因为它与付款类型无关。
只有当您想了解有关付款的更多信息(例如付款时间)或者您考虑一次为多个订单付款,或者即使付款没有同时发生时,我才会看到问题顺序和您想要分离的概念。
要解决第一个问题,而不是 is_paid,您可以使用一个日期时间字段,当它为 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 付款,则这将是一种矫枉过正,在这种情况下,只需沿着订单存储您的付款信息即可。
关于php - MySQL + PHP data/codescheme 设计多重差异化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17154906/