评论区数据库设计 | 青训营笔记

103 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

在大作业中有聊天的功能,我们需要设计一张表来记录用户的聊天记录,在此介绍一种传统的,包含群聊功能的数据库设计。

1. 概述

我们首先表结构设计针对单个用户,然后拓展到n个用用户记录的存储。这里会用msql数据库给出数据库表脚本作为演示,但是现实生产环境应该是在APP端生成sqlite数据库文件,把sqlite文件上传到server端作为聊天记录存储。

我们一共会包含有:联系人表、群组表、会话表、用户表、聊天记录表等。

2. 数据库设计

聊天记录表

CREATE TABLE `message` (
  `msg_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '消息id,自增长',
  `msg_type` int(11) DEFAULT NULL COMMENT '类型 1:文字;47:emoji;43:音频,
  `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 '聊天对象',
  PRIMARY KEY (`msg_id`),
  KEY `index_chat_id` (`talker`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

联系人表

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列表',
  `display_name_list` text CHARACTER SET utf8mb4 COMMENT '群成员昵称列表,
  `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='群组';