В целях самообучения клепаю свой велосипед на PHP.
Сейчас внедряю функционал обмена сообщениями.
Хочу создать более-менее универсальную структуру БД (на MYSQL для начала) для разных видов переписок: диалоги, чаты, группы, комментарии к статьям и т.д.
Начитавшись разных советов и примеров, накидал такую структуру БД.
Количество таблиц может показаться избыточным, но моя задача - наиболее универсальная структура для любого возможного расширения функционала без необходимости менять структуру БД.
Кратко по таблицам:
1. users - список пользователей
2. chats - список всех чатов с указанием типа (диалог, чат, комментарии и т.д.)
3. chatprop - свойство чата (название, картинка, закреплённоё сообщение, возможность лайкать сообщения и т.д.)
4. chatmembers - участники чата. Статус: админ, участник, читатель, вышел из чата и т.д.
5. messages - список сообщений с указанием чата, автора и даты создания
6. messagecontent - содержимое сообщения (текст, картинки, файлы, ссылки, опросы и т.д.), на одно сообщение может быть несколько вложений, потому вынес в отдельную таблицу, хотя в простом случае можно объединить с таблицей messages. Сюда же можно добавлять лайки-дизлайки к сообщениям
7. messagetouser - Привязка сообщений к пользователям с указанием прочитанности и удаления из истории. Сюда попадают сообщения в зависимости от типа чата, например комментарии к статьям/записям сюда не добавляются.
Наиболее нагруженные последние 3 таблицы, с возможным ростом нагрузки можно предусмотреть разнос этих таблиц на разные сервера или дробление всех трех с разнесением самых активных чатов по разным серверам.
Есть какие советы по улучшению/оптимизации структуры БД?