Создание системы обмена сообщениями в БД (особенно MySQL) - PullRequest
1 голос
/ 21 января 2010

Извините, у меня есть беспокойство:

У меня успешно создана таблица в MySQL:

CREATE TABLE IF NOT EXISTS MESSAGE
(
    MESSAGE_ID          BIGINT NOT NULL AUTO_INCREMENT      
    ,AUTHOR_ID          VARCHAR(30) NOT NULL
    ,TITLE              VARCHAR(100) NOT NULL
    ,MESSAGE            VARCHAR(4095) NOT NULL
    ,UNREAD_FLAG            BOOLEAN NOT NULL DEFAULT TRUE                   
    ,CREATION_DATE          TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    ,DATE_LAST_MODIFIED     TIMESTAMP NULL

    ,PRIMARY KEY (MESSAGE_ID)
    ,FOREIGN KEY (AUTHOR_ID) REFERENCES USER (USR_ID)
);

Как видите, нет ссылок на то, кто получил сообщение (я), по той причине, что один или несколько получателей могут получить одно и то же сообщение.

1) Как бы я реализовал «модель» потока сообщений, чтобы при наличии сообщения, отправленного более чем одному пользователю, получатели могли ответить на сообщение и отслеживать, на какое сообщение ответил получатель? Например. Я отправил сообщение 5 друзьям о вечеринке, и все они ответили. Как я буду хранить записи в ответном сообщении со ссылкой на исходное сообщение? Кроме того, получатель может также ответить на ответное сообщение, создав ответ на ответное сообщение, поэтому в конечном итоге это будет древовидная структура ответного сообщения.

2) Как создать таблицу, в которой более одного получателя получают одно и то же сообщение? У меня была идея создать таблицу с парой receient_id (ссылка на таблицу пользователя) и message_id (идентификатор сообщения). Это эффективно? Причина, по которой я спрашиваю, состоит в том, что если 200 человек получат одно и то же сообщение, то будет 200 таблиц user_id, пара message_id ...

Еще раз спасибо, Мир!

P.S. Я реализовал номер 2), поэтому я думаю, что это не будет проблемой.

1 Ответ

0 голосов
/ 21 января 2010
  1. Я не понимаю вашего вопроса здесь.

  2. Ваша идея - нормальный способ сделать это. Вы бы создали таблицу с параметром receient_id и message_id и выполняли запросы к ней, чтобы определить (например), какие сообщения имеет конкретный пользователь. Вам также может потребоваться сохранить в этой таблице дополнительные данные, например, прочитал ли пользователь сообщение и т. Д., В зависимости от потребностей вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...