@LaraLover

Как правильно спроектировать базу данных?

Добрый день. Интересует вот такой вопрос, как правильно спроектировать БД по примеру реддита или пикабу.
Смысл в следующем- есть ПОСТ, у поста есть РЕЙТИНГ. Пользователи оставляют КОММЕНТАРИИ, у которых тоже есть РЕЙТИНГ. Рейтинг -это каждый пользователь плюсанул\заминусил, соответственно он может только 1 раз проголосать (либо убрать голос\поставить противоположный).
Есть несколько мыслей:
1. Создается таблица рейтинга - ID_user, ID_post, type, vote. Не ляжет ли сервер от нагрузки? Посчитать рейтинг поста, выбрать все комментарии, и к каждому комментарию опять посчитать рейтинг.
2. У таблице постов и комментариев добавляем поля с рейтингом и так же создаем отдельную таблицу где записываем какой пользователь за что отдал голос. Так вроде как должна быть нагрузка меньше, при получении- сразу есть рейтинг, правда при изменении надо будет писать сразу в два места, что вроде как тоже не сильно хорошо...

Может есть какие-то другие варианты?
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
@orbit070
Таблица Рейтинг постов вида (post_id, user_id).
Таблица Рейтинг комментов вида (comment_id, user_id).
Таблица комментов вида (post_id, comment_id).

Для того чтобы при каждом обращении не считать с нуля рейтинг делается элементарная штука: в таблице Постов заводите дополнительное поле Рейтинг. И каждой раз когда кто-то ставит плюс(ну или минус) помимо добавления(или удаления) записи в таблицу Рейтинг постов вы так же увеличиваете(или уменьшаете) поле Рейтинг в таблице постов. Аналогично заводите такое же поле Рейтинг в таблице комментариев и при каждом плюсе/минусе комментария помимо добавления в таблице Рейтинг комментариев увеличиваете(уменьшаете) счетчик-поле рейтинг в самой таблице Комментарии
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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