IM系统数据库设计 前端逻辑处理
数据库表
一下默认大家都有的字段就没写了,locked,create_time,update_time就没写了
user 表
id 等,没什么好说的
friend_group 表
好友分组列表:
id,user_id(是谁的好友列表),group_name(组名),group_type(分组类型,是否为默认分组)
默认分组无法删除,用户新建一个分组,就添加一条记录,主要区分就是user_id和group_name
friend 表
好友表,记录好友关系。主要字段:
id,user_id,friend_id,friend_group_id(好友分组id)
friend_request_record 表
好友申请表:
id,from_id(对应user_id),to_id(对应user_id),intro(简介), state(未读,已读,拒绝,接受)
chat_reocrd_type 表
消息类型表
文件,音频,还是其它,因为前端渲染的时候要知道数据是什么类型,去做相应的渲染
group 表
群组表:
id,user_id,group_name,avatarUrl,group_group_id(可选的,这其实和friend_group_id,是为了对群组分组,如果有该需求,你要新建一个group_group表,表示群组分组)
group_member 表
群组成员表:
id,member_id(对于user_id),group_id(group表的id)
chat_reocrd 表
聊天记录表啦。因为有些信息离线要接收,没有数据库表根本处理不了。
字段主要id,user_id, friend_id(好友信息),group_id(属于那个群),chat_reocrd_type_id,readed(是否已读信息),content(内容)
拓展
还是可以加很多表的,比如群聊申请加入表,群组分组表,空间消息文章消息,系统消息表(可能做一些推送)
前端逻辑
用户列表及其分组
已知数据 user_id
根据friend 和 friend_group 和 直接查表获取所有用户的分组,及其分组的好友
群组列表
已知数据 user_id
根据 group 和 user_id 和 直接查表获取所有群组
群组成员
已知数据 group_id
根据 group_member 和 group_id 和 直接查表获取所有群组成员
对话消息记录
- 本地存储
- 用户自己发送的聊天消息要存储在本地
- 用户实时侦听到的要存储在本地
- 用户和好友聊天记录快照(QQ的消息列表,它不是数据库信息,当然也可以从数据库获取)
- 向用户提交的好友请求信息
- 数据库获取
- 用户本地聊天记录不够,用户点击获取聊天记录
- 存储在数据库的用户未读的信息要在用户一上线就交给用户(拿到数据,知道未读消息,渲染红点,和聊天记录的快照 => 要查询本地存储的对比)
- 存储在数据库的用户未读的请求好友信息,渲染好友请求,请求状态
交互
消息类型
login
是否上线
outLogin
是否下线,注意,为了不浪费服务器资源,最好做心电图机制
OneToOne
一对一聊天记录
ManyToMany
一对一聊天记录
request_friend
请求添加好友
request_group
请求添加群组
总结
数据库其实不难,对于一个近p2p来说,它对前端的要求显然不同于CS那么简单的获取数据渲染,它必须C,S都了解怎么去做。单真正做的时候发现前端渲染逻辑可能较复杂。
IM系统数据库设计 前端逻辑处理相关推荐
- 点餐系统mysql设计,外卖点餐系统数据库设计.doc
外卖点餐系统数据库设计.doc 外卖点餐系统数据库设计 需求分析: 现要开发外卖点餐系统.经过可行性分析和初步的需求调查,确定了系统的功能边界,该系统应能完成下面的功能: 订餐管理. (2)菜单管理. ...
- 电子商务系统数据库设计(一)
数据库基本操作 最近学数据库数据库学得飞起,学数据库当然少不了学sql,老师讲得很多很系统,但是我相信很多初学者不可能在短短40分钟之内把所有老师将的课程都吸收,个人认为,数据库的精髓在于多实践,多练 ...
- 点菜系统数据库设计说明书
1引言. 2 1.1编写目的. 2 1.2 定义. 2 1.3参考资料. 2 2需求分析. 3 2 .1数据字典. 3 2 .2数据流图. 3 3结构设计. 3 3.1概念结构设计. 3 3.2逻辑结 ...
- 进销存系统数据库设计
进销存系统数据库设计报告 产品管理功能 1 产品类型基本信息表:(提供增删改) 字段名 类型 宽度 主键否 外键否 类型ID 整数 Yes No 类型 ...
- 博客-评论系统数据库设计及实现
前言 最近在开发一个小型个人博客,在数据库设计方面遇到了一些问题,这里做一个记录. 我设计的博客包含博客的基本信息,包括标题.内容等,此外还包括博客的标签.类型和评论. 实际效果如下: 设计 一条博客 ...
- Blog博客系统数据库设计
2019独角兽企业重金招聘Python工程师标准>>> 项目--Blog博客系统数据库设计:http://blog.163.com/sean_zwx/blog/static/1690 ...
- cs结构航空订票系统java_VC++航空订票系统数据库设计-课程设计
VC++航空订票系统数据库设计 目录 一 绪论 1 二 需求分析 1 三 概要设计 2 四 详细设计 4 五 调试分析 19 六 测试结果 20 七 用户使用说明 29 小结 29 参考文献 30 ...
- 简易投票系统数据库设计
介绍 简易版的投票系统数据库设计. 发现设计有误请在评论区指出,谢谢! 一.截图 项目表 选项表 投票表 二.代码 票表 CREATE TABLE `as_ticket` (`id` varchar( ...
- 数据库逻辑删除的sql语句_SQL查询优化的数据库设计和逻辑断言
数据库逻辑删除的sql语句 Database design and Logical Asseveration play a vital role in database performance and ...
最新文章
- win 修改hosts文件权限不够,解决办法
- nodejs中服务器返回响应信息中的中文乱码
- 武汉网络推广介绍如何通过简化标题来提升主关键词排名?
- JZOJ 5305. 【NOIP2017提高A组模拟8.18】C
- 单据打印_Excel多功能进销存套表,自动库存单据,查询打印一键操作
- lvs负载均衡—ldirectord(DR模式的健康检查)
- UE3 后期处理编辑器用户指南
- Spring Cloud OAuth2 实现用户认证及单点登录
- Python使用MongoDB简记
- 基于CloudStack+KVM的企业私有云的实现
- 对JS中变量的浅微认识
- ddpush java_DDPush-任意门消息推送-开源推送服务器-推送-消息推送-信息推送-物联网推送...
- java里面怎么生成备注时间_Android studio 创建java文件时 注解显示作者、日期、时间...
- Linux命令--arp--使用/实例
- 三分钟带你学会修改VS的默认对齐数
- GSE184854 ccr2敲除小鼠和wt小鼠merge到一起之后,对ccr和wt组别进行harmony ,大致分为上皮 内皮 髓系 淋巴系 ,取髓系,分为dc 单核monocyte 巨噬细胞,取巨噬
- MVC 、MVP、MVVM
- Keras CIFAR-10彩色图像物体识别 卷积神经网络
- java实现.费诺编码_香农费诺编码的matlab实现.doc
- linux音频服务器,在Ubuntu Linux上配置MPD音乐服务器