欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL数据表的设计

程序员文章站 2022-05-30 23:18:24
...

服务器端数据表的设计

首先就是要解决数据的问题,作为一个聊天系统,我们的服务器端肯定要有用户的信息,比如说账号,用户名,密码等。在登录的时候,我们可以查询这个表里面的信息对用户身份进行验证,在注册的时候,我们则可以往表里面去写入数据。
User表
MySQL数据表的设计

用户登录之后,首先就是进行聊天业务,我们必须要知道该用户的好友都有谁。在加好友时,我们就可以往这张表里面去写入信息并在一对一聊天时查询这里面的信息去看好友是否在线。
Friend表
MySQL数据表的设计

然后便是群组业务了,群组中我们需要有一个记录群组信息的表,方便我们创建群时往其中去写入数据。
AllGroup表
MySQL数据表的设计

同时群里面肯定是有群员的,我们就需要一个记录群成员的表,我们在加入群的时候,把用户id写入这个表。并且在发送群消息的时候查询这个表由服务器向这些成员转发消息。
GroupUser表
MySQL数据表的设计

我们的设计目的又要存储离线消息,这就涉及到离线消息发给谁,谁发的,发的什么三个问题,所以我们又需要一个新表来存储离线消息。这样我们一旦有离线消息便可以往这个表里面去写入数据。
OfflineMessage表
MySQL数据表的设计

创建表的语句

USE chat;

CREATE TABLE `user`
(
id INT AUTO_INCREMENT,
name VARCHAR(50) NOT NULL UNIQUE,
`password` VARCHAR(50) NOT NULL,
state ENUM('online','offline') DEFAULT'offline',
PRIMARY KEY(id)
)ENGINE=INNODB;

CREATE TABLE friend
(
`userid` INT NOT NULL,
`friendid` INT NOT NULL,
PRIMARY KEY(`userid`,`friendid`)
)ENGINE=INNODB;

CREATE TABLE allgroup
(
id INT AUTO_INCREMENT,
groupame VARCHAR(50) NOT NULL UNIQUE,
groupdesc VARCHAR(200) DEFAULT'',
PRIMARY KEY(id)
)ENGINE=INNODB;

CREATE TABLE groupuser
(
groupid INT NOT NULL,
userid INT NOT NULL,
groupprole enum('creator','normal') DEFAULT'normal',
PRIMARY KEY(groupid,userid)
)ENGINE=INNODB;

CREATE TABLE offlinemessage
(
userid INT NOT NULL,
message VARCHAR(500) NOT NULL
)ENGINE=INNODB;