Вопрос

Я планирую создать систему PM для моих пользователей, в целом это кажется достаточно простым, но то, как я видел учебные пособия, создающие системы PM, есть одна проблема.

По тому, как я запланировал его для работы, будут такие строки, как, user_from, user_to, а затем сообщение - user_from будет отправителем, и увидит сообщение в своих сообщениях отправки, пользователь_т будет приемником и увидит сообщение в его почтовый ящик. Но что, если пользователь хочет удалить сообщение из своей отправленной папки, но другой пользователь не хочет удалять его из своего почтового ящика ??

Есть ли простой способ сделать это?

Также может быть хорошо, иметь сообщения в разговорах, таких как Gmail и Facebook, но это, возможно, трудно кодировать (любые учебники оценены)?

Это было полезно?

Решение

Вы можете решить эту проблему несколько способов, но я бы, вероятно, добавил бы пару флагов (From_deleted, to_deleted) в таблицу:

  • Вместо того, чтобы удалить сообщение, обновите соответствующий флаг до 1.
  • При перечислении сообщений отфильтруйте те, которые были помечены.
  • Вы можете настроить сценарий так, чтобы после помещения, если оба поля помечены, вы можете на самом деле Удалить ряд.

Другие советы

Используйте то, что называется мягким удалением. Это означает, что когда запись «удаляется», она никогда не удаляется из базы данных, а скорее флаг установлен для удаления, что позволяет вам удалить его из пользовательского интерфейса, все еще имея доступ к данным, когда вам это нужно. Таким образом, для этой ситуации вы можете создать еще два столбца с именем user_to_delete и user_from_delete. Когда кто -либо из них настроен на True, вы бы знали, что не показывают сообщение в почтовом ящике/исходящем ящике соответствующего пользователя. Удачи.

Я предлагаю следующий дизайн базы данных:

MESSAGES
+----------+------------------+---------------------------+
|    id    |    subject_id    |    body                   |
+----------+------------------+---------------------------+

SUBJECTS
+----------+-------------+--------------+-----------------+
|    id    |    title    |    author    |    receivers    |
+----------+-------------+--------------+-----------------+

INBOX
+----------+---------------+--------------+---------------+
|    id    |    user_id    |    msg_id    |    read       |
+----------+---------------+--------------+---------------+

OUTBOX
+----------+---------------+------------------------------+
|    id    |    user_id    |    subject_id                |
+----------+---------------+------------------------------+

Когда вы отправляете сообщения, вы создаете новую строку для всех приемников в таблице почтовых ящиков и в таблице Outbore One для отправителя. В таблице сообщений вы вставляете одну строку с идентификатором субъекта и телом сообщений. В таблице субъектов вы вставляете одну строку с заголовком, автором и всем Информация хранится, даже если один из приемников удаляет сообщения из его/ее почтового ящика (в данном случае удалите строку в таблице почтовых ящиков).

Для исходящих ящиков нет необходимости в флаге «чтение», и обратите внимание, что используется только идентификатор субъекта.

Другим подходом будет добавить два столбца, которые будут определять, запросили ли владелец или получатель удалить (скрыть) сообщение.

owner_id | user_from | user_to | mailbox_folder | Message | Owner_hide | Recipient_hide
1          1           2         Sent             Hi         1           0

Да, есть простой способ сделать это! Имея еще два столбца, соответственно sender_deleted а также receiver_deleted. Анкет Если один из них «удаляет» сообщение, то вы обновили столбец со значением 1. Например. Когда вы отображаете сообщения, вы выбираете сообщения, вы убедитесь, что значение отличается от 1. и т. Д.

Вы бы просто создали 2 строка и добавили столбец. пример:

owner_id | user_from | user_to | mailbox_folder | Message
1          1           2         Sent             Hi
2          1           2         Inbox            Hi

Другие столбцы: уникальный идентификатор строки, временные метки, строка субъекта и т. Д.

Затем ваши почтовые ящики будут построены из столбца hover_id, и у каждого пользователя есть своя копия для перемещения/удаления по мере их выбора.

Чтобы добавить разговоры, вы можете добавить столбец или другую таблицу. Если это новое сообщение, получите новый идентификатор разговора, иначе используйте тот же идентификатор. Запрос по метки времени.

Вы можете добавить строки user_from_deleted & user_to_deleted и отобразить сообщение только в том случае, если оно не удалено.

Чтобы отобразить сообщения в разговорах, вы можете добавить parent_id и отобразить все сообщения с одним и тем же parent_id

Система PM немного сложнее, чем один стол. Что, если вы в личку больше, чем один человек? В этом случае вам хотелось бы несколько таблиц. Один для пользователей, сообщений и т. Д. Вы бы связали их с использованием первичных и иностранных ключей.

Попробуйте искать реляционные базы данных. Это должно начать вас:http://www.databasejournal.com/sqletc/article.php/1469521/introduction-to-realational-databases.htm

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top