2017-03-12 87 views
0

我有一个“2人团队”模型和一个“项目”模型。我想创建一个连接表,这样我可以在一个项目上将2个人组合在一起。但是这种想法似乎不可思议:将2个FK连接到一张表

User 
:id 

Project 
:id 

Team 
:user_id_1 
:user_id_2 
:project_id 

这是一个坏主意?我想也许只是创建一个Assignment表,所以每User有一个项目的任务,但没有一对用户的概念。

回答

1

您可以使用以下模式

User 
:id 

Project 
:id 

Assignment 
:user_id 
:project_id 
(create 1 row for each user in the project) 

例,鉴于用户对一个项目:

SELECT u.* 
FROM User u 
JOIN Assignment a ON a.user_id = u.id 
JOIN Project p ON p.id = a.project_id 
WHERE p.id = xxx; 

查找用户的上一个项目的队友:

SELECT u.* 
FROM User u 
JOIN Assignment a ON a.user_id = u.id 
JOIN Project p ON p.id = a.project_id 
WHERE p.id = xxx AND u.id != yyy; 
+0

谢谢你,所以我只需要查找一个用户分配的项目并从中找到他们的队友呢? – dmoss18

+1

我添加了几个查询来向您展示如何使用它。如果它符合您的需求,请接受我的答案为正确答案 – Gab