将 'created_by' 引用放在数据库中的什么位置?
Where to put 'created_by' reference in database?
我的数据库由用户和项目组成。一个用户可以创建一个项目,一个项目可以有多个成员(用户)。 项目 的创建者 也是成员。我想出了两个解决这个问题的方法。
我应该选择以下两个选项中的哪一个,还有其他更好的(我都不喜欢)解决方案吗?
选项 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 比选项 2 更好,它是你的当前的最佳解决方案] 我的想法有问题。
第一:在选项2中,你有很多无效或冗余。例如,如果您有 1000 个项目,每个项目有 100 个成员,那么您在 Project_Member
中有 100000 条记录,只有 100 条记录的值为 is_creator
,另一条为 NULL
。但是,如果您将 True
或 False
设置为 is_creator
,这在您的数据库设计中属于 冗余 类型。
其次:在更多情况下(我们的应用程序)我们只需要显示项目经理(而不是成员)。在这种情况下,与选项 2 相比,选项 1 具有更好的性能。
第三:在选项2中,您需要设置另一个约束,检查每个项目应该只有一个creator 并避免将许多创建者插入到特定项目中。
我的数据库由用户和项目组成。一个用户可以创建一个项目,一个项目可以有多个成员(用户)。 项目 的创建者 也是成员。我想出了两个解决这个问题的方法。
我应该选择以下两个选项中的哪一个,还有其他更好的(我都不喜欢)解决方案吗?
选项 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 比选项 2 更好,它是你的当前的最佳解决方案] 我的想法有问题。
第一:在选项2中,你有很多无效或冗余。例如,如果您有 1000 个项目,每个项目有 100 个成员,那么您在 Project_Member
中有 100000 条记录,只有 100 条记录的值为 is_creator
,另一条为 NULL
。但是,如果您将 True
或 False
设置为 is_creator
,这在您的数据库设计中属于 冗余 类型。
其次:在更多情况下(我们的应用程序)我们只需要显示项目经理(而不是成员)。在这种情况下,与选项 2 相比,选项 1 具有更好的性能。
第三:在选项2中,您需要设置另一个约束,检查每个项目应该只有一个creator 并避免将许多创建者插入到特定项目中。