需要帮助设计数据库 - 用户和项目

时间:2013-04-08 19:48:05

标签: asp.net vb.net database-design sql-server-2012

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

我想解决一个问题:

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

我在考虑创建一个 user_project 表来存储 user_id project_id

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

3 个答案:

答案 0 :(得分:2)

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

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

如果不是,则必须将role_id添加到user_project。

所以我的user_project是user_id,project_id和role_id。该表的PK是(user_id,project_id)。

答案 1 :(得分:1)

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

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

希望有帮助...

答案 2 :(得分: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下的表格默认为clustered,除非您在PRIMARY KEY中明确使用NONCLUSTERED关键字,在这种情况下可能没问题。)

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