Web Messaging系统的数据库结构(适用于注册用户和来宾)

时间:2017-07-03 11:20:04

标签: php mysql database-design relational-database

我正在尝试使用PHP和MySQL创建一个非常简单的消息传递系统,但是我有一些问题需要决定如何在这里构建事物。

我需要实现的快速列表。

  • 系统需要允许注册用户和来宾发送消息。
  • 客户服务部门将收到这些消息(这意味着客户无法向其他客户发送消息)。
  • 消息可以来自 1)网站联系页面中提供的联系表单,其中包含姓名,姓氏,电子邮件,手机,主题和消息;用户发送的 2)电子邮件(然后系统将通过webhook接收电子邮件并正确存储)。
  • 客户服务部门需要能够回复任何消息。
  • 客户服务部门可以随时联系任何用户(已注册或未注册)。这意味着他们可以回复消息,但也可以“开始”对话(例如:要求确认/更新详细信息的消息)。

我开始设计但是我现在完全陷入困境。当只有注册用户和客户服务成员时,一切都很好:我只需将每个消息与user_id关联为发送者或接收者。但是,当我们添加访客用户时,user_id是无用的,因为它们没有注册(因此没有用户ID)。这意味着我需要为他们存储所有的名字,姓氏,电子邮件和手机(在注册用户的情况下创建冗余数据,因为我已经为他们提供了这些数据)

表格将包含 created_at 列。

enter image description here

我的问题是:访客用户在用户表中没有记录,所以我不能在消息表上有一个user_id字段。此外,我需要告诉谁发送消息(因为我们的客户服务部门可以向注册/访客用户发送消息)。

老实说,如果没有在大多数情况下等于null的列,我找不到实现此目的的方法。

对此有任何帮助将不胜感激。

提前致谢

2 个答案:

答案 0 :(得分:0)

您需要为来宾添加一条记录,作为数据库中的用户帐户。设置默认值,并记录他的IP地址,因此,如果他决定注册,您将使用新的用户帐户更新访客记录。

添加到期日和cron作业,以删除在x天内无效的任何访客帐户。

答案 1 :(得分:0)

您遇到过一个关系模型不能完全适合的示例。这是一个已知问题,有几个Stack Overflow posts

好消息是 - 数据库设计中没有“干净”的解决方案。有一些常见的模型,但它们都有不同程度的不愉快。

坏消息 - 你必须做出权衡,并承担后果。

相关问题