1

У меня есть 2 таблицы - одна хранимая информация пользователя (id, имя пользователя, пароль), а вторая хранит информацию о событиях (id, name, description, date, username (представляет пользователя, создавшего событие)). Я хотел бы реализовать функциональность «любимых событий». Это позволит пользователю хранить свои любимые события, а затем отображать их в списке. Я не уверен, как реализовать это с точки зрения дизайна. Мне нужно простое решение. Что-то вроде хранения идентификаторов избранных событий в поле в пользовательской таблице. Я использую mysql и PHP. Может ли кто-нибудь указать мне правильное направление?Как создать эту простую базу данных?

+0

Создайте третью таблицу для хранения комбинаций userid/eventid для каждого любимого события пользователя. – Veger

ответ

4

Вы хотите иметь таблицу, связывающую внешние ключи с таблицами пользователей и событий.

Пользователи Таблица:

id, username, password 

события Таблица:

id, name, description, date, username 

Избранное Таблица:

id, user_id, event_id 

Таким образом, вы можете легко получить доступ к списку любимых событий.

SELECT events.name, events.description, events.date 
FROM events, users, favorites 
WHERE favorites.user_id = users.id 
AND favorites.event_id = events.id 
+0

Почему вы добавили столбец 'id' в таблицу« Избранное »? Это бесполезно. – Crozin

+0

Можете ли вы рассказать мне, как должны выглядеть отношения внешних ключей? – Vonder

+0

В user_id и event_id находятся внешние ключи в этом примере. Как вы можете видеть в SQL при условии, что они относятся к users.id и events.id (первичные ключи). – chills42

0

Что вам нужно, это самый классический и основной many-to-many отношения.

Вам понадобится дополнительная таблица (скажем: user_event_ref), которая будет хранить идентификаторы пользователей и событий.

User: 
    id 
    name 

Event: 
    id 
    name 

UserEventRef: 
    user_id 
    event_id 

В usereventref каждый столбец является Foreign Key, и обе колонны являются частью первичного ключа.

-1

Всегда есть возможность добавить поле tiny-int в таблицу Events, помещая событие как избранное. Это не нарушает нормализацию того, является ли четное изображение фаворитом, не влияя на другие события. Он имеет дополнительное преимущество автоматического удаления события из избранного, если событие было удалено.

Если для избранных необходима схема сортировки, вы все равно можете изменить таблицу событий таким же образом. Если вам нужны детали о «любимом», например, когда он был добавлен в список и т. Д., Вы должны использовать дополнительную таблицу, как было предложено.

+1

Да, но что, если у меня много пользователей? Работает ли ваша идея, если есть много пользователей, которые выберут одно и то же событие или пользователь выберет несколько событий? – Vonder

+0

Это не работает, если вы не хотите, чтобы избранные были общесистемными. Я считаю, что предполагаемая функциональность предназначена для списков избранного пользователей. – chills42

+0

Нынешний дизайн не позволяет назначить нескольким пользователям одно событие. Он поддерживает одного пользователя для многих событий. – souLTower