Si potrebbe semplicemente utilizzare una tabella, che include un campo ParentID. Se il record non ha valore, è un commento, altrimenti è una risposta (a un commento o una risposta).
È possibile richiedere il record ParentID del record (controllare è ParentID) per vedere se questa risposta è relativa a un commento o una risposta.
Modifica: Quanto sopra è una soluzione abbastanza pratica. Tuttavia, per andare con una versione normalizzata, mantenere ancora la tabella dei commenti (senza ParentID), e creare una tabella ReplyTo che abbia un ID commento e un ResponseID, che sono entrambi gli ID dei record nella tabella Commenti.
Usando questa idea, il seguente SQL mostrerà i commenti e la 'risposta' ad ogni commento per ogni risposta che ha un commento:
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
Come Dimitrii fa notare, non visualizzerà commenti con nessuna risposta - per questo è necessaria una query outer join (non testata la sintassi):
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
Il design è normalizzato, è possibile procedere con esso. Dovresti avere un ID utente che sarà l'id del creatore in entrambe le tabelle. In secondo luogo, Reply for a Reply è uno scenario logico, l'implementazione è come se avessi uno stato in cui le persone rispondono –
UserId? Dove si riferisce l'utente? – mcalex