А как насчет использования темы вместо комментария в качестве основного объекта?Давайте сначала попробуем с SQL и потоком из двух человек: когда первый пользователь отправляет первое сообщение второму пользователю, вы создаете новый поток и связываете этот поток с двумя пользователями (у пользователя много потоков).Само сообщение вы можете сохранить как JSON.Тогда каждый ответ будет в том же JSON (тот же varchar или аналогичное поле).Это решение хорошо работает, если вам не нужно искать (или перечислять) отдельные сообщения.
Пример:
Users:
Id-Name
1-User1
2-User2
UsersByThread:
UId-TId
1-1
2-1
Threads
Id-JSON
1-'{"messages":[{"user":"User1","text":"blablabla"}]}'
Затем, когда ответит второй пользователь, вы просто берете json и добавляете новое сообщение:
Threads
Id-JSON
1-'{"messages":[{"user":"User1","text":"blablabla"},{"user":"User2","text":"blablabla"}]}'
Если третье лицоприсоединяясь к ветке, вы просто добавляете связь в UsersByThread и добавляете сообщение в JSON.
Кстати, вы можете использовать ту же идею в магазине nosql, например на диване, или даже в магазине значений ключей, таких как redis.Также вы можете создать более естественную систему в neo4j, но я думаю, что это может работать просто отлично в обычной базе данных sql