由于我是数据库架构的新手,因此需要一些最佳实践智慧。这适用于市场类型的应用程序。我喜欢的主要问题是处理用户。
我想要实现的是买方和卖方帐户共享登录/注册功能和一些特征,但卖方帐户有能力销售,接收付款等。买方可以发送请求,卖方可以完成它们。基本上卖方可以做买家可以做的一切,但另外查看和履行请求,并出售。
我会选择简单的角色,除了卖家在产品和付款信息方面的关系比买家更复杂。卖家也需要能够公开上市,并拥有公开的个人资料。我不确定拥有两个用户类型的大表将是理想的。
我目前的想法是在基本用户表和卖家表之间使用多态关联(也可能是买家特定的表):
正如您所看到的,一个重要问题是买家和卖家都有重复的数据。这是因为当我显示卖家时,我不想进行多表查询,但也许这不是问题?另一个选择是拥有用户基表,然后是买方和卖方表,但它们仍然包含重复信息。
向所有可能性开放..最好的方法是什么?
答案 0 :(得分:0)
答案 1 :(得分:0)
假设所有用户都是买家,但不是两者兼而有之,我会做以下事情,我认为这基本上就是你提出的建议:
PERSON //我实际上有一个ROLE表,只在PERSON表中包含role_id但是除了复杂性之外可能不会添加任何内容,这取决于是否有关于要在db中存储的不同角色的数据
卖方 为person_id
买方 为person_id //也许没有任何额外的买家数据,但是如果要实现数据库级别的外键约束,那么填充此表将允许您约束实际的买家
然后是附加表格。如果您使用外键约束来保证数据完整性,那么您将约束buyer_id& sell_id在特定的表(买方,卖方)上,它保证您不仅仅是限制PERSON。
如果人们既可以是买家也可以是卖家,那么我可能仍会使用此模型并拥有BUYER_AND_SELLER角色,但如果您确信这些是唯一的,可能最好将列is_buyer和is_seller添加到PERSON你将永远支持的角色。
答案 2 :(得分:0)
您可以使用数据库超类型和子类型来表示此类关系。
对于您的示例,我将数据模型拆分为两组:用户和角色。角色可以是买方或卖方,用户可以拥有零个或多个角色。
然后我会创建以下逻辑实体来表示角色关系:
<强>超类型强>
<强>亚型强>
对于您的物理设计,我建议使用以下设计之一:
访问模式
在决定如何建模子类型和超类型关系时要考虑的一个因素是您的查询是否需要访问超类型和子类型表中的列。如果您的大多数查询都将访问超类型和子类型表中的列,那么单个表可能是更好的设计。
编辑 - 我建议使用第一种设计,除非有令人信服的理由为子类型创建单独的表。包含type列的外键可用于限制与特定子类型的关系。
将用户映射到角色
要将用户分配给角色,只需在User表和超类型(UserRole)表之间创建多对多关系即可。