Database design 在设计在线b2b应用程序时,存储用户和公司的更好方法是什么?

Database design 在设计在线b2b应用程序时,存储用户和公司的更好方法是什么?,database-design,architecture,Database Design,Architecture,我正在设计一个在线应用程序,允许用户登录该应用程序并创建项目。现在我们需要添加公司,这样用户就可以属于他们自己的公司,让团队成员加入他们的公司并在项目上进行协作 据我所知,有两种不同的方法可以做到这一点: 展开“当前用户”表,以便每个用户都可能是公司。其他用户将以父/子关系加入现有公司用户。系统中的每个用户都可以是一个成熟的公司,也可以只是一个权力减少的下属团队成员。项目由公司的主要用户所有。如果不关闭公司,就永远无法删除主用户,因为他们是一个整体。用户表现在混合了公司用户和团队成员用户 保留“

我正在设计一个在线应用程序,允许用户登录该应用程序并创建项目。现在我们需要添加公司,这样用户就可以属于他们自己的公司,让团队成员加入他们的公司并在项目上进行协作

据我所知,有两种不同的方法可以做到这一点:

  • 展开“当前用户”表,以便每个用户都可能是公司。其他用户将以父/子关系加入现有公司用户。系统中的每个用户都可以是一个成熟的公司,也可以只是一个权力减少的下属团队成员。项目由公司的主要用户所有。如果不关闭公司,就永远无法删除主用户,因为他们是一个整体。用户表现在混合了公司用户和团队成员用户

  • 保留“当前用户”表并添加第二个“公司”表。每个用户不再拥有自己的项目,公司将拥有所有项目,而用户只是代表公司行事。每个用户不需要存储任何超出其登录详细信息、所属公司以及权限级别之外的内容。另一方面,公司存储所有项目、团队成员和客户。然而,这需要对代码进行一些重构

  • 在我看来,2号显然是更好的方式,几乎不用动脑筋。我是对的,还是我错过了什么


    TL;DR:用户和公司在一个表中,还是将用户和公司拆分为两个不同的表?

    选项2,当然可以。我不认为你错过了什么。你有没有反复阅读选项1?听起来像是一场彻头彻尾的噩梦

    如果不关闭公司,就永远无法删除主用户,因为他们是一个整体

    这句话本身就注定了选项1的失败

    如果这意味着使用选项2中更简单、更灵活的数据库设计,我会进行一些代码重构