数据库设计 - 连接两个用户

4
我需要一些关于数据库设计的帮助。我是一名前端开发人员,只处理过非常基本的数据库。现在我开始尝试更加“高级”的Web应用程序,因此需要一些指引来设计模式。
我正在寻找一个账户系统,可以将两个账户链接起来。以下是我设想的场景:
一个用户通过提供姓名、电子邮件和密码等信息进行注册。注册后,该用户可以通过输入另一个用户的电子邮件地址,并经过对方用户的确认,将两个账户链接起来。
一旦建立了这个链接,这两个用户就可以共同进行任务的增删改查。
我遇到的问题是如何在两个用户之间创建链接。显然,我有我的用户表格。
USERS:
 id
 name
 email
 password

我认为需要创建另一个表来保存两个相关联的帐户,并拥有其自己的唯一ID,以便我们可以对它执行CRUD任务。类似于以下内容:
LINKED_USERS:
 id
 user1id
 user2id
 verified

TASKS
 id
 lu_id (FK, Linked_Users id)
 // Any other fields for the two combined here.

这是否正确?如果是,我应该如何设置用户表和链接用户表之间的关系?这是令我困惑的部分,因为我需要让关系参考两个用户 ID。假设我想显示 user1id 和 user2id 的名称,关系如何工作?我真的需要一点帮助来理清思路。

希望这有意义,如果您需要更多信息,我会编辑问题。

提前感谢任何帮助!


外键“lu_id”将一个任务关联到恰好2个人。3个用户可以一起完成一个任务吗? - mike
不是这种情况。它总是只有两个人 :) - David Reid
一个人只能和另一个人有联系吗?还是一个人可以有其他联系?另一个问题是,一对可以拥有一个或多个任务吗? - Basil Bourque
一个人只会和另外一个人联系 :) 关于您提出的另一个问题,一对人可以拥有自己的任务,但可以有很多这样的任务。例如,如果我和你联系,我们可以创建、读取、更新等等...尽可能多我们自己创建的任务,但我们不能访问或甚至看到其他人创建的任务。希望这样说得清楚了! - David Reid
1个回答

3

您的问题并没有完全清楚地说明要求。我的设计假设以下要求:

  • 人们成对链接在一起
  • 每对拥有零个、一个或多个任务记录。
  • 每个人可以被分配到零个、一个或多个团队。如果目前不是这样,那么也许会随着时间的推移(过去的团队、当前的团队、未来的团队)。

我认为您的困惑围绕着配对展开。相反,将其视为团队。一个团队最多可以有两个人这一事实并不重要;2、10、100都无关紧要,因为任何数字都以同样的方式处理。这种方式是一个具有成员分配的团队表格。每个人可以属于一个或多个团队,每个团队可以有一个或多个成员。这意味着我们在人和团队之间有一个多对多的关系。多对多是关系型设计中的一个问题,总是通过添加第三个中间或“桥接”表来解决。在这种情况下,该桥接表是membership_

每个团队拥有零个、一个或多个任务。每个任务仅由一个团队拥有。这是团队和任务之间的简单一对多关系。
如果这些假设和限制是正确的,那么您将在诸如Postgres关系型数据库中拥有以下表设计。
我在membership_上添加了start_stop_一对字段,以展示人们可能有过去、现在或未来分配给团队的想法。

ERD Entity-Relationship Diagram for table design


这很有道理,谢谢。只有一件事让我感到困惑,那就是团队和成员表何时被填充的逻辑。我将在下面解释我的意思: - David Reid
用户注册后,将填充“person_”表。然后,该用户通过输入其电子邮件请求链接到另一个用户。在另一个用户接受加入团队之前,会发生什么?这会在“team_”表中填充一个条目,并将发送请求的用户放入具有新创建的团队ID的“membership”表中吗?一旦另一个用户接受,它就会在“membership_”表中填充另一行吗?如果您能提供任何帮助,那将太好了!再次感谢您的帮助。 - David Reid
@DavidReid 在邀请启动时,team_ 表中创建一条记录,membership_ 表中创建两条记录。您需要在 membership_ 表上定义一个 status_ 字段,将链接到我们主题的记录标记为“邀请者”,将链接到被邀请人的记录标记为“受邀者”。当被邀请人稍后接受邀请时,您需要将该 membership_ 行的 status_ 从“受邀者”更改为“已接受”。如果有人退出团队,则将其 status_ 更改为“退出”。 - Basil Bourque
完美!非常感谢 :) - David Reid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接