聊天室——MYSQL建表
文章目录
- 前言
- 1. 用户数据表——UserData
- 2. 好友列表——FriendsList
- 3. 未读消息列表——OffLineMes
- 4. 群成员列表——GroupList
前言
在进行聊天室项目以前,我从来没有接触过mysql,但是mysql在聊天室的开发过程中起到了非常重要的作用;我们许多功能的实现都需要依靠数据库,毕竟我们的server不可能一直运行,有时一个功能实现的关键就在于数据表。
聊天室的建表我也是根据整体服务器的架构来进行
首先我们需要把每一个用户的基础信息记录下来,
1. 用户数据表——UserData
在聊天之前,我们需要先有好友列表,
2. 好友列表——FriendsList
关于好友列表,我们可以给每一个用户创建一个数据表,这个表的名字为这个用户的用户名"username"
其中的username表示好友或群的id,第二列的num表示有一些额外的含义,借助num可以帮助我们完成许多的其他的功能。
比如:0 代表被屏蔽消息的好友, 1 代表普通的好友, 2 代表这是一个群…
但是这种建表方法有一个很大的缺点,当注册的用户量很多的时候我们的数据库会变得很丑陋,那么为了避免这种情况,我们就需要修改建表的方式以及存储的思路。
通过这样的建表方式可以把互为好友关系的两个用户放到一行里,避免了每一个用户建一个表,第三列的type栏里依旧可以通过不同的数字来表示不同的属性。在检索好友列表时可以使用这样的语法:
select * from FriendsList where usera = "username" or userb = "username";
其他各种功能也可以依靠这个表来实现
3. 未读消息列表——OffLineMes
当好友列表已经创建好的时候,就可以输入好友的用户名开始聊天了。那么在聊天中,聊天记录的存储就需要一个数据表来记录,
如果对方处于离线状态的话,我们未被接收的消息应该存储到一个单独的表里,
在处理完这条未读消息之后,我们应该及时的将这条消息删除
4. 群成员列表——GroupList
与好友列表一样,我们可以为每一个群聊建一个数据表,用存放这个群的群成员。
这是最为直观的一种建表方式,我们可以很清晰的知道这个群组里都有哪些成员。但是数据库是用来存储数据的,而不会给用户去看,所以在数据量较小时,我们没有必要去考虑数据库复杂度的问题。而且与好友列表一样,当创建群聊的人数越来越多之后,整个数据库会变得非常的难看。
同样,第三列数据表示该username在groupname里的职位。
这样建表不仅数据库会变得很整洁,在实现一些后续功能时也会容易很多,而不用在各个数据表之间嵌套查询。
关于C语言操作MYSQL可以参考我的这篇博客:
https://blog.csdn.net/qq_51665789/article/details/119350338?spm=1001.2014.3001.5501
聊天室——MYSQL建表相关推荐
- mysql建表2个索引是啥意思_Mysql建表与索引使用规范详解
本篇文章是对Mysql建表和索引使用规范进行了详细的分析介绍,需要的朋友参考下 一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默 ...
- Python3 使用 pymysql 连接 MySQL 建表时出现 Warning3719 UTF8 警告
在学习 Python3 爬虫关系型数据库储存时,利用 pymysql 连接 MySQL 建表,测试用的代码如下,第一句 SQL 用于获取当前 MySQL 的版本信息,第二句 SQL 执行创建 spid ...
- mysql 建表时建立索引_mysql 分享建表和索引的几点规范
一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. ...
- 基于表的数据字典构造MySQL建表语句
表的数据字典格式如下: 如果手动写MySQL建表语句,确认麻烦,还不能保证书写一定正确. 写了个Perl脚本,可快速构造MySQL脚本语句. 脚本如下: #!/usr/bin/perl use str ...
- 总结MySQL建表、查询优化实用小技巧
MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些实用小技巧. 技巧一.数据表冗余记录添加时间与 ...
- mysql建表测试_总结MySQL建表、查询优化实用小技巧
MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些实用小技巧. 技巧一.数据表冗余记录添加时间与 ...
- MySQL建表(那些字段必须)命令详解
MySQL建表(那些字段必须)命令详解1. create table命令 强调:使用建表命令之前必须使用use命令选择表所在的数据库.create table命令的格式如下: create table ...
- MySql 建表出现的问题:[ERR] 1064 - You have an error in your SQL syntax; check the manual..........
使用 MySql 建表出现的问题 在使用 Navicat Premium 运行 sql 语句进行建表时,MySQL 报错如下: 建表语句: DROP DATABASE IF EXISTS javawe ...
- mysql建表auto_increment_mysql create table auto_increment
当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值 把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样.但不建议这样做,还是以插入NULL值为好. 如果 ...
- mysql建表是要注意什么问题_MySQL建表注意事项
1.建表规范 -- 数据库名丶表名,全部使用小写字母,使用"_"下划线连接且长度小于12,做到见名知意 2.建议使用 innodb 引擎,这也是MySQL的默认引擎 3.字段类型选 ...
最新文章
- Linux设置qt-android开发环境
- 基于VMware vSphere 5.0的服务器虚拟化实践(9)
- usermod命令的一些用法详解
- 【DS】排序算法之归并排序(Merge Sort)
- [ATF]-ATF的RT_SVC的详解(runtime service)
- 音视频技术开发周刊 77期
- 考研复习(8)-图的基本操作
- 小程序对实体行业转型有何影响?
- java毕业设计电影票网上订票系统Mybatis+系统+数据库+调试部署
- yum 报错:Another app is currently holding the yum lock; waiting for it to exit......
- DCDC BUCK芯片外围电路器件计算-包括Cin、Cout、L、f、cFF、等输出电容、电感计算、补偿电路计算
- 视频: 视频码率、分辨率、帧率、视频大小等
- VMWare 虚拟机网络共享给宿主机
- 王者荣耀最低战力查询-王者战区修改
- 标称型和数值型的区别
- Python中complex复数类型的简单介绍
- SecureCRTSecureFX(二):SecureCRTSecureFX的简单操作教程
- 105个多音字 汉字 鸿门宴上武松喝酒商店打烊王昭君载歌载舞麻将桌上和了炮弹薄利多销人参上学
- vue-router的addRoute方法实现权限控制
- 【第31篇】探索普通视觉Transformer Backbones用于物体检测
热门文章
- python中csv文件是什么_Python中的csv文件
- GD32f103ret6 使用HID,设备管理里,提示未知设备
- Blend混合模式 与 20余种颜色混合模式代码实现
- JavaEE面试注意事项
- C语言扫雷(可展开)
- stm32串口通信实验
- js 验证身份证格式
- 手把手教你进行Python网络爬虫中的Charles+Postern抓包
- JAVA中(PO,VO,TO,BO,DAO,POJO)分别是指什么
- vue项目启动时 chatroom@1.0.0 dev: `webpack-dev-server --inline --progress --config build/webpack.dev.c...