Van*_*yan 8 mysql database-design disk-structures
请帮助解决以下情况:
存储消息历史记录的 API 有两种,它们是Zopim和Chat2Desc(导入到 Postman 中)。而这两个却可以接着其他的出现。
我的数据库与users表:
Table users
id , email, phone, ...
Run Code Online (Sandbox Code Playgroud)
在Zopim 中,用户通过电子邮件进行识别,在Chat2Desc 中通过电话进行识别。对我来说,这两个领域很重要,无论聊天是什么,有多少不是。
也就是说,如果我在消息中收到电子邮件或用户的电话,我会向我的数据库 ( table users)发出请求以识别我的用户。
而且原则上,即使聊天室的结构也不重要。我会以某种方式选择它们。以下是如何正确保存它们的方法,以至于我为每个人提供了一个结构。
这就是我想出的(我不喜欢的东西,尤其是chat_clients桌子):

解释:
表chats(聊天数据):
client_id -表示的IDchat_clients表duration - 聊天时长(120 秒)system_type- 存储聊天的名称(Zopim、Chat2Desc等)created_at - 创立日期表格 chat_clients(聊天中的用户信息):
is_agent - 0 | 1: 1 => 我的用户,0 => 不是我的user_id - 是用户 ID。包含用户表中的 id 或为空。assigned_data - 用户在聊天中使用的首字母缩写bean_module - 没关系(关于我的用户的信息)unique_col - 将有电子邮件(来自 Zopim)或电话(来自 Chat2Desc,或者我认为存储用户表的 ID)。将保证值的唯一性。users_id + unique_col 串是唯一的 ( UNIQUE KEY user_id_unique_col_UQ (user_id, unique_col))
表 chat_messages:
text - 消息的文本。client_id - 表示 chat_clients 表的 idchat_id - 表示表聊天的IDfile_id - 表示 chat_files 表的 idtransport - 该值将用于 Chat2Desc(Viber、WhatsApp、 ...)、用于 Zopim,因此它不是空的,ZopimTablechat_files有关聊天中传输文件的信息。类比表可能不存储附加信息。
将来,我将为每个用户选择通信历史。
问:如何改进表的结构以获得更大的灵活性?
先感谢您。
Eva*_*oll 11
所有现代聊天界面,无一例外,都为聊天实现了分层和无时间顺序的模式。这意味着您必须使用(即将发布的)MySQL 8,因为之前的版本不支持执行此操作所需的递归 CTE。任何解决方法都不能允许无限深度,这通常是必需的,或者至少是很好的。
您可以在此处查看 PostgreSQL 中的架构,而不是在此处绘制模式,我在此处回答了一个类似的问题。从本质上讲,每个消息具有id|parent_id的parent_id指向id在同一个表。这会创建一个层次结构。我们称这种层次结构的实现为“自引用”或“单表层次结构”。
此外,您可能希望实现一组标记的用户等,以便更好地索引。
最终,如果您要沿着这条路线走下去并且您没有以前的工作,那么您应该使用 PostgreSQL——它现在支持递归 CTE,以及用于轻松标记的 sql-array。
我并不是说您的架构必须看起来像那些。您可能有其他要求,但我不想从劣质的功能集和错误的工具开始。
为清楚起见,此批评是针对您的chat_messages表的。聊天会话只需为其创建一个单独的表,并将所有消息链接到该表中的一个条目即可完成。例如,
CREATE TABLE chat_session (
chat_session_id int PRIMARY KEY
....
);
Run Code Online (Sandbox Code Playgroud)
其他表..
CREATE TABLE chat_message (
ts timestamp with time zone,
chat_message_id int PRIMARY KEY,
chat_message_parent_id int REFERENCES chat_message,
chat_message_author_user_id int REFERENCES user,
chat_message_author_client_id int REFERENCES client
);
Run Code Online (Sandbox Code Playgroud)
或者之类的。
| 归档时间: |
|
| 查看次数: |
33741 次 |
| 最近记录: |