如何在我的数据库中为具有项目的员工创建关系

时间:2014-06-04 19:23:18

标签: sql database ssms

我试图围绕将Employees连接到Projects的正确方法,但由于某种原因,我很难解决这个问题。到目前为止,我有以下内容:

-------------------
| Employee        |
-------------------
| EmployeeID | PK |
-------------------
| Name       |    |
-------------------
| Position   |    |
-------------------

--------------------
| Project          |
--------------------
| ProjectID   | PK |
--------------------
| Name        |    |
--------------------
| Description |    |
--------------------

我将拥有许多Employees和许多Projects,每个员工都可以成为许多项目的一部分,而每个项目都会有许多员工加入其中。我遇到了如何在两者之间建立连接的问题。有人可以通过这个来帮助我吗?谢谢!

5 个答案:

答案 0 :(得分:2)

您需要一个连接表来创建两个一对多关系:

employee
employee_id   PK

相关:

employee_project
employee_id PK
project_id PK

项目也与上述有关:

project
project_id   PK  

因此,您的员工可以与employee_project表相关,但您的项目也可以与employee_project表相关。

在表上有两个主键称为Composite Primary Key(在这种情况下是两个外键)。

答案 1 :(得分:1)

创建一个多对多关系表。就像这样。

--------------------------
| EmployeeProject        |
--------------------------
| EmployeeID        | PK |
-------------------
| ProjectID         | PK |
--------------------------

此表上的PK是EmployeeID + ProjectID的组合(称为复合主键)。

要获得拥有项目的员工,您的SQL将如此。

SELECT emp.* 
FROM Employee emp 
    INNER JOIN Project prj ON emp.EmployeeID = prj.EmployeeID

如果您想获得*没有分配任何项目*的员工,您的SQL将如此。

SELECT emp.* 
FROM Employee emp 
    LEFT JOIN Project prj ON emp.EmployeeID = prj.EmployeeID
WHERE prj,EmployeeID IS NULL

答案 2 :(得分:0)

您需要一个中间表,您将EmployeeID和ProjectID存储为外键,从而建立两者之间的连接。 (M:N关系)

答案 3 :(得分:0)

创建第三个表并在该表中存储EmployeeID和ProjectID,现在您可以查询所需的任何内容。

答案 4 :(得分:0)

要做到这一点,你需要一个包含EmployeeID和ProjectID的第三个表。将两个ID标记为主键。如果您想要选择它们,则必须进行双重连接,但这是处理它的最佳方式。