Как спроектировать эту простую базу данных? - PullRequest
1 голос
/ 21 апреля 2010

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

Ответы [ 3 ]

4 голосов
/ 21 апреля 2010

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

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

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 голосов
/ 21 апреля 2010

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

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

0 голосов
/ 21 апреля 2010

Что вам нужно, так это самые классические и базовые отношения многие ко многим .

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

User:
  id
  name

Event:
  id
  name

UserEventRef:
  user_id
  event_id

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

...