0

我有一个要求,我需要创建一个数据库,其中用户可以有多种付款方式,并且可以针对这些多种付款方式处理多个交易。

我创建了以下架构

在此处输入图像描述

为什么这些表格:

用户:此表包含有关用户的信息。例如:名字、姓氏、电子邮件等

user_payment_method:由于单个用户可以有多种付款方式,我创建了一个表来标识他拥有的所有付款方式,以便我可以在交易表中引用它们,并且可以确切地知道交易是在哪种付款方式上进行的。

事务:此表包含有关所有事务的所有数据。例如:时间、user_id、user_method_id、金额等

payment_method:这个表作为一个联结表(数据透视表)来引用所有可能存在的支付方式。由于所有付款方式都有不同的详细信息,因此我无法为此制作一张表格。

特定付款方式表:bank_transfer 和 paypal 等表包含用户对该付款方式的具体详细信息。例如:贝宝密钥或银行帐号

问题

我坚持在payment_method和之间建立关系specific payment method tables

如何在 payment_method 表的单个列中引用不同的付款方式。我是否为每种特定的付款方式创建一个联结(数据透视表)表?

编辑:如果有人有更简单的不同方法,请告诉我我对所有想法持开放态度。

4

2 回答 2

4

我可能会简化架构如下:

user <- transaction -> payment method

付款方式将包括您的 PayPal 和银行转账,它们不应是不同的表格。

通常,您应该将付款方式视为一种交易

构建数据库时,您会查找实际操作所在的表。在这种情况下,它是事务表。您可以从实体图中将其识别为外键指向外部的实体图。在这种情况下,您可以说交易属于某个用户并且属于某种类型。

交易表将包含实际的付款详细信息,例如日期、金额、交易编号等。

您还可以有一张首选付款明细表。这会给你这样的东西:

user        <- transaction  -> payment method
            <- preferred    ->

请记住,首选项可以更改,因此应将首选表中的数据复制到事务表中,以便以后更改首选项。

不用说,我们假定您已针对密码、帐户详细信息和其他敏感数据采取了所有适当的预防措施……</p>

于 2017-04-13T12:06:09.180 回答
2

该问题可以归类为建模继承。您有 n 种付款方式,每种方式都有不同的(特定于用户的)属性。最简单的是每个层次结构的 TPH 表:将所有支付方式的所有用户属性放在 user_payment_method 表中。这里还有其他选项。忘记数据透视表:您正在对数据库模式进行建模,而您只需要表和列。想想你需要存储什么,你需要如何检索它,以及每个事实只存储一次的重要性。

于 2017-04-13T12:21:45.407 回答