|
|
|
| На большинстве сайтов, где присутствует возможность переписки пользователей, есть возможность удаления диалогов. Удаленный диалог перестает отображаться у меня, но сохраняется у другого пользователя, пока он тоже его не удалит . Как спроектировать для этого таблицу сообщений? | |
|
|
|
|
|
|
|
для: ramundo
(06.10.2014 в 12:28)
| | у вас что, сообщения дублируются?
спланировать можно так:
id
sender - отправитель
recipient - получатель
message - текст сообщения
если удалять по айди, то удалятся будет сообщение как у отправителя, так и у получателя. | |
|
|
|
|
|
|
|
для: Enter
(06.10.2014 в 17:01)
| | Надо бы ещё одно поле, куда класть id удалившего первым и ему запись не показывать.
Если потом удаляет и второй (при наличии в поле id первого), тогда удаляется полностью | |
|
|
|
|
|
|
|
для: Yuriev
(06.10.2014 в 21:17)
| | Спасибо! точно такой же вариант я обдумывал сам, но себе не доверяю.)) А теперь уверен, что его можно использовать. | |
|
|
|
|
|
|
|
для: Yuriev
(06.10.2014 в 21:17)
| | Точно. не дочитал. Думал, что ему как раз такой функционал не нужен.
Тогда надо так:
таблица Messages
id | from | to | text | display
Поле display - это побитовый флаг. например, 1 - видно всем, 2 - только отправителю, 4 - адресату, 8 - удалено и т.д. | |
|
|
|
|
|
|
|
для: ramundo
(06.10.2014 в 12:28)
| | Если делать по науке (нормализация и всё такое) то таблица с сообщениями вообще не должна иметь полей sender и receiver. Просто :
id | message | created_at
а уже другая таблица будет содержать связь этого сообщения с участниками переписки
id | owner_id | contact_id | message_id | folder_id
и, соответственно, в эту таблицу при создании сообщения вносится 2 записи. Пример если пользователь 111 отправляет сообщение пользователю 222:
1 | 111 | 222 | 1 | 2
2 | 222 | 111 | 1 | 1
соответственно folder_id = 1 - это папка "входящие" folder_id = 2 - папка "отправленные".
т.о. пользователи могут перемещать сообщения по разным папкам независимо друг от друга. | |
|
|
|
|
|
|
|
для: Axxil
(07.10.2014 в 09:35)
| | и таблиц-связок напрашивается две.
потому как, у письма M есть адресат A - это связь, не зависящая от связи
у пользователя U письмо M живет в папке F | |
|
|
|
|
|
|
|
для: Trianon
(07.10.2014 в 10:40)
| | Это понятно, но в данном случае папка это скорее флаг типа письма (отправленное или входящее). Ну и этот флаг, в простейшем случае, удобно заодно сделать внешним ключом справочника папок. | |
|
|
|