这是我参与「第五届青训营 」伴学笔记创作活动的第 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='群组';