1、首先表结构设计针对单个用户,然后拓展到n个用用户记录的存储。
2、这里会用msql数据库给出数据库表脚本,但是实际生产环境应该是在APP端生成sqlite数据库文件,把sqlite文件上传到server端作为聊天记录存储。
有【联系人表】、【群组表】、【会话表】、【用户表】、【聊天记录表】
# 聊天记录表
CREATE TABLE `message` ( `msg_id` int(11) NOT NULL AUTO_INCREMENT COMMENT \'消息id,自增长\', `msg_type` int(11) DEFAULT NULL COMMENT \'类型 1:文字;47:emoji;43:音频;436207665:红包;49:文件;48:位置;3:图片\', `is_send` int(11) DEFAULT NULL COMMENT \'是否是自己发送 0:不是;1:是\', `create_time` datetime DEFAULT NULL COMMENT \'消息发送时间\', `content` text COMMENT \'消息格式【发信人id:内容】\', `talker` varchar(55) DEFAULT NULL COMMENT \'聊天对象。群聊,则是群id(xxx@chatroom);一对一,聊天对象的唯一标识。\', PRIMARY KEY (`msg_id`), KEY `index_chat_id` (`talker`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
注意⚠️ content:不是自己发送的消息,并且是群聊,才会带有发信人id标记。
msg_id在同一个账户切换了设备后产生的msg_id可能是重复的,所以在聊天记录存储在server端时需要注意到这一点。
#联系人表
CREATE TABLE `recontact` ( `username` varchar(45) NOT NULL COMMENT \'联系人唯一标识\', `nickname` varchar(45) DEFAULT NULL COMMENT \'联系人昵称\', `remark` varchar(45) DEFAULT NULL COMMENT \'备注名称\', `avatar` varchar(200) DEFAULT NULL COMMENT \'联系人头像地址\', `is_friend` varchar(45) DEFAULT NULL COMMENT \'是否是好友。1,3 好友 4;群里非好友\', PRIMARY KEY (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=\'联系人,非好友\';
联系人表存储了好友以及非好友。
#群组表
CREATE TABLE `chat_room` ( `chat_room_name` varchar(30) CHARACTER SET utf8mb4 NOT NULL, `member_list` text CHARACTER SET utf8mb4 COMMENT \'群组成员id列表,分号分割。a53255001;nan1242;jiabailo002\', `display_name_list` text CHARACTER SET utf8mb4 COMMENT \'群成员昵称列表【中文顿号分割】海、二、老僧、刘伟、齐彬、毛、Echo、曹\', `room_owner` varchar(45) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT \'群主id\', `self_display_name` varchar(45) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT \'自己在群里的自定义群昵称\', `chat_room_nick` varchar(45) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT \'群昵称,没有自定义群昵称则从display_name中截取20个字符作为群昵称。\', PRIMARY KEY (`chat_room_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT=\'群组\';
chat_room_name为群id,格式为xxx@chatroom
#用户表
CREATE TABLE `users` ( `id` varchar(45) NOT NULL COMMENT \'用户id\', `nickname` varchar(45) DEFAULT NULL, `email` varchar(45) DEFAULT NULL, `sign` varchar(200) DEFAULT NULL COMMENT \'签名\', `city` varchar(45) DEFAULT NULL, `provincial` varchar(45) DEFAULT NULL COMMENT \'省份\', `avatar_url` varchar(500) DEFAULT NULL COMMENT \'头像\', `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`), KEY `index_updated_at` (`updated_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=\'用户\';
QQ技术交流群:282575808
--------------------------------------
声明: 原创文章,未经允许,禁止转载!
--------------------------------------