0

我的 ERD 中有几个表,我想以关系方式组合它们。

我有几个用例,但我完全不知道在表之间使用什么样的关系。

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

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

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

有点看不透这个。

亲切的问候,

B.

修订后的 ERD:( 替代文字 原图:http: //i55.tinypic.com/2mq2ejs.jpg

4

3 回答 3

0

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

这是一个多对多的关系,因此它必须使用中间表,就像您对用户和项目的 ID 所做的那样。

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

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

于 2010-10-29T11:14:58.070 回答
0

您无需设计表格然后确定关系 - 它们应该同时发展。

特别是当您使用不需要外键声明的数据库时,我建议您使用严格的命名约定。尽管您似乎在为已显示关系的表执行此操作,但其余字段名称似乎有些随意。

但是如果没有看到所有的分析(并且知道它是正确的),任何人都不可能告诉你应该如何连接表,或者可能缺少什么

于 2010-10-29T11:37:10.760 回答
0

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

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

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

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

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

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

编辑 - 根据根瘤菌的编辑更新了拟议的结构:

                +----------+
                |   Role   |
                +----+-----+
                     |
                    /|\
+----------+    +----------+    +----------+
|   User   +---<|  Users/  |>---+  Project |
|          |    | Projects |    |          |
+----------+    +----+-----+    +----------+
                     |
                    /|\
                +----------+
                |  Dataset |
                +----------+
于 2010-10-29T11:39:01.133 回答