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

Posted 伯牙绝音

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于聊天记录数据库表结构设计相关的知识,希望对你有一定的参考价值。

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([email protected]);一对一,聊天对象的唯一标识。,
  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,格式为[email protected]

#用户表

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=用户;

 

 

 

 

以上是关于关于聊天记录数据库表结构设计的主要内容,如果未能解决你的问题,请参考以下文章

关于侧边导航菜单和片段的一般设计问题

关于电商网站数据库的设计有啥好的建议?

如何使用IdentityServer3进行登录吗

数据结构_关于顺序表的深入思考

数据结构_关于顺序表的深入思考

数据结构_关于顺序表的深入思考