Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Design de banco de dados para comentários e respostas


Você pode usar apenas uma tabela, que inclui um campo ParentID. Se o registro não tiver valor, é um comentário, caso contrário, é uma resposta (para um comentário ou uma resposta).

Você pode consultar o registro ParentID do registro (inspecione é ParentID) para ver se esta resposta é um comentário ou uma resposta.

Editar :O acima é uma solução bastante prática. No entanto, para ir com uma versão normalizada, ainda mantenha a tabela Comments (sem ParentID) e crie uma tabela ReplyTo que tenha um CommentID e um ResponseID, ambos os IDs dos registros na tabela Comments.

Usando essa ideia, o sql a seguir mostrará os comentários e a 'resposta' para cada comentário para cada resposta que tiver um comentário:
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

Como Dimitrii aponta, ele não exibirá comentários sem respostas - para isso, você precisa de uma consulta de junção externa (não testou a sintaxe):
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