ERD图和链接用户,项目和数据集表的SQL关系

时间:2010-10-29 11:08:19

标签: sql mysql relational-database erd

我的ERD中有几个表,我希望以关系方式组合。

我有几个用例,但我完全忘记了表之间使用什么样的关系。

  • 每个用户都可以处理多个项目。
  • 每个用户每个项目都有一个特定的角色(经理,贡献者,用户)
  • 每个项目都有多个数据集('projects'中的currDataXXX列),需要链接到表数据。
  • 应用程序将跟踪用户添加的数据集。因此,我假设我需要表'用户'和'数据'之间的关系?

我在表'角色'中使用了2个PK的桥模型将用户和项目链接在一起并同时为该用户和项目定义角色(这是正确的方法吗?)。

有人可以帮我协助桌子之间的正确关系吗?并且可能建议表(或表格整体当然)的列(缺少)。

有点忘记了这一点。

亲切的问候,

已修订的ERD: alt text (原始图片:http://i55.tinypic.com/2mq2ejs.jpg

3 个答案:

答案 0 :(得分:0)

每个用户都可以处理多个项目。

这是一个多对多的关系,所以它必须与中间表一起使用,因为你已经完成了用户和项目的ID。

每个用户每个项目都有一个特定角色(经理,贡献者,用户)

你应该在上面提到的这个表中添加第三个字段,并将其称为“RoleID”,并使另一个名为“Roles”的表包含两个字段“RoleID”和“Role”

答案 1 :(得分:0)

你没有设计你的表然后计算出关系 - 它们应该同时发展。

特别是当您使用不需要外键声明的数据库时,我建议使用严格的命名约定。虽然你似乎正在为表示关系的表做这些,但其余的字段名称似乎有些危险。

但是没有看到所有的分析(并且知道它是正确的),任何人都不可能告诉你如何加入表格,也不可能缺少什么

答案 2 :(得分:0)

  

每个项目都有多个数据集(“项目”中的currDataXXX列)

这意味着项目与数据集之间存在一对多的关系。因此,项目ID应该是数据集表上的外键,而currDataXX列应该从项目表中删除。 (目前的设计代表了非规范化。)

完成此操作后,您现在在项目和用户之间有两个多对多关系 - 一个具有角色的链接实体,另一个具有数据集的链接实体。这种关系通常是多余的 - 在这种情况下,我会假设a)只有在项目中有角色的用户才能添加数据集,b)单个用户可以为单个项目添加许多数据集。

如果这两个假设都是正确的,那么从角色到数据集实际上存在一对多的关系,因此角色ID应该是数据集表上的外键,而用户和项目ID在数据集表,可以删除。像这样:

+----------+    +----------+    +----------+
|   User   +---<|   Role   |>---+  Project |
+----------+    +----+-----+    +----------+
                     |
                    /|\
                +----------+
                |  Dataset |
                +----------+

[如果假设b)不正确,那么角色和数据集可以组合成一个表,而如果假设a)不正确,那么角色和数据集仍然是两个不同的链接实体,彼此无关。]

EDIT - 根据Rhizosis的编辑更新了提议的结构:

                +----------+
                |   Role   |
                +----+-----+
                     |
                    /|\
+----------+    +----------+    +----------+
|   User   +---<|  Users/  |>---+  Project |
|          |    | Projects |    |          |
+----------+    +----+-----+    +----------+
                     |
                    /|\
                +----------+
                |  Dataset |
                +----------+