我有一个要求,我需要创建一个数据库,用户可以使用多种付款方式,而这些多种付款方式可以处理多个交易。
我创建了以下架构
为什么选择这些表:
user:此表包含有关用户的信息。例如:名字,姓氏,电子邮件等
user_payment_method :由于单个用户可以使用多种付款方式,因此我创建了一个表来识别他拥有的所有付款方式,以便我可以在交易表中引用它们,并且可以准确了解哪些付款方式交易的方法。
事务:此表包含有关所有事务的所有数据。例如:Time,user_id,user_method_id,金额等
payment_method:此表充当联结表(数据透视表),以引用可能存在的所有付款方式。由于所有付款方式都有不同的细节,因此无法为此制作单一表格。
特定付款方式表:bank_transfer和paypal等表格包含用户对该付款方式的具体详情。例如:PayPal密钥或银行帐号
问题
我坚持在payment_method
和specific payment method tables
之间建立关系。
如何在payment_method表的单个列中引用不同的付款方式。我是否为每种特定的付款方式创建了一个联结(枢轴)表?
编辑 :如果有人采用更简单的方法,请让我知道我对所有想法持开放态度。
答案 0 :(得分:2)
我可能会简化架构,如下所示:
user <- transaction -> payment method
付款方式包括您的PayPal和银行转帐,不应该是不同的表格。
通常,您应该将付款方式视为交易的类型。
构建数据库时,您将查找实际操作所在的表。在这种情况下,它是事务表。您可以从实体图中将其识别为外键指向外部的图。在这种情况下,您可以说某个交易属于某个用户并且属于某种类型。
交易表将包含实际的付款细节,例如日期,金额,交易编号等。
您还可以找到首选付款明细表。这会给你这样的东西:
user <- transaction -> payment method
<- preferred ->
请记住,首选项可以更改,因此首选表中的数据应复制到事务表中,以便稍后更改首选项。
毋庸置疑,我们假设您正在采取有关密码,帐户详情和其他敏感数据的所有适当预防措施......
答案 1 :(得分:1)
该问题可归类为建模继承。您有n种付款方式,每种付款方式都有不同的(特定于用户)属性。最简单的是每个层次结构的TPH表:将所有付款方法的所有用户属性放在user_payment_method表上。还有其他选项here。忘记数据透视表:您正在为数据库模式建模,而您只需要表和列。想想你需要存储什么,如何检索它,以及仅存储一次事实的重要性。