具有两个角色的帐户之间的关系的最佳实践是啥?

Posted

技术标签:

【中文标题】具有两个角色的帐户之间的关系的最佳实践是啥?【英文标题】:What is the best practice for a Relation between Accounts with two roles?具有两个角色的帐户之间的关系的最佳实践是什么? 【发布时间】:2020-04-02 02:58:07 【问题描述】:

我试图在一个帐户可以拥有的两个角色之间建立最佳关系,即“用户”和“公司”。我在这些之间做出决定:

如果有人要注册,他/她需要选择要使用的角色,然后填写其余字段。例如,如果我注册为用户,则“companyId”字段将为空,我不希望这样......

这里也一样,如果我注册为公司,我需要填写必填字段,仅此而已,但“userId”字段为空,以防我收到任何反馈或放置我的项目。

那么,这样做的最佳做法是什么?您可以阅读User 或Company 需要填写的完整“字段”。

【问题讨论】:

Firebase 数据库(包括实时数据库和 Firestore - 您还没有说您使用的是哪个)本质上是 NoSQL 和非关系型的。您不能强制使用具有关系的模式。您可以让任何字段保持最新状态,并且可以自行设计数据,以便为您打算执行的查询提供服务。 嘿,Doug,我想在这个带有 firestore 的项目中使用 firebase,但我想将其保留为关系数据库(对我来说更舒服) 那么忽略数据库组件,我们只需要讨论概念关系。多解释一下流程,因为在不同的场景下两者都一样有效和无效,那么属于公司的用户呢?如果您无法从另一个角度回顾这一点,请从 1:many 的角​​度考虑,考虑您期望使用的查询类型和数据,这些关系有助于管理您的结构。 【参考方案1】:

当然,第一个提出了一些问题。

为什么account 会被建模为feedbackproject 的子代? 同样,为什么usercompany 都是account 的子实体?

我认为这些关系是倒退的:不是“帐户有用户”而是“用户有帐户”。对Account --> FeedbackAccount --> Project 应用相同的内容:反馈是针对帐户提供的,并且项目与帐户相关联。这与您在第二张图中所做的很接近,但也存在一些问题:

如何处理CompanyCompany 真的 是独立于 User 的实体吗?或者他们之间有什么关系? Account 在第二张图中的位置是什么?

我会建议这样的事情(需要使用正确的键更新字段,但关系是重要的部分):

这允许UserCompany 拥有Account。它还允许将User 分配给CompanyAccount 属于 UserCompanyProjectFeedback 都是根据 Account 定义的。

同时考虑每个关系的基数

一个用户可以与多个公司关联吗?必须将所有用户分配到公司吗? 公司可以没有用户吗? 帐户是否只有一位所有者?它可以同时归用户和公司所有吗?它可以没有所有者吗?

还有一些更一般的问题需要考虑:

项目是否独立于帐户而存在(这可能被表述为“Projectweak 还是 strong 实体?”)? 反馈真的适用于帐户吗?还是反馈实际上是用户/公司的财产?

【讨论】:

以上是关于具有两个角色的帐户之间的关系的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

预加载具有多对多关系的核心数据的最佳实践

Spring Data R2dbc中处理表之间关系的最佳实践

最佳实践:应该避免双向关系吗? [关闭]

处理 javascript 和 css 文件的最佳实践是啥

在 ASP.NET MVC 项目中设置具有不同帐户和视图的多个公司的最佳实践

最佳用户角色权限数据库设计实践? [关闭]