考虑购物车,允许客户使用可变支付系统。
每个系统都有一组不同的参数:系统A具有引用id、xml响应、事务id等属性,系统B具有事务id和状态,系统C(支票)仅具有支付日期。每个系统的状态也不同。
在支付系统选择页面上有支付系统的名称和描述,它们也将存储在数据库中(例如,不是硬编码为HTML)。
您将如何设计数据库?
我能想到的最好的办法是为每个系统创建一个表+一个用于支付系统描述的表,链接到相关表的名称+ orders表中的2个额外字段:支付系统id (将链接到"description table"),支付记录id (将链接到相关支付系统表中的id )。这也允许提供特定的功能(订单通知处理等)在不同的支付系统模型之间分开,而不是使用ifs,可以吗?
如果说有什么不同的话,那就是该项目基于PHP5、Doctrine和MySQL。
发布于 2011-01-17 21:57:47
可以说,您可以有一个包含任何常见信息( id、名称等)的主系统表,然后有一个收集属性的名称/值对的第二个表:
CREATE TABLE system_table
(id int,
name char(50),
...
);
CREATE TABLE system_properties
(system_id int,
name char(50),
value varchar
);这可能对人们没有吸引力,因为属性的模糊映射,但另一方面,获取任何系统的属性变成了一个简单的连接,而不是试图将几个表放在一起。
请注意,上面的SQL create语句是伪代码。
发布于 2011-01-17 22:12:15
每种类型的支付系统都有一个表-该类型是一个或多个支付系统共有的一组唯一的属性。有一个包含所有这些类型的父表,其中包含所有这些类型共享的属性(例如系统名称)。
发布于 2011-01-17 22:58:11
dportas和jaydel说的加上我的两分钱。
每个支付系统都应该在表的一行中,而不是在自己的表中。每种类型的支付系统(专用支付系统)都需要一个自己的表,用于只为该类型收集的数据。
此外,应该有一个通用的支付系统表,其中包含与所有类型的支付系统相关的数据。
通用支付系统表和专用支付系统表之间的关系是一种经典的"gen=spec设计模式“。如果您查找"generalization specialization relational“,您会找到教您如何为gen-spec模式设计关系表的文章。
简而言之,gen表有一个经典的ID字段作为PK。每个专用表都有一个ID字段,它与gen表中的ID字段重复。这意味着它既是specialized字段中的主键,也是引用gen表的FK。
对数据库中其他地方的支付系统的FK引用应该引用gen表。
https://stackoverflow.com/questions/4713792
复制相似问题