-1

我在master_db中有两个表usersproject ,分别存储用户详细信息和项目详细信息。

我想解决一个问题:

我有一个 .aspx 页面,它允许我“管理”一个项目、添加用户并为他们分配角色。我想知道如何创建一个允许我将“用户”添加/删除到“项目”的表。

我正在考虑创建一个存储user_idproject_id的user_project

您对这个问题有任何想法或其他解决方案吗?

4

3 回答 3

2

好吧,你需要做的比我想的多一点。例如,您可以有用户#33,在项目#88 中具有角色#4,而在项目#74 中,他具有角色#2。这听起来像用户想要的吗?

如果用户将始终具有相同的角色,那么您的解决方案是正确的。

如果没有,您将必须将 role_id 添加到 user_project。

所以我会有一个 user_project,它是一个 user_id、project_id 和 role_id。此表的 PK 将是 (user_id, project_id)。

于 2013-04-08T19:53:12.470 回答
1

是的,您将有一个用户表,其中包含仅与用户相关的信息(姓名、电子邮件等),一个仅与项目相关的项目表,然后是第三个表“项目用户”,它将保存两个用户的外键和项目表(userID、projectID),以及任何其他必要的列,如“角色”、“访问级别”等......仅与用户和项目之间的关系有关。“项目用户”表中的主键是两个外键的组合。

您可以有一个安全级别表、一个角色表等...您可以将这些表中的 PK 粘贴到“项目用户”表的“角色”或“安全级别”列中...

希望有帮助...

于 2013-04-08T19:54:30.067 回答
1

你在正确的轨道上。这称为“联结”(或“链接”)表,并且具有一个键,该键是从涉及多对多关系的两个表迁移而来的键的组合。例如:

CREATE TABLE user_project (
    user_id int REFERENCES users (user_id),
    project_id int REFERENCES project (project_id),
    PRIMARY KEY (user_id, project_id)
)

(请注意,默认情况下,表在 MS SQL Server 下聚集,除非您在 PRIMARY KEY 中显式使用 NONCLUSTERED 关键字,在这种情况下可能没问题。)

这确实是表示这种关系的“标​​准”方式。告诉我更多关于“角色”的角色;)我可能也有一些如何处理它的建议......

于 2013-04-08T19:55:42.327 回答