gpt4 book ai didi

php - 在 MySql 表中存储聊天消息

转载 作者:可可西里 更新时间:2023-11-01 06:55:09 27 4
gpt4 key购买 nike

在过去的几周里,我一直在开发基于 Web 的聊天客户端应用程序,我有一个关于在 MySql 表中存储聊天消息的问题。我创建了一个名为 conversations 的表,目前它包含 5 个字段;

user1ID, user2ID,messages(mediumtext), status, timestamp.

当我测试聊天应用程序时一切正常,但问题是每次用户发送内容时,我都会将该值作为新行附加到我的“消息”字段中。在检索消息时,我的 sql 代码会读取整个内容并将其显示给相应的用户。因此,数据量随着添加到消息字段中的文本量线性增加。我的问题是,是否有任何方法可以仅从文本字段中选择最后一行,或者可能会减少传输数据量的其他解决方案。

最佳答案

您需要一个更好的数据库架构 - 更具关系性。这样做也会给你带来一些其他的改进(密码保护聊天和多用户聊天等等)

这是您的数据库的 ERD。

enter image description here


2016 年 5 月 6 日编辑添加具有(希望)改进的字段类型和名称的 DDL

CREATE TABLE user
(
user_id CHAR(32),
user_login VARCHAR(255),
user_password CHAR(64),
user_email VARCHAR(400),
PRIMARY KEY (user_id)
);

CREATE TABLE message
(
message_id CHAR(32),
message_datetime DATETIME,
message_text TEXT,
message_chat_id CHAR(32),
message_user_id CHAR(32),
PRIMARY KEY (message_id)
);

CREATE TABLE user_chat
(
user_chat_chat_id CHAR(32),
user_chat_user_id CHAR(32),
PRIMARY KEY (user_chat_chat_id,user_chat_user_id)
);

CREATE TABLE chat
(
chat_id CHAR(32),
chat_topic VARCHAR(32),
chat_password CHAR(64),
user_chat_user_id CHAR(32),
PRIMARY KEY (chat_id)
);

CREATE INDEX user_login_idx ON user (user_login);
ALTER TABLE message ADD FOREIGN KEY message_chat_id_idxfk (message_chat_id) REFERENCES chat (chat_id);

ALTER TABLE message ADD FOREIGN KEY message_user_id_idxfk (message_user_id) REFERENCES user (user_id);

ALTER TABLE user_chat ADD FOREIGN KEY user_chat_user_id_idxfk (user_chat_user_id) REFERENCES user (user_id);

ALTER TABLE chat ADD FOREIGN KEY chat_id_idxfk (chat_id,user_chat_user_id) REFERENCES user_chat (user_chat_chat_id,user_chat_user_id);

关于php - 在 MySql 表中存储聊天消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351526/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com