【问题标题】:SQL DB Design: One project - Many rolesSQL DB 设计:一个项目 - 多个角色
【发布时间】:2017-05-27 00:17:21
【问题描述】:

当您有这样的项目时,我正在尝试了解数据库架构的外观:

> +----------------+  +----------+  
| Project          |  | roles    |  
+------------------+  +----------+  
| project_id       +  + role_id  +
| project_roles_id +  + role_name+
+------------------+  +----------+ 

所以我的问题是试图弄清楚如何将多个角色添加到项目中。如果一个项目有一个捕获经理、一个项目经理和一个提案经理......我如何最好地在架构中创建它?

【问题讨论】:

  • 其实问题是not enough information
  • 您需要一个名为 ProjectRoles 之类的表,在该项目中每个 project 一行,每个 role 一行。
  • 我相信你在问many-to-many的关系。如果是这种情况,解决方案通常是使用第三张表(在您的情况下为Project_Role)。
  • 我必须定义所有可能的角色吗?我设想能够让用户根据项目的类型向项目添加多个角色。有些项目可能只有两个角色,有些可能有 3 或 4 个。
  • 设计数据库是一回事。数据输入完全是另一回事。设计师输入多少数据取决于业务。

标签: sql database schema creation


【解决方案1】:

我会这样做:

::: projects :::
+------------+---------------------+
| project_id | project_name        |
+------------+---------------------+
| 1          | Scoping a project   |
+------------+---------------------+
| 2          | Building a bridge   |
+------------+---------------------+
| 3          | Building a SQL db   |
+------------+---------------------+

::: roles ::: 
+---------+-------------------+
| role_id | role_name         |
+---------+-------------------+
| 1       | Project Manager   |
+---------+-------------------+
| 2       | Civil Engineer    |
+---------+-------------------+
| 3       | Computer Engineer |
+---------+-------------------+

::: roles_to_projects :::
+------------+---------+
| project_id | role_id |
+------------+---------+
| 1          | 1       |
+------------+---------+
| 2          | 1       |
+------------+---------+
| 2          | 2       |
+------------+---------+
| 3          | 3       |
+------------+---------+

这会告诉您(以最少的重复)哪些项目需要哪些角色。

【讨论】:

  • Project_id 和 role_id 是 PK,而 roles_to_projects 都是 FK?还是项目 ID 仍然是 PK 那里?
  • 你是对的 - ID 是其普通表(项目、角色)中的 PK 和多对多映射表 (roles_to_projects) 中的 FK。
猜你喜欢
  • 2014-04-01
  • 2012-10-25
  • 2011-08-27
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
相关资源
最近更新 更多