放置' created_by'在数据库中引用?

时间:2018-01-26 10:37:27

标签: database-design associations

我的数据库由用户项目组成。 用户可以创建项目项目可以有多个成员用户 )。 项目创建者也是成员。我想出了两个解决这个问题的方法。

我应该选择以下两个选项中的哪一个,还有其他更好的(我不喜欢两者)解决方案吗?

选项1:

User:
    id: int (PK)

Project_Member:
    user_id: int (FK -> User.id)
    project_id: int (FK -> Project.id)

Project:
    id: int (PK)
    created_by: int (FK -> User.id) 

选项2:

User:
    id: int (PK)

Project_Member:
    user_id: int (FK -> User.id)
    project_id: int (FK -> Project.id)
    is_creator: bool

Project:
    id: int (PK)

1 个答案:

答案 0 :(得分:1)

您的选项1 更好比选项2更强> 当前问题的最佳解决方案。

首先:在选项2中,您有很多 Nullification Redundancy 。例如,如果您有1000个项目且每个项目有100个成员,则Project_Member中有100000条记录,只有100条记录的值为is_creator,另一条记录为NULL。但是,如果您将TrueFalse设置为is_creator,则数据库设计中会出现 Redundancy

第二:在更多情况下(我们的应用程序),我们只需要显示项目经理(不是成员)。在这种情况下,与选项2相比,选项1具有更好的性能。

第三次:在选项2中,您需要设置另一个约束,检查每个项目应该只有一个创建者,并避免插入许多创建者到特定项目。