首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库中的三角关系

数据库中的三角关系
EN

Software Engineering用户
提问于 2019-09-10 06:37:48
回答 1查看 1.3K关注 0票数 1

我在找出一些数据库表之间的关系时遇到了问题。这种情况的场景是一个b2b buissnes。

我有三张桌子:

  • 用户
  • 公司
  • 分销商。

A公司有多个用户(1对多)公司有多个分销商(多对多)分销商有多家公司(多对多)用户有1家公司(多到1)

现在我被困在下一步了。

我在系统中构建了一些角色和权限。

用户可以是:-经销商-A公司(经理)-用户

在完美的场景中,用户可以是经销商,也可以是公司。我怎样才能在数据库中做到这一点。我想出了一个解决办法,但这不是最好的解决办法。这将使用户将处于与公司和经销商的OneToMany关系。关系可以为空,当用户是公司时,将设置与公司的关系。如果用户是分发服务器,则将设置与分发服务器的关系,公司关系将为空。

我认为这不是最好的解决办法,但我想不出更好的解决办法。

我如何使用户可以是一个经销商或公司,而不将关系设置为0。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2019-09-10 08:01:34

用于用户关系

的替代方案

理论上有哪些选择:

  1. 您有一个类User,它与Company关联,另一个关联到Distributor。在这两个关联之间也有一个约束,即只有一个可以在给定的时刻处于活动状态。结果:关联可能会随着时间的推移而改变,用户一旦被分配到公司,稍后就会被分配给经销商。
  2. 您有一个通用类User,它有两个专门化:与Company不关联的CompanyUser和与distributor关联的DistributorUser。结果:虽然公司用户可能会随着时间的推移而更改公司,但他/她可能不会更改为分发服务器(需要创建不同的用户)。

对替代

的选择

在你看来,哪种模式最准确?公司用户和分销商用户之间的其他区别是什么,可以证明专业化是合理的?

我手头没有所有的卡片,但直觉地说,我会选择1,这将实现与您所描述的完全一样。

方法2将实现(也)如您所描述的(使用单继承表模式)或使用2个表(假设用户是抽象的并使用具体表继承模式,但这两个表可能看起来非常相似),或者使用3个表(使用类表继承)和两个需要大量sql联接的附加关系。

现在,看看这些其他的替代方案,除非公司和经销商的用户会有很大的不同,在我看来,额外的表似乎是过头了,我仍然坚持您最初的方法,这在我看来是一个非常好的选择。

公司/分销商方面的其他替代方案?

但是,还有一个值得研究的问题:您确定distributorcompany不是抽象LegalEntity的两个专门化吗?

在这种情况下,您可以考虑简化用户端的事情,只在他/她所属的userLegalEntity之间建立一个关系。然后,您将将法律实体、分发服务器和公司管理为类继承表方案的表,该表方案实现了类之间的继承方案。

也许最后一种选择是过分的,但根据分发服务器和公司之间的相似之处,您可以通过代码中更多的一致性和更少的冗余来弥补额外的复杂性。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/397198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档