0

I have tables two tables User and Favorite.

I want to make a User row to have multiple foreign keys from Favorite

User

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)

Favorite

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

What kind of structure is the best for this purpose? I think this question is basic. I have made foreign key structure many times though,,,,,

I am using mysql and want to know the way to do this on doctrine2 if possible.

4

5 回答 5

1

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

UserId | FavoriteId
1 | 1
1 | 2
2 | 1
2 | 2
...
于 2013-05-10T12:44:26.927 回答
1

您需要有一个多对多关系表

User_Favorite UserId FavoriteId

这两个 id 将构成一个复合主键。每个都将是与它们相关的表的外键。

于 2013-05-10T12:45:05.697 回答
1

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

用户 ID、收藏夹 ID

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

于 2013-05-10T12:43:28.780 回答
1

您必须为用户创建 3 个表,第 2 个用于收藏,第 3 个用于用户和收藏关系。因此第一张桌子将是

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

第二张桌子将保持原样

第三张桌子将是

id|nameid|favouriteid
 1|1     |1
 2|1     |2
于 2013-05-10T12:43:33.433 回答
1

为此,您需要一个多对多的关系。为此,您需要一个额外的表: user2favs 或存储:

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

等等。

于 2013-05-10T12:45:18.577 回答