在注册的客户/来宾和公司代理商之间发送消息的数据库结构

时间:2018-12-28 11:57:40

标签: php mysql database laravel entity-relationship

TL; DR

类似Facebook的带有Laravel / MySQL的消息传递系统,访客也可以将消息发送给公司代理商。公司代理商可以与注册客户开始对话。

详细信息

我正在尝试创建一个系统,该系统允许注册的客户/来宾将消息发送到公司代理,反之亦然,但是我陷入了消息的发送者/接收者与消息本身之间的关系。 / p>

这是此系统的要求列表(我已经介绍了几乎所有项目):

  • 允许已注册的客户和来宾发送消息。客户和来宾只能将消息发送到公司部门。这意味着客户无法将消息发送给其他客户。
  • 创建消息时,创建者需要通过从类别列表中选择一个选项来告知正在创建的消息类型。
  • 每个类别都需要由一个“角色”接收(因此,与计费相关的消息将由财务部门接收,支持消息将由客户服务接收,等等)。
  • 消息可以来自于1)网站的“联系方式”页面中提供的联系方式,其中要求您提供拳头名称,姓氏,电子邮件,电话号码,主题和消息;和2)用户发送的电子邮件(然后系统将通过webhook接收电子邮件并将其正确存储)。
  • 所有部门均可随时与任何用户(无论是否注册)联系。这意味着他们可以回复邮件,但也可以“开始”对话(例如:要求确认/更新详细信息的邮件)。

这是我目前拥有的:

enter image description here

这几乎涵盖了所有内容,除了用户/来宾消息之间的关系。

每条消息都是由某人(注册客户,注册公司代理或来宾)创建的,并定向到某人(注册客户到部门,访客到部门,注册公司代理到注册客户或注册公司代理)来回复客人)。

我当前的方法是使用两个表:GuestUserUser表将包含客户和代理商(这很简单,我只需要分配适当的角色)。这意味着我需要在Message表中存储sender_type(访客或用户),sender_id(id),receiver_type(访客或用户)和receive_id。但是,例如,当Customer1需要向帐单部门发送消息时,我不知道哪个代理会回复该消息。这是否意味着我应该在接收者字段中存储“ null”?这可能导致许多行的列为空。

预先感谢

1 个答案:

答案 0 :(得分:0)

拥有两个单独的表是一种方法。您将要确保给定的来宾用户在发送消息后仍然可以访问他们的对话,因此您将要生成来宾用户ID并理想地具有某种其他身份验证来(安全地)访问这些消息。

就实际用户而言,我只需要一个表,其中存储有用户配置文件数据,其中“用户类型”作为您的注册客户(C)或注册公司代理(A)类型。

尽管您可以通过在PHP中在MySQL外部生成来宾配置文件ID和身份验证,然后将其插入到用户表中,而将其简单地放在一个“用户”表中。这样可以大大简化查询数据和建立索引的过程。

任何一种都可以,但是我个人会选择第二种。