Разработка БД для чатов между пользователями - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть одна проблема с проектированием структуры базы данных для моего приложения.У меня 3 модели: события, группы и пользователи.

Отношения:

События - Пользователи - многие ко многим.

Группы - Пользователи - многие ко многим.

Будет доступен один чат в группе и один внутренний турнир.Кроме того, в ближайшем будущем я собираюсь внедрить чаты между двумя или более пользователями.

Я немного запутался, что является лучшим способом его разработки.Я создал модель чата и связь «многие ко многим» между чатом и пользователями.

Первая идея: члены групповых чатов и чатов будут храниться в таблицах соответственно event_users и group_users.В chat_users будут храниться только чаты между пользователями.

Вторая идея: chat_users будет синхронизироваться с таблицами event_users и group_users.Преимущество этого способа заключается в том, что у меня будет простая разделенная логика для управления чатами, и не будет много сложных запросов к БД.

Спасибо за любые отзывы или, возможно, другие идеи.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Пользователь может участвовать в событии, и событие может иметь много пользователей, которые участвуют в этом событии, в данном конкретном случае нам необходимо использовать отношение «Многие ко многим» Отношение «Один-ко-многим» Laravel

event_user

  • id
  • event_id
  • user_id

Пользователь может быть членом многих групп игруппа может иметь много членов, в этом случае нам нужно отношение «многие ко многим» отношение «многие ко многим»

group_user

  • id
  • group_id
  • user_id

чат может быть связан с событием или группой, поэтому мы сохраняем тип чата, который может быть либо Событием, либо Группой, исоответствующий идентификатор этого события или группы.поэтому, если у нас есть конкретный чат, мы можем получить всех пользователей, связанных с этим чатом, через соответствующее событие или сгруппировать его в зависимости от типа chatable_type в каждом случае, чтобы узнать больше, см. Laravel Много-ко-многим полиморфным отношениям

чаты

  • id
  • имя
  • chatable_id
  • chatable_type

нам также нужна одна таблица для сохранения всех разговоров для конкретного чата

сообщений

  • id
  • chat_id
  • message
  • create_at

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

разговоров

  • id
  • sender_id
  • receive_id
  • message

все sender_id и receive_id будут внешними ключами со ссылкой на некоторый идентификаторпо таблице пользователей

0 голосов
/ 18 сентября 2018

Я считаю, что Chat имеет полиморфную ассоциацию с Group и Event (и, возможно, User также).Некоторые решения этой проблемы предоставлены здесь: https://www.slideshare.net/billkarwin/practical-object-oriented-models-in-sql/29-Polymorphic_Assocations_Solutions_Exclusive_arcs

Может ли что-то подобное этой работе?

ChatUser

  • id
  • user_id
  • chat_id

Чат (эксклюзивный метод дуг)

  • id
  • event_id (nullable)
  • group_id (nullable)
  • описание / etc

ChatMessage

  • id
  • chat_id
  • user_id_from
  • user_id_to (nullable)
  • date
  • message

Сделанные предположения:

  • событие / группа может содержать несколько чатов
  • пользователь может принадлежать к группе, но не к групповому чату

Кроме того, Laravel поставляется с собственным решением для обработки полиморфных отношений,Здесь тоже может подойти.

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