2015-02-11 5 views
0

У меня есть база данных пользователей и база данных комментариев на веб-сайте, и я хочу дать каждому пользователю возможность иметь список любимых комментариев, и я точно не знаю как это реализовать.Дизайн dababase, где у каждого пользователя есть список избранных

Должен ли я создать новую таблицу для каждого пользователя, содержащего идентификаторы его/ее любимых комментариев, или есть лучший подход?

+3

* «Я должен создать новую таблицу для каждого пользователя ...» * - если у вас 5-10 пользователей; неплохо. Когда он начинает быть чем-то большим, вы смотрите на необходимость кодирования для всех этих разных пользователей с отдельными вызовами в таблице. Вы можете создать одну таблицу для своих пользователей и одну для избранных, а затем использовать JOIN в качестве таблицы отношений. Возможно, есть и другие способы сделать это, но это то, что приходит в голову в этот момент. –

+0

Ваша идея также первая вещь приходит мне на ум, так что это один из способов сделать это. У вас должно быть от 1 до многих отношений от 'user' до' fav_comments' и 1 для многих также с 'fav_comments' до' comments', хотя – mr5

ответ

3

Обычный, normalized подход будет many to many relationship.

Схема для такой таблицы, как минимум, будет:

user_id 
comment_id 

user_id Где и comment_id внешние ключи к таблице users и comments соответственно.

+0

Не ваше решение означает, что для извлечения всех любимых комментариев для пользователя, вы должны пройти через всю таблицу ассоциаций между пользователем и комментарием? Если на сайте много пользователей, и у каждого пользователя есть как минимум 10 любимых комментариев, не займет много времени? – Valdrinit

+1

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

+2

@ Valdrinit Если все таблицы правильно проиндексированы, это не должно быть проблемой. –

1

Я хотел бы использовать три таблицы:

  1. users таблица, содержащая каждый пользователей, в том числе их персональных информаций и т.д;
  2. Таблица comments, содержащая все комментарии;
  3. Таблица favorites, содержащая id строки, id пользователя и id комментария.

Я не назвал каждую таблицу хорошо, вы должны больше думать о именах таблиц (например: favorites - это плохое имя).

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