前言
在进行聊天室项目以前,我从来没有接触过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