Postgresql 存储用户、角色和;我的关系数据库中的团队效率最高

Postgresql 存储用户、角色和;我的关系数据库中的团队效率最高,postgresql,database-design,Postgresql,Database Design,我正在开发一个应用程序,作为我大学作业的一部分。这是一个项目管理应用程序,我很难决定在我的Postgres DB中存储用户和团队的最佳方式。基本上,用户可以注册并创建/加入团队。一个用户可以是多个团队的一部分(每个团队负责多个项目)。用户在团队中也有角色(根据角色具有不同的权限),虽然他们在给定团队中只有一个角色,但在另一个团队中可能有不同的角色。此外,用户可以将他们的一些团队标记为收藏夹,以便通过前端轻松访问 我想出了3个ERD来解决这个问题 首先,将所有用户存储在一个表中,将所有团队存储在另

我正在开发一个应用程序,作为我大学作业的一部分。这是一个项目管理应用程序,我很难决定在我的Postgres DB中存储用户和团队的最佳方式。基本上,用户可以注册并创建/加入团队。一个用户可以是多个团队的一部分(每个团队负责多个项目)。用户在团队中也有角色(根据角色具有不同的权限),虽然他们在给定团队中只有一个角色,但在另一个团队中可能有不同的角色。此外,用户可以将他们的一些团队标记为收藏夹,以便通过前端轻松访问

我想出了3个ERD来解决这个问题

首先,将所有用户存储在一个表中,将所有团队存储在另一个表中。Users表包含与用户相关的所有数据,而team表包含团队数据以及成员、角色以及用户是否已将此团队标记为收藏夹,如下所示

这将有大量的数据重复-如果一个团队有100名成员,那么将有100个条目,其中teamid、名称和描述是相同的

因此,在v2中,我将它们分开并添加了一个members表。现在,每个团队保存一次,每个用户也保存一次。每次用户加入/创建团队时,都会对团队和用户进行引用,并与用户的角色以及用户是否喜欢团队一起存储在members表中

但是,我认为将角色保存为字符串可能不好。如果角色需要更改/更新,或者我需要添加新角色/重命名角色,那么使用ID而不是字符串(我认为)会更容易

于是,我想到了这个

现在,所有角色、用户和团队都存储一次(可能是我将角色表变成了类似查找表的内容,我听说这是一种不好的做法)。所有这些都可以在成员表中引用

我的DBMS概念有点弱,尽管我已经尽力按照步骤将其规范化并将其转换为BCNF形式。但我仍然不确定我是否做得对,或者如果出现问题,应该如何解决

基本上,我想知道:

  • 我的桌子结构正确还是不正确
  • 是否应该将所有内容拆分为多个表,或者进行一些数据复制可以吗(因为我可以使用多个查询或创造性查询来获取所需的内容)

  • 我最喜欢你的ERD3。我不认为这太过分了,我认为它看起来不错。让一个“members”表主要是外键进入其他表是很常见的事情


    没有必要消除每个表中的所有公共性痕迹-有时容忍少量重复会更有效-但在您的示例中,我认为您的ERD3看起来不错。

    我想我应该提供更多的背景信息。角色可以是“产品负责人”,可以添加团队成员、分配任务等利益相关者“可以查看进度和交流/留下评论,但不是项目的积极参与者;”成员是团队的正式成员(可以聊天、处理任务,但不能编辑团队或项目的详细信息),诸如此类。另外,让我澄清一下如何使用数据。在前端,用户可以在“项目”页面上查看其所有项目(该页面将搜索该成员所属的所有团队,然后列出这些团队正在处理的所有项目)。在团队页面上,用户可以查看他们所属的所有团队(应用程序将查询数据库中用户ID所属的所有团队,并显示它们)。根据用户在团队中的角色,弹出的团队将有不同的操作(例如编辑/查看/添加成员)。希望这有助于澄清我计划如何使用这个DBUse文本,而不是图像/链接,以获得可以作为文本的内容——即所有ERD。使你的文章独立。通过编辑而不是评论来澄清。每个帖子问1个具体问题,再问1个你被困的具体地方。只在你的帖子里写下你需要问的问题。根据你的课本/参考资料证明你的选择是否正确,并解释为什么你会被卡住。不要要求我们重写它来解释。PS“最有效”没有任何意义,除非你定义它。“我把角色表做成了类似查找表的东西,我听说这是一个糟糕的做法”-不,不是。您可能会将其与所有内容都有一个查找表相混淆。有一个角色查找表,另一个用于称呼,另一个用于订单状态,非常好谢谢您的快速回复!在这种情况下,将继续使用ERD3:)