Задать вопрос

Проектирование схемы базы данных для системы сообщений?

Всем привет!
Стоит задача разработать систему сообщений как в контакте. Диалоги, пользователи , сообщения.

Погуглив и проанализировав суть задачи, пришел к такой структуре базы данных:
$this->createTable('{{dlg_usr}}', [
            'dlg_id' => 'int(11) NOT NULL',
            'user_id' => 'int(11) NOT NULL',
            'created_at' => 'timestamp NOT NULL',
        ]);

        $this->createTable('{{dlg_msg}}', [
            'id' => 'pk',
            'author_id' => 'int(11) NOT NULL',
            'type' => 'int(11) NOT NULL',
            'message' => 'longtext NOT NULL',
            'created_at' => 'timestamp NOT NULL',
            'update_at' => 'timestamp NOT NULL',
        ]);

        $this->createTable('{{dlg_msg_usr}}', [
            'dlg_id' => 'int(11) NOT NULL',
            'user_id' => 'int(11) NOT NULL',
            'msg_id' => 'int(11) NOT NULL',
            'is_new' => 'int(11) NOT NULL',
            'hide_status' => 'int(11) NOT NULL',
            'moderated_status' => 'int(11) NOT NULL',
            'hide_at' => 'timestamp NOT NULL',
            'moderated_at' => 'timestamp NOT NULL',
            'created_at' => 'timestamp NOT NULL',
            'update_at' => 'timestamp NOT NULL',
        ]);

Таблица 1. Таблица пользователей и идентификаторов диалогов.
Решил не заводить отдельную таблицу для ид диалогов. Так как кроме ид и даты создания хранить больше нечего. При создании нового диалога, в данную таблицу будут вноситься две и более записей с ид пользователей и ид диалога равным максимальному ид+1 из данной таблицы, ну и дата создания. При добавлении нового пользователя к диалогу будет вноситься соответственно одна запись с ид пользователя и ид диалога.
Таблица 2. Таблица сообщений.
В данную таблицу будут вноситься сами сообщения. Помимо текста сообщения, планирую хранить ид автора, тип сообщения (системные, пользовательские и т.д), ну и метки времени создания и редактирования.
Таблица 3. Связующая таблица сообщений и пользователей.
Цель данной таблицы связать сообщения и диалоги. При создании сообщения в диалоге, будет создано такое количество записей, которому соответствует количество пользователей в диалоге. Также данная таблица позволяет реализовать функционал удаления (скрытия) сообщения. В том случае если какой либо пользователь удалит сообщение из своего диалога, у остальных пользователей данное сообщение будет по прежнему отображаться в диалоге.

Хотелось бы выслушать конструктивную критику данной схемы и логики в целом. А также буду рад если укажете на возможные проблемы в дальнейшем при использовании такой схемы хранения сообщений.
Всем спасибо!
  • Вопрос задан
  • 641 просмотр
Подписаться 4 Оценить 7 комментариев
Решения вопроса 1
zoonman
@zoonman
⋆⋆⋆⋆⋆
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы