Структура базы данных для комментариев и ответов
Я хочу создать две таблицы один с комментариями, а другой с ответами, с отношением один ко многим между ними. Но что, если они также могут отвечать на ответы,как это должно быть изменено? Это то, что у меня есть для одного для многих, но я не знаю, как это должно выглядеть, если также могут быть ответы на ответ.
Comments:
• Id
• Title
• Text
Replies:
• Id
• Title
• Text
• Comment id
спасибо заранее.
1 ответов
вы можете использовать только одну таблицу, которая включает поле ParentID. Если запись не имеет значения, это комментарий, в противном случае это ответ (на комментарий или ответ).
вы можете запросить запись ParentID записи (inspect это ParentID), чтобы увидеть, является ли этот ответ комментарием или ответом.
редактировать: вышеизложенное является довольно практичным решением. Однако, чтобы перейти к нормализованной версии, по-прежнему держите таблицу One Comments (без ParentID), и создать таблицу ReplyTo, которая имеет CommentID и ResponseID, оба из которых являются идентификаторами записей в таблице комментариев.
используя эту идею, следующий sql покажет комментарии и "ответ" на каждый комментарий для каждого ответа, который имеет комментарий:
select c.comment, r.comment as reply
from comment as c, comment as r, replyto as rt
where c.ID = rt.CommentID
and r.ID = rt.ReplyID
Как указывает Дмитрий, он не будет отображать комментарии без ответов - для этого вам нужен внешний запрос соединения (не тестировал синтаксис):
SELECT c.comment, r.comment as reply,
from Comment c
left outer join Comment r on c.id = r.id
left outer join replyto rt on rt.responseid = r.id