具有两个角色的帐户之间的关系的最佳做法是什么?

What is the best practice for a Relation between Accounts with two roles?

我正在尝试获得一个帐户可以拥有的两个角色之间的最佳关系,即 "User" 和 "Company"。我在这些之间做出决定:

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

这里也一样,如果我注册为公司,我需要填写必填字段就这样,但是字段"userId"是空的,以防我收到任何反馈或者我把我的项目.

那么执行此操作的最佳做​​法是什么?一个User or Company需要填写的完整的"fields"你可以看一下。

第一个确实提出了一些问题。

  • 为什么 account 被建模为 feedbackproject 的 child?
  • 同样,为什么 usercompany 都是 account 的 child 个实体?

我认为这些关系是倒退的:不是 "Accounts have users" 而是 "Users have accounts"。对 Account --> FeedbackAccount --> Project 应用相同的方法:反馈是在帐户上给出的,项目与帐户相关联。这与您在第二张图中所做的很接近,但也有一些问题:

  • Company怎么办? Company 真的 是与 User 不同的实体吗?或者他们之间有什么关系?
  • 第二张图中 Account 的位置?

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

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

还要考虑以下每个关系的基数

  • 一个用户可以关联超过 1 个公司吗?必须将所有 用户分配给一家公司吗?
  • 公司能没有用户吗?
  • 一个帐户是否只有 1 个所有者?它可以同时由用户和公司拥有吗?它能没有主人吗?

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

  • 项目是否独立于帐户存在(这可能表述为 "is Project a weak or a strong entity?")?
  • 反馈真的适用于帐户吗?或者反馈实际上是 User/Company 的 属性?