我怎么能处理多个外键?

时间:2013-05-10 12:41:40

标签: mysql sql

我有两个表User和Favorite。

我想让User行拥有来自Favorite

的多个外键

用户

ID|Name |favorite
1 | tom |1&2 ??? (tom likes cookie and donuts)
2 | max |2&3 ??? (max likes donuts and peanuts)
3 | john|1&2&3 ??? (john likes cookie, donuts and peanuts)

收藏

ID | name
1  |cookie
2  |donuts
3  |peanuts

什么样的结构最适合此目的? 我认为这个问题是基本的。 虽然,,,,,

我已多次制作外键结构

我正在使用mysql 并且如果可能的话,想知道如何在doctrine2上做到这一点。

5 个答案:

答案 0 :(得分:1)

您需要创建第三个多对多关系表,其中包含:

  

User_ID,Favourite_ID

基本上,您需要多对多关系:用户拥有零到多个收藏夹。最喜欢的用户数为零。执行此操作的正确方法是使第三个表由引用两个表原色的外键组成(user_id,favouriablete_id)。您可以从用户表中删除收藏列。不建议使用分隔列表来替换多对多。

答案 1 :(得分:1)

你必须创建3表第1表用户第2表示收藏,第3表表示用户和喜欢的关系。 因此,第一张表将是

ID|Name 
1 | tom 
2 | max 
3 | john

第二张表将按原样

第三张表将是

id|nameid|favouriteid
 1|1     |1
 2|1     |2

答案 2 :(得分:1)

创建另一个名为UserFavorite的表,然后在此处存储用户和收藏夹的IdUserFavorite

UserId | FavoriteId
1 | 1
1 | 2
2 | 1
2 | 2
...

答案 3 :(得分:1)

您需要拥有多对多关系表

User_Favorite 用户身份 FavoriteId

这两个ID将构成一个复合主键。每个都是他们所涉及的表的外键。

答案 4 :(得分:1)

你需要一个多对多的关系。要做到这一点,你需要一个额外的表:user2favs或存储的东西:

ID|userid|favid
1 |1     |1
2 |1     |2
3 |2     |2
4 |2     |3

等等。