Структура базы данных для отправки сообщений между зарегистрированными клиентами / гостями и агентами компании - PullRequest
0 голосов
/ 28 декабря 2018

TL; DR

Facebook-подобная система обмена сообщениями с Laravel / MySQL, где также гости могут отправлять сообщения агентам компании.Агенты компании могут начинать разговоры с зарегистрированными клиентами.

Полная информация

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

Это список требований к этой системе (я уже рассмотрел почти все пункты):

  • Разрешить отправлять сообщения как зарегистрированным клиентам, так и гостям.Клиенты и гости могут отправлять сообщения только в отделы компании.Это означает, что клиенты не могут отправлять сообщения другим клиентам.
  • При создании сообщения создатель должен указать, какой тип сообщения создается, выбрав параметр из списка категорий.
  • Каждая категория должна быть получена «ролью» (таким образом, сообщения, связанные с выставлением счетов, будут получены финансовым отделом, сообщения поддержки будут получены службой поддержки клиентов и т. Д.).
  • Сообщения могут поступать от 1) контактную форму, доступную на странице контактов веб-сайта, где спрашивают имя, фамилию, адрес электронной почты, номер телефона, тему и сообщение;и 2) электронные письма, отправленные пользователями (тогда система будет получать электронные письма через webhook и правильно их хранить).
  • Все отделы могут в любое время связаться с любым пользователем (зарегистрированным или нет).Это означает, что они могут отвечать на сообщения, но также могут «начать» разговор (пример: сообщение с просьбой подтвердить / обновить данные).

Вот что у меня сейчас есть:

enter image description here

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

Каждое сообщение создается кем-то (зарегистрированным клиентом, зарегистрированным агентом компании илигость) и направляется кому-то (зарегистрированному клиенту в отдел, гостю в отдел, зарегистрированному агенту компании для зарегистрированного клиента или зарегистрированному агенту компании, отвечающему гостю).

Мой текущий подход заключается в использовании двухтаблицы: Guest и User.Таблица User будет содержать как клиентов, так и агентов (это легко, мне просто нужно назначить соответствующую роль).Это означает, что мне нужно сохранить в таблице Message тип sender_type (guest или user), sender_id (id), receive_type (guest или user) и receive_id.Но, например, когда Customer1 должен отправить сообщение в отдел выставления счетов, я не знаю, какой агент ответит на это сообщение.Означает ли это, что я должен хранить «ноль» в полях получателя?Это может привести к множеству строк с нулевыми столбцами.

Заранее спасибо

1 Ответ

0 голосов
/ 28 декабря 2018

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

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

Хотя вы можете просто поместить это в одну «пользовательскую» таблицу, сгенерировав идентификатор гостевого профиля и аутентификацию вне MySQL в PHP, а затем вставить это в свою пользовательскую таблицу.Это значительно упростило бы процесс запроса данных и индексации.

Либо будет работать, но я бы лично выбрал второй вариант.

...