假设我正在对用户和项目之间的多对多关系进行建模。也就是说,一个用户可以是多个项目的一部分,一个项目可以有多个用户。这看起来像这样:
Project
id: pk
name: string
User
id: pk
name: string
Membership
id: pk
project: fk
user: fk
在这里,成员资格反映了作为项目一部分的用户集。因此,任何需要访问与项目相关的信息(例如任务)的人都会通过成员身份添加到项目中。
现在我想向这个项目添加一个可以分配给用户的任务。何时应将此任务与用户和项目单独关联?什么时候建立关系,在这个例子中是成员资格?
这是我能想到的三个选项:
Task1
id: pk
name: string
project: fk -> Project.id
assigned_to: fk -> User.id
Task2
id: pk
name: string
project: fk -> Project.id
assigned_to: fk -> Membership.id
Task3
id: pk
name: string
assigned_to: fk -> Membership.id
任务 1: 与 Task2 类似,除非用户不再是项目的成员。在这种情况下,用户仍然可以分配任务。此外,应用程序级逻辑必须防止将任务分配给与该任务不在同一项目中的用户。
任务 2: 与 Task1 类似,除非用户不再是项目的成员。在这种情况下,对成员资格的引用将丢失并且任务未分配。应用程序级逻辑必须防止将任务分配给与该任务不在同一项目中的成员。
任务 3: 当用户不再是项目的成员时,任务不再是项目的一部分。用户可以将任务分配给任何成员,因为它会自动成为用户所属项目的一部分。
编辑:我添加了一些选项来解释我试图理解的权衡。如果有人可以验证/使我提出的观点无效或添加一些要考虑的观点,我将不胜感激。