Bạn chỉ có thể sử dụng một bảng, bao gồm trường ParentID. Nếu bản ghi không có giá trị, nó là một bình luận, nếu không nó là một câu trả lời (cho một bình luận hoặc trả lời).
Bạn có thể truy vấn hồ sơ ParentID của hồ sơ (kiểm tra đó là ParentID) để xem câu trả lời này là nhận xét hay trả lời.
Chỉnh sửa: Trên đây là một giải pháp khá thiết thực. Tuy nhiên, để đi với một phiên bản bình thường, vẫn giữ một bảng Bình luận (không có ParentID), và tạo một bảng ReplyTo có một CommentID và một ResponseID, cả hai đều là các ID của các bản ghi trong bảng Nhận xét.
Sử dụng ý tưởng này, sql sau sẽ hiển thị các nhận xét và 'reply' cho mỗi nhận xét cho từng trả lời rằng có một lời nhận xét:
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
Như Dimitrii chỉ ra, nó sẽ không hiển thị bình luận với không có câu trả lời - cho điều này bạn cần truy vấn tham gia bên ngoài (không thử cú pháp):
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
Bạn thiết kế được chuẩn hóa, bạn có thể tiếp tục với nó. Bạn phải có userId, đây sẽ là id của người tạo trong cả hai bảng. Câu trả lời thứ hai để trả lời là một kịch bản logic, việc thực hiện nó giống như bạn có trạng thái mà mọi người trả lời –
UserId? 'Người dùng' được tham chiếu ở đâu? – mcalex