数据库表

一下默认大家都有的字段就没写了,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系统数据库设计 前端逻辑处理相关推荐

  1. 点餐系统mysql设计,外卖点餐系统数据库设计.doc

    外卖点餐系统数据库设计.doc 外卖点餐系统数据库设计 需求分析: 现要开发外卖点餐系统.经过可行性分析和初步的需求调查,确定了系统的功能边界,该系统应能完成下面的功能: 订餐管理. (2)菜单管理. ...

  2. 电子商务系统数据库设计(一)

    数据库基本操作 最近学数据库数据库学得飞起,学数据库当然少不了学sql,老师讲得很多很系统,但是我相信很多初学者不可能在短短40分钟之内把所有老师将的课程都吸收,个人认为,数据库的精髓在于多实践,多练 ...

  3. 点菜系统数据库设计说明书

    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逻辑结 ...

  4. 进销存系统数据库设计

    进销存系统数据库设计报告 产品管理功能 1 产品类型基本信息表:(提供增删改) 字段名    类型    宽度    主键否    外键否 类型ID    整数        Yes    No 类型 ...

  5. 博客-评论系统数据库设计及实现

    前言 最近在开发一个小型个人博客,在数据库设计方面遇到了一些问题,这里做一个记录. 我设计的博客包含博客的基本信息,包括标题.内容等,此外还包括博客的标签.类型和评论. 实际效果如下: 设计 一条博客 ...

  6. Blog博客系统数据库设计

    2019独角兽企业重金招聘Python工程师标准>>> 项目--Blog博客系统数据库设计:http://blog.163.com/sean_zwx/blog/static/1690 ...

  7. cs结构航空订票系统java_VC++航空订票系统数据库设计-课程设计

    VC++航空订票系统数据库设计 目录 一  绪论 1 二 需求分析 1 三 概要设计 2 四 详细设计 4 五 调试分析 19 六 测试结果 20 七 用户使用说明 29 小结 29 参考文献 30 ...

  8. 简易投票系统数据库设计

    介绍 简易版的投票系统数据库设计. 发现设计有误请在评论区指出,谢谢! 一.截图 项目表 选项表 投票表 二.代码 票表 CREATE TABLE `as_ticket` (`id` varchar( ...

  9. 数据库逻辑删除的sql语句_SQL查询优化的数据库设计和逻辑断言

    数据库逻辑删除的sql语句 Database design and Logical Asseveration play a vital role in database performance and ...

最新文章

  1. win 修改hosts文件权限不够,解决办法
  2. nodejs中服务器返回响应信息中的中文乱码
  3. 武汉网络推广介绍如何通过简化标题来提升主关键词排名?
  4. JZOJ 5305. 【NOIP2017提高A组模拟8.18】C
  5. 单据打印_Excel多功能进销存套表,自动库存单据,查询打印一键操作
  6. lvs负载均衡—ldirectord(DR模式的健康检查)
  7. UE3 后期处理编辑器用户指南
  8. Spring Cloud OAuth2 实现用户认证及单点登录
  9. Python使用MongoDB简记
  10. 基于CloudStack+KVM的企业私有云的实现
  11. 对JS中变量的浅微认识
  12. ddpush java_DDPush-任意门消息推送-开源推送服务器-推送-消息推送-信息推送-物联网推送...
  13. java里面怎么生成备注时间_Android studio 创建java文件时 注解显示作者、日期、时间...
  14. Linux命令--arp--使用/实例
  15. 三分钟带你学会修改VS的默认对齐数
  16. GSE184854 ccr2敲除小鼠和wt小鼠merge到一起之后,对ccr和wt组别进行harmony ,大致分为上皮 内皮 髓系 淋巴系 ,取髓系,分为dc 单核monocyte 巨噬细胞,取巨噬
  17. MVC 、MVP、MVVM
  18. Keras CIFAR-10彩色图像物体识别 卷积神经网络
  19. java实现.费诺编码_香农费诺编码的matlab实现.doc
  20. linux音频服务器,在Ubuntu Linux上配置MPD音乐服务器

热门文章

  1. amazon账号关联|我做了这些不在关联了
  2. C语言每日一练---移动数组中的零元素
  3. 笔记本的网络出现红叉,网络连接不上,网络不可用
  4. ocp12c认证通过
  5. Box2D 中文手册
  6. Python之qq自动发消息
  7. 代码审计--12--源代码审计思路(上)
  8. 无缝轮播图无缝轮播图
  9. 大脑--物质与意识之综合体,是物质有双重现象(物性与灵性)的实证
  10. 【安全】靶场实战-通过MS16-032提权