我正在制作具有基本消息传递功能的PHP / MySQL Web应用程序。两个用户将能够进行"对话"这将包含一系列消息。
以下是我设想的模型关系:
用户> 多对多>会话
对话> 多对多>用户AND 一对多>消息
消息> 所属>对话(它也可以选择属于用户)
为实现这一目标,我需要以下表格/字段:
正如您所看到的,我正在考虑使用ConversationsUsers连接表来管理用户和对话之间的多对多关系。
我试图弄清楚这是否是最好的方法,目前还有两件事让我困扰:
Conversations表只有一个ID
字段,其作业只是捆绑消息,似乎效率低下/尴尬。有没有更优雅的方式来做到这一点?
我需要存储一些有关对话的用户特定数据,例如is_archived
。在上面的计划中,除非我将这些字段添加到连接表,否则这是不可能的。我认为这在CakePHP中被称为hasMany through,这是我使用的框架(v2.6.x)。我无法想出一种避免这种情况的方法,但我想知道它是否可能,因为我发现这些关系在过去难以维持。
欢迎任何有关我的方法的任何其他想法/反馈。
答案 0 :(得分:0)
你看下面的星形:
Users
ID
...
[lots of other fields that don't matter]
...
Messages
ID
unique_conversation_id (put timestamp in this field and use it like unique conversation id and do proper indexing)
user_id
text
您可以轻松删除这些拖表对话和对话用户。
保留users表,因为它包含大量信息并仅处理来自消息表的所有其他内容。每个会话都有唯一的转换ID,它将是时间戳。 现在,在此消息表中发生了什么,无论何时创建新对话,您都必须将时间戳放在该移动中,然后将其用作该特定对话的转换ID。