Как создать структуру таблиц в Бд для чата?

Всем привет, нужна помощь в создании структуры таблиц для чата, чат нужен как в вк.
1) Участников может быть больше двух
2) Можно редактировать только свои сообщения (при этом исходник старого сохранялся)
3) Можно удалять свое сообщение у всех собеседников, чужое только у себя (при этом исходники сообщения сохраняются)
4) Можно отправлять файлы
5) Можно отвечать на сообщения (как в вк, выделяешь сообщение, нажимаешь ответить, после чего пишешь сообщение и при доставки этого сообщения, пересылаемое сообщение является ссылкой и подсвечивает оригинальное сообщение в диалоге )(пересылать можно сколького угодно сообщений за раз)

Вот мои старания
5cbb018ce6e29064112505.png
  • Синим выделенные ключи, к каким ссылаются
  • Красным выделенные ключи, от каких ссылаются

Таблицы:
Table_chat_type - Тип чата
Table_chat - Таблица самого чата
Table_chat_user - Список пользователей во всех созданных чатах
Table_chat_message - Сообщение
Table_chat_message_content - Содержимое сообщения
Table_chat_message_file - Файлы которые были отправленные в сообщении
Table_chat_message_text - Текст которые был отправлен в сообщении
Table_message_status - Статус сообщения, отвечает какой пользователь прочел сообщение, какой нет

Проблема вот в чем:
1) Я не знаю правильная ли эта структура вообще, так как я хочу добиться максимально приближенной версии, как в вконтакте и что бы была как можно минимальная нагрузка и большая скорость обратки всего это при большом количестве чатов.
2) Я не знаю как сделать возможность отвечать на сообщение, как в контакте

Заранее спасибо.
  • Вопрос задан
  • 2264 просмотра
Пригласить эксперта
Ответы на вопрос 1
TheRonCronix
@TheRonCronix
1 Начните с выделения сущностей:
пользователь
сообщение
беседа
и т.д.

2 Нарисуйте логическую диаграмму БД: сущности и отношения между ними (одлин-ко-многим, многие-ко-многим, многие к одному). Например, один пользователь может иметь много бесед.

3. Добвьте атрибуты с сущности. Например, для сообщения - это дата отправки сообщения, дата прочтения, признак удаления/редактирования и т.д.

4. Определите ключи и констрейнты.

4. Создайте физическую БД. Отношения многие-ко-многим проектируются таблице-бриджем. Добавьте нужные индексы, констрейнты, опции хранения для данных таблицы, секционирование, кластеризацию, и т.п.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы