在数据库模式中集成付款方式

时间:2017-04-13 11:45:20

标签: mysql database mysql-workbench entity-relationship db-schema

我有一个要求,我需要创建一个数据库,用户可以使用多种付款方式,而这些多种付款方式可以处理多个交易。

我创建了以下架构

enter image description here

  

为什么选择这些表:

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

user_payment_method :由于单个用户可以使用多种付款方式,因此我创建了一个表来识别他拥有的所有付款方式,以便我可以在交易表中引用它们,并且可以准确了解哪些付款方式交易的方法。

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

payment_method:此表充当联结表(数据透视表),以引用可能存在的所有付款方式。由于所有付款方式都有不同的细节,因此无法为此制作单一表格。

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

  

问题

我坚持在payment_methodspecific payment method tables之间建立关系。

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

编辑 :如果有人采用更简单的方法,请让我知道我对所有想法持开放态度。

2 个答案:

答案 0 :(得分:2)

我可能会简化架构,如下所示:

user <- transaction -> payment method

付款方式包括您的PayPal和银行转帐,不应该是不同的表格。

通常,您应该将付款方式视为交易的类型

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

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

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

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

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

毋庸置疑,我们假设您正在采取有关密码,帐户详情和其他敏感数据的所有适当预防措施......

答案 1 :(得分:1)

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