Структура базы данных для комментариев и ответов

Я хочу создать две таблицы один с комментариями, а другой с ответами, с отношением один ко многим между ними. Но что, если они также могут отвечать на ответы,как это должно быть изменено? Это то, что у меня есть для одного для многих, но я не знаю, как это должно выглядеть, если также могут быть ответы на ответ.

    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