Как создать таблицу сообщений / комментариев в MySQL? - PullRequest
3 голосов
/ 30 мая 2011

Я создаю таблицу сообщений / комментариев в MySQL для сайта социальной сети. У меня есть система обмена сообщениями, в которой участвующие два пользователя (только два и не более того) будут иметь один / уникальный поток. Таким образом, всякий раз, когда пользователь отправляет сообщение другому пользователю, он проверяет, имел ли оба пользователя уникальный поток, если НЕ, то он создает уникальный поток для обоих пользователей.

create table comment_threads (
thread_id int (PK),
user_id_1 int,
user_id_2 int,
created datetime
);

create table comments (
comment_id int (PK),
thread_id int (FK),
comment text,
created datetime
);

Всякий раз, когда пользователь отправляет сообщение другому пользователю каждый раз, я должен проверить, имел ли предыдущий поток оба участника-участника, поэтому я должен запросить базу данных об этом (QUERY 1). И еще раз, если не было никакого потока, чтобы создать поток в comment_thread (QUERY 2). Затем снова оставить комментарий в таблице комментариев (QUERY 3). Поэтому я должен запросить два или три раза для обмена сообщениями.

Вопросы:

  1. Являются ли приведенные выше таблицы правильным способом решения моей проблемы или требуется некоторая коррекция?
  2. Есть ли другой лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 30 мая 2011

Вам не нужно иметь 2 таблицы. 1 таблица должна быть в порядке:

create table comments (
comment_id int (PK),
parent_id int,
user_id_1 int,
user_id_2 int,
comment text,
created datetime
);

Для новой темы установите parent_id на 0. Для будущих комментариев вы можете установить parent_id в качестве идентификатора первого комментария.

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

Согласно ответу Итая, вы должны использовать некоторые механизмы кэширования для повышения производительности.

1 голос
/ 30 мая 2011
  1. Вы не можете знать, какой пользователь оставил какое сообщение
  2. Когда вы создаете экземпляр системы сообщений с потоком, кэшируете два идентификатора пользователя и идентификатор потока, нет необходимости запускаться в БД для каждой отправки (это не так просто, а скорее для вас, вам потребуются некоторые отказоустойчивые файлы) mechanisems)
  3. Я бы буферизировал в памяти поток и отправлял в БД только позже (или просто использовал таблицу памяти)
  4. , поскольку это только два пользователя, система с одним потоком, вы можете отменить нормализацию и сделать весь поток в одной записи в огромном текстовом поле, где вы объединяете последнюю запись до конца. Опять же, это всего лишь направление, а не полное решение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...