У меня есть 2 таблицы - одна хранимая информация пользователя (id, имя пользователя, пароль), а вторая хранит информацию о событиях (id, name, description, date, username (представляет пользователя, создавшего событие)). Я хотел бы реализовать функциональность «любимых событий». Это позволит пользователю хранить свои любимые события, а затем отображать их в списке. Я не уверен, как реализовать это с точки зрения дизайна. Мне нужно простое решение. Что-то вроде хранения идентификаторов избранных событий в поле в пользовательской таблице. Я использую mysql и PHP. Может ли кто-нибудь указать мне правильное направление?Как создать эту простую базу данных?
ответ
Вы хотите иметь таблицу, связывающую внешние ключи с таблицами пользователей и событий.
Пользователи Таблица:
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
Почему вы добавили столбец 'id' в таблицу« Избранное »? Это бесполезно. – Crozin
Можете ли вы рассказать мне, как должны выглядеть отношения внешних ключей? – Vonder
В user_id и event_id находятся внешние ключи в этом примере. Как вы можете видеть в SQL при условии, что они относятся к users.id и events.id (первичные ключи). – chills42
Что вам нужно, это самый классический и основной many-to-many отношения.
Вам понадобится дополнительная таблица (скажем: user_event_ref
), которая будет хранить идентификаторы пользователей и событий.
User:
id
name
Event:
id
name
UserEventRef:
user_id
event_id
В usereventref
каждый столбец является Foreign Key, и обе колонны являются частью первичного ключа.
Всегда есть возможность добавить поле tiny-int в таблицу Events, помещая событие как избранное. Это не нарушает нормализацию того, является ли четное изображение фаворитом, не влияя на другие события. Он имеет дополнительное преимущество автоматического удаления события из избранного, если событие было удалено.
Если для избранных необходима схема сортировки, вы все равно можете изменить таблицу событий таким же образом. Если вам нужны детали о «любимом», например, когда он был добавлен в список и т. Д., Вы должны использовать дополнительную таблицу, как было предложено.
Да, но что, если у меня много пользователей? Работает ли ваша идея, если есть много пользователей, которые выберут одно и то же событие или пользователь выберет несколько событий? – Vonder
Это не работает, если вы не хотите, чтобы избранные были общесистемными. Я считаю, что предполагаемая функциональность предназначена для списков избранного пользователей. – chills42
Нынешний дизайн не позволяет назначить нескольким пользователям одно событие. Он поддерживает одного пользователя для многих событий. – souLTower
Создайте третью таблицу для хранения комбинаций userid/eventid для каждого любимого события пользователя. – Veger