Как организовать базу данных?

Что-то типа форума. Есть главное сообщение ветки (вопрос) и есть ответы к нему (или комментарии).
Вопросы в одной таблице, а комментарии к ним в другой? Связь один ко многим:
Вопросы: id / вопрос / user
Комментарии: id / id_вопроса / комментарий / user
А доставать их join? В одну таблицу их нет смысла объединять как-то?

Как быстро достать вопросы с более чем 20 ответами и понять каким юзерам они принадлежат?
  • Вопрос задан
  • 2431 просмотр
Решения вопроса 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
Применительно к структуре таблиц, предложенной sayber: добавь в questions поле count типа int со значением по умолчанию 0, а на таблицу answers (должна быть InnoDB) повесь триггеры:

DELIMITER $$

CREATE DEFINER = 'root'@'%' TRIGGER answers_after_insert
AFTER INSERT ON answers FOR EACH ROW
BEGIN
  UPDATE questions
  SET questions.count = questions.count + 1
  WHERE questions.question_id = NEW.question_id;
END

$$

CREATE DEFINER = 'root'@'%' TRIGGER answers_after_delete
AFTER DELETE ON answers FOR EACH ROW
BEGIN
  UPDATE questions
  SET questions.count = questions.count - 1
  WHERE questions.question_id = old.question_id;
END

$$

DELIMITER;


В этом случае поле questions.count автоматически будет содержать точное кол-во ответов на вопрос и фильтрация/сортировка по кол-ву ответов становится тривиальной.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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