php - MySQL + PHP data/codescheme 设计多重差异化

标签 php mysql sql

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

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

有一个网上商店,有人买了东西然后去结账。在结帐时,他们可以选择付款类型。客户选择现金以及使用何种货币。

另一位客户也做了同样的事情,但使用信用卡在线支付。

现在针对这种情况我有以下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/

相关文章:

php - 即使字段为空,此 PHP 表单也通过了验证

mysql - 寻找成员(member) 初级商店

MySQL:提取一个数字,该数字位于两个表之一中

MySQL Workbench 在 Windows 上启动时崩溃

java - 我正在尝试使用 JDBC 从 Oracle 表中提取 XMLTYPE 列,但遇到一些问题

sql - 执行计划成本估算

php - PhpStorm + Docker + Xdebug + DB SSH隧道

php - 无法使用 angular.js 和 PHP 在 View 上绑定(bind)数据

mysql ->= OR <= 组合会触发全表扫描吗?

php - Codeigniter 表单提交到多个地方