Как разработать схему базы данных для приложения обмена сообщениями? - PullRequest
0 голосов
/ 30 марта 2020

Я создаю laravel веб-сайт, который имеет функцию обмена сообщениями. Я хотел бы принять во внимание следующие факторы:

  1. Обе стороны (отправитель и получатель) имеют возможность удалять сообщения в их конце.
  2. , если какой-либо из стороны удалили сообщение, другая сторона должна все еще иметь доступ к сообщению.
  3. сообщение может иметь вложения.

Я подумал о следующей схеме, но думаю, что в ней слишком много дублирования. и я ищу что-нибудь получше, если есть.

messages table:
-----------------
id
title
body
received_messages table:
------------------------
message_id
receiver_id
sender_id
is_read
sent_messages table:
------------------------
message_id
receiver_id
sender_id

Редактировать: Мне пришла в голову другая схема:

messages table:
-----------------
id
title
body
user_messages table:
-----------------
message_id
sender_id
receiver_id
sender_del   // indicates that the sender deleted the message in their end
receiver_del // indicates that the receiver deleted the message in their end
read_at      // timestamp null by default

Когда одна из сторон выберет удалить сообщение, соответствующее поле (sender_del, receiver_del) будет истинным, так что сообщение не будет показано этому человеку

При использовании предыдущей схемы сообщение будет удалено только из БД, если обе стороны удалили ее

<?php
$user = auth()->user();
$received = $user->receivedMessages; // to get received messages
$sent = $user->sentMessages; // to get sent messages

. Любые предлагаемые изменения, какую схему использовать или новую схему приветствуются. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...