Нормализация базы данных и вложенные списки - не могу придумать решение - PullRequest
2 голосов
/ 27 августа 2011

Я пытаюсь внедрить на своем веб-сайте систему, аналогичную функции Facebook «Мне нравится». Где пользователи могут нажать кнопку, которая counter++. Однако я столкнулся с проблемой эффективного хранения данных в моей БД.

Каждая история имеет свою собственную строку в таблице stories в моей БД со столбцами like и users_like.

Я хочу, чтобы каждый человек мог понравиться истории только один раз. Поэтому мне нужно как-то хранить данные, которые показывают, что у пользователя есть like++' d сообщение.

Все, что я мог сделать, это иметь столбец с именем users_like, а затем добавить каждого пользователя, за которым следует запятая, в столбец с помощью CONCAT, а затем с помощью функции php explode данных.

Однако этот метод, насколько мне известно, направлен в сторону нормализации базы данных.

Каков наилучший способ сделать это, и я понимаю, что «лучший» субъективен.

Я не могу добавить флаг liked к таблице user, потому что будет огромное количество историй, которые человек мог бы «полюбить».

Спасибо

1 Ответ

5 голосов
/ 27 августа 2011

Вам нужна таблица «многие ко многим» в вашей базе данных, в которой будет храниться внешний ключ для таблицы stories и внешний ключ для таблицы user. Вы накладываете ограничение на эту таблицу, говоря, что сюжетная комбинация fk - user fk должна быть уникальной.

Теперь вам даже не нужно иметь столбец like, вы просто подсчитываете количество строк в таблице «многие ко многим», соответствующей вашей истории.

...