关于聊天记录数据库表结构设计

时间:2024-02-22 22:31:58

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

--------------------------------------

声明: 原创文章,未经允许,禁止转载!

--------------------------------------