具有两个角色的帐户之间的关系的最佳实践是啥?
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
会被建模为feedback
和project
的子代?
同样,为什么user
和company
都是account
的子实体?
我认为这些关系是倒退的:不是“帐户有用户”而是“用户有帐户”。对Account --> Feedback
和Account --> Project
应用相同的内容:反馈是针对帐户提供的,并且项目与帐户相关联。这与您在第二张图中所做的很接近,但也存在一些问题:
Company
? Company
真的 是独立于 User
的实体吗?或者他们之间有什么关系?
Account
在第二张图中的位置是什么?
我会建议这样的事情(需要使用正确的键更新字段,但关系是重要的部分):
这允许User
和Company
拥有Account
。它还允许将User
分配给Company
。 Account
属于 User
或 Company
,Project
和 Feedback
都是根据 Account
定义的。
同时考虑每个关系的基数:
一个用户可以与多个公司关联吗?必须将所有用户分配到公司吗? 公司可以没有用户吗? 帐户是否只有一位所有者?它可以同时归用户和公司所有吗?它可以没有所有者吗?还有一些更一般的问题需要考虑:
项目是否独立于帐户而存在(这可能被表述为“Project
是 weak 还是 strong 实体?”)?
反馈真的适用于帐户吗?还是反馈实际上是用户/公司的财产?
【讨论】:
以上是关于具有两个角色的帐户之间的关系的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Data R2dbc中处理表之间关系的最佳实践