Возможно, я упустил из виду одну или несколько сложностей со схемой, но я пришел к следующему:
users - Сохранить таблицу существующих пользователей.
разговоров - это будет представлять отдельный разговор, инициирующего пользователя и дату начала разговора.
- id
- user_id # user who initiated conversation
- created_at
разговор_пользователя - Это будет представлять каждого пользователя, который являетсячасть разговора.Хотя в ваших требованиях указано, что каждый диалог ведется между двумя пользователями, эта структура позволит вам проводить групповые беседы и в будущем - если это когда-либо потребуется.
При желании вы можете добавить отметку времени read_at
для хранениядата / время, когда пользователь последний раз читал разговор.Затем это можно использовать для определения, имеет ли пользователь непрочитанные сообщения в беседе.
- id
- conversation_id
- user_id
- read_at # when user last read conversation
- created_at
messages - Это будет представлять одно сообщение в беседе.Только отправляющий пользователь должен быть зарегистрирован, потому что пользователи, которые могут прочитать сообщение, продиктованы таблицей conversation_user
.
- id
- conversation_id
- user_id # user who sent message
- message
- created_at
- updated_at