2013-05-10 6 views
0

У меня есть таблицы двух таблиц пользователя и избранного.Как я могу обработать несколько внешних ключей?

Я хочу сделать ряд пользователей, чтобы иметь несколько внешних ключей из избранного

пользователя

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 и хочу знать, как это сделать на доктрине2, если это возможно.

ответ

1

Вы должны иметь много-ко-многим таблице отношений

User_Favorite USERID FavoriteId

Те два идентификаторами сделают составной первичный ключ. И каждый будет внешним ключом к таблице, к которой они относятся.

+0

Спасибо, много работает! – whitebear

1

Вам нужно создать третий многие ко многим таблицы отношений, которая будет содержать:

user_id, Favourite_ID

По сути, вы хотите отношения многие ко многим: пользователь имеет ноль много избранные. У любимого есть ноль для многих пользователей. Правильный способ сделать это - иметь третью таблицу, состоящую из внешнего ключа, ссылающегося на два первичных таблицы (user_id, favouriablete_id). Вы можете удалить любимый столбец из таблицы пользователя. Не рекомендуется использовать списки с разделителями для замены многих на многие.

+0

По существу, вы хотите, чтобы отношение много-много: пользователь имеет нулевое значение для многих избранных. У любимого есть ноль для многих пользователей. Правильный способ сделать это - иметь третью таблицу, состоящую из внешнего ключа, ссылающегося на два первичных таблицы (user_id, favouriablete_id). Вы можете удалить любимый столбец из таблицы пользователя.Не рекомендуется использовать списки с разделителями для замены многих на многие. –

1

вам необходимо создать 3-й стол 1-го для пользователя 2-го для любимого и 3-го для пользователя и любимого отношения. Поэтому первая таблица будет

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

Вторая таблица будет, как это

третья таблица будет

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

Создать другую таблицу под названием UserFavorite, а затем здесь хранить Id как пользователя, так и Избранное: UserFavorite

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

Для этого вам нужны отношения «многие ко многим». Для этого вам нужен дополнительный стол: user2favs или Somthing, что магазины:

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

Etcetera.

Смежные вопросы