我的ERD中有几个表,我希望以关系方式组合。
我有几个用例,但我完全忘记了表之间使用什么样的关系。
我在表'角色'中使用了2个PK的桥模型将用户和项目链接在一起并同时为该用户和项目定义角色(这是正确的方法吗?)。
有人可以帮我协助桌子之间的正确关系吗?并且可能建议表(或表格整体当然)的列(缺少)。
有点忘记了这一点。
亲切的问候,
乙
已修订的ERD: (原始图片:http://i55.tinypic.com/2mq2ejs.jpg)
答案 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 |
+----------+