Как правильно спроектировать базу под уведомления?
Всем привет, как правильно реализовать таблицу или таблицы, для системы уведомлений?
Например:
Имеем следующую таблицу уведомлений (упрощенно):
1. user
2. type (название таблицы в базе)
3. id_type (id в этой таблице)
Уведомления могут быть совершенно разного плана, и информацию нужно доставать для их формирования из разных таблиц, как это сделать правильно? Не делать же пачку запросов к разным таблицам? Идея с left outer join тоже кажется странной, в общем не могу сообразить как лучше хранить и потом удобно выводить?
Подскажите именно по логике всей цепочки, зарание благодарю)
В твоем случае лучше перейти на очередь сообщений. RabbitMQ или Kafka. Если хочешь использовать именно SQL то лучше послать нафиг нормализацию и хранить прямо лог в отдельной таблице, join относительно медленная операция.
Для правильного вопроса надо знать половину ответа
Если это уведомления по типу "отослал и забыл", то, IMHO, формировать уведомления и хранить уже готовые. Для людей в текстовом виде, для программ/сервисов - в JSON/XML/сериализации.
Ну там уведомления по типу: на ваш комментарий ответил такой-то пользователь к такому-то посту, следовательно можно id user и id post хранить в разных полях, и потом при формировании выдергивать нужные данные (ссылка на пост, имя пользователя и т.д.) из таблиц, а можно конечно сразу хранить данные в json в строке.
Вот я и думаю как сделать лучше. json вроде как проще намного, но не нравится 2 факта, нормализация и устаревание данных. Например пользователь мог изменить имя, а значит в уведомлении будет неверное имя, хотя конечно возможно это не так и важно)