我的数据库由用户和项目组成。 用户可以创建项目,项目可以有多个成员(用户 )。 项目的创建者也是成员。我想出了两个解决这个问题的方法。
我应该选择以下两个选项中的哪一个,还有其他更好的(我不喜欢两者)解决方案吗?
选项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)
答案 0 :(得分:1)
您的选项1 更好比选项2更强>> 当前问题的最佳解决方案。
首先:在选项2中,您有很多 Nullification 或 Redundancy 。例如,如果您有1000个项目且每个项目有100个成员,则Project_Member
中有100000条记录,只有100条记录的值为is_creator
,另一条记录为NULL
。但是,如果您将True
或False
设置为is_creator
,则数据库设计中会出现 Redundancy 。
第二:在更多情况下(我们的应用程序),我们只需要显示项目经理(不是成员)。在这种情况下,与选项2相比,选项1具有更好的性能。
第三次:在选项2中,您需要设置另一个约束,检查每个项目应该只有一个创建者,并避免插入许多创建者到特定项目。