Учусь делать самую простую систему сообщений, между двумя пользователями, где на сообщение можно ответить только 1 раз и это сообщение и ответ, видны у обоих пользователей. Вот в чём вопрос: если 1 пользователь хочет удалить какое-нибудь сообщение из своего списка всех сообщений и если он его удалит, то оно пропадёт из БД и тогда у другого пользователя оно из списка тоже исчезнет. Может в таком случае, сначала записать в бд, в какую-нибудь строку этого сообщения, то что 1 пользователь уже не хочет его отображать и записать цифру 1 и потом проверять, если эта цифра есть, то этому пользователю такое сообщение не выводить и когда уже второй пользователь захочет его удалить, то ещё в одну строку записывается цифра 1 и потом уже сравнивается, если цифра 1 есть в обеих строках, то удалить его из базы?
В таком случае удобнее использовать одно числовое поле в котором закодировать все варианты отображения сообщения: 0b11 - видят оба 0b10 - видит только автор 0b01 - видит только получатель 0b00 - пора удалять
можно сделать две таблицы... в одной идут сообщения с ИД, временем и телом сообщения и ид пользователя отправителя в другой таблице следующие поля ид сообщения из предыдущей таблицы ид получателя (на тот случай если одно сообщение надо разослать многим пользователям) удалено у отправителя - boolean удалено у получателия - boolean ид диалога - int для того что бы можно было объединять сообщения в диалоги.. к примеру в личке у каждого пользователя может быть несколько диалогов с одним и тем же пользователем.. и получается что в первой таблице только список сообщений а вторая таблица уже их распределят куда что) ну как то там)) в архитектуре бд может быть где то ошибка)) нечто подобное делал когда то.. досконально не помню структуру
@Dimon2x Создать связь многие ко многим, выглядеть должно типа такого: 1. есть 2 юзера с именами user1 и user2 2. когда user1 отправляет сообщение user2 то записывай сообщение и отравителю и получателю 3. если отправитель удаляет у себя сообщение то у получателя оно все ровно остается и наоборот Думаю мысль ясна.
Может логичнее создать таблицу связей? Например есть две таблицы: Код (Text): user: id, username, password message: id, user_id, title, text, created_date, status //status, user_id могут понадобиться для администратора, поэтому тут создаем эти столбцы. И таблицы входящих и исходящих сообщений. Код (Text): inbox: id, user_id, message_id outbox: id, user_id, message_id Хочется удалить сообщение, удали запись в соответствующей таблице.
Посмотри как была построена система сообщений в ВК, можешь сделать так же - https://vk.com/blog/messages-database
@VGlad Посмотреть это всего лишь малость, а вот создать это уже умения, для меня это пока тяжело но скажу что достижимо, я не про вк систему сообщений, а просто переписка, тоже собираюсь ее написать.
Так так прочти ее, не смотри Там есть о начальной переписке, и о том какие таблицы она использовала, а потом уже идет про диалоги и чаты. Прочти ее, она тебе не помешает.
Там как раз не описано "как была", там описано во что превратилась. А это новое на несколько порядков превышает как ваши потребности так и ваши возможности.
Могу предложить такую структуру БД: У каждого пользователя как минимум два ящика с переписками: активные темы и архив. В каждом ящике произвольное число тем, в теме может быть много сообщений. Удаление темы это фактически перенос в архив. У одного пользователя тема может быть в архиве, а у другого нет. Сущности и отношения между ними: пользователь - 1:m - ящик ящик - m:m - тема (у Васи свой ящик с темами, у Пети свой, а переписки могут быть общими) тема - 1:m - сообщение пользователь - 1:m - сообщение ( здесь пользователь это автор сообщения ) Для не совсем новичков очевидно, что m:m влечёт за собой дополнительную таблицу-связку. итого пять таблиц, считая самих пользователей. users(id, name) boxes(id, user_id, box_title) topics(id, box_id, subject, created_at) box_topic(box_id, topic_id) messages(id, topic_id, user_id, created_at, body) Когда пользователь X начинает переписку с пользователем Y, 1. создаётся новая тема topics, 2. создаётся сообщение messages, ссылающееся на эту тему 3. делается две записи-связки box_topic для того чтобы новая тема попала в ящики обоих пользователей. Последующие ответы требуют только одно действие 1. создаётся сообщение messages, ссылающееся на существующую тему Данная структура позволяет расширить реализацию переписок на нескольких пользователей, т.е. что-то типа чатрумов.
@artoodetoo, по моему даже это для решения задачи автора слишком. Ему достаточно 2х таблиц: пользователи, сообщения.
@artoodetoo Четкая структура, мне нравится, будет время прочитаю внятней что к чему. Но лучше бы уже готовую базу увидеть