【问题标题】:Database Design - Linking two users数据库设计 - 链接两个用户
【发布时间】:2013-12-08 22:48:05
【问题描述】:

我需要一些数据库设计方面的帮助。我是一名专业的 FE 开发人员,只处理过非常基本的数据库。我刚刚开始涉足更“高级”的网络应用程序,并希望为架构提供一些正确方向的指针。

我正在寻找的是一个基本上可以链接两个帐户的帐户系统。我会给你我想象中的场景。

用户以常规方式注册,为简单起见,只需提供姓名、电子邮件、密码即可。注册后,用户可以通过输入其他用户的电子邮件并让其他用户接受,将他们的帐户链接到其他用户。

创建此链接后,两个用户可以一起 CRUD 任务。

我正在努力解决的问题是如何在两个用户之间创建链接。我显然有我的用户表。

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.

这是正确的吗?如果是这样,我将如何设置 users 表和 linked_users 表之间的关系?这是让我感到困惑的一点,因为我需要关系来引用两个用户 ID。假设我想显示 user1id 和 user2id 名称,这种关系将如何工作?只是真的需要一些帮助来解决这个问题。

我希望这是有道理的,如果您需要更多信息,我会编辑问题。

提前感谢您的帮助!

【问题讨论】:

  • 外键“lu_id”将一个任务关联到正好 2 个人。 3 个用户可以一起完成一项任务吗?
  • 在这种情况下不是。永远只有 2 个人 :)
  • 一个人是否只与另一个人有联系?或者一个人也可以有其他链接?另一个问题……一对可以拥有一个或多个任务?
  • 一个人只能与另一个人联系 :) 在回答您的另一个问题时,一对只能拥有自己的任务,但其中很多。例如,如果我与您联系在一起,我们可以创建、读取更新等……就像我们自己创建的许多任务一样,但我们无法访问甚至查看另一对已完成的任务。希望这是有道理的!

标签: sql database database-design


【解决方案1】:

您对要求的问题并不完全清楚。我的设计假设以下要求:

  • 人们成对联系在一起
  • 每一对拥有零个、一个或多个任务记录。
  • 可以将每个人分配到零、一对或多对。如果不是当前,那么可能会随着时间的推移(过去对、当前对、未来对)。

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

每个团队拥有零个、一个或多个任务。每个任务由一个且只有一个团队拥有。这是 Team 和 Task 之间的简单 One-To-Many 关系。

如果这些假设和约束是正确的,那么您将在relational database 中拥有下表设计,例如Postgres

我在 membership_ 上添加了一对 start_stop_ 字段,以表明人们可能有过去、现在或未来的团队任务。

【讨论】:

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