18.2 数据库
即时通信项目是服务器资源消耗较大,数据库操作较多的项目,所以数据库管理系统应该选择高效率的,本章采用的是SQL Server 2005。Web QQ的数据实体主要包括:用户即聊天者,群也可以称为圈子,消息包括两人的聊天消息和群消息。下面分别加以详细介绍。
18.2.1 聊天用户
聊天用户主要包括两个表:用户详细信息表和用户之间的关系表(即好友表)。
1.用户详细信息表userInfo
用户详细信息表主要记录聊天用户个人的一些信息,如账号、密码、姓名、性别、电话、邮箱、公司、部门、银行账号等。此外,还包括一些特殊字段。
· 字段Willtime(上线过期时间):根据这个时间来判断一个用户是否在线。
· 字段Ifshowonline(是否显示在线状态):值为0表示隐身,值为1表示在线。其中在线和隐身的概念和腾讯的QQ完全相同。
· 字段CanAddFriend(是否可以自动被加为好友):该字段值为1表示可以直接加为好友,值为0时表示自己被加为好友时需要确认,值为2表示不允许任何人把自己加为好友。
表18-2显示了用户详细信息表userInfo的具体字段设计。
表18-2 表userInfo的字段设计
|
字 段 名 |
字 段 类 型 |
字 段 说 明 |
|
userId |
int |
自增,关键字 |
|
userName |
Nvarvhar(50) |
账号 |
|
Head |
Nvarchar(50) |
头像,存放头像的名称 |
|
Willtime |
Datetime |
保持上线状态的过期时间。当用户登录后,这个时间值定期更新 |
|
Canaddfriend |
Int |
是否可以自动被加为好友,1可以直接被加、0需要确认、2不允许任何人加自己为好友 |
|
realname |
Nvarchar(50) |
真实姓名 |
|
Tel |
Nvarchar(50) |
电话 |
|
|
Nvarchar(50) |
电子邮件地址 |
|
Company |
Nvarchar(50) |
公司名称 |
|
Department |
Nvarchar(50) |
所在的部门名称 |
续表
|
字 段 名 |
字 段 类 型 |
字 段 说 明 |
|
Jobclass |
Nvarchar(50) |
所属行业 |
|
Companyaddr |
Nvarchar(250) |
公司地址 |
|
Bankcode |
Nvarchar(50) |
银行账号 |
|
Sex |
Nchar(10) |
性别 |
|
Birthday |
Datetime |
出生日期 |
|
Jobposition |
Nvarchar(50) |
职务 |
|
Notes |
Nvarchar(250) |
备注 |
|
Bank |
Nvarchar(50) |
开户银行 |
|
Ifshowonline |
Int |
是否显示上线状态。1在线、0隐身 |
|
pass |
Nvarchar(100) |
密码 |
2.朋友列表friend
由于本系统具有好友、黑名单、陌生人的设计,所以必须在数据库中保存这些关系人信息。表friend中根据type类型来区分好友、黑名单和陌生人。0表示好友,1表示黑名单,2表示陌生人。表friend的具体字段设计如表18-3所示。
表18-3 表friend的字段设计
|
字 段 名 |
字 段 类 型 |
字 段 说 明 |
|
Id |
int |
自增,关键字 |
|
Type |
Int |
类型。0表示好友,1表示黑名单,2表示陌生人 |
|
Userid |
Int |
自己的用户id |
|
Othername |
Nvarchar(100) |
关系人的用户账号 |
|
Time |
Datetime |
建立这种关系的时间 |
|
Notes |
Nvarchar(500) |
备注 |
18.2.2 群
和群相关的表也主要有两个:群信息表和群用户表,分别用来存储群的详细信息和群内的用户。
1.群表group
群表group包括的信息有:群的名称、建立这个群的用户、建立群的时间、备注等。表group的字段设计如表18-4所示。
表18-4 表group的字段设计
|
字 段 名 |
字 段 类 型 |
字 段 说 明 |
|
Id |
Int |
自增,关键字 |
|
Name |
Nvarvhar(250) |
群的名称 |
|
Ownername |
Nvarchar(100) |
创建者 |
|
Datetime |
Datetime |
创建群的时间 |
|
Notes |
Nvarchar(250) |
备注 |
2.群用户表group_user
群用户表group_user主要是用来记录群内用户的,它包括群的Id、用户账号、用户加入群的时间等字段。表group_user的字段设计如表18-5所示。
表18-5 表group_user的字段设计
|
字 段 名 |
字 段 类 型 |
字 段 说 明 |
|
Id |
Int |
自增,关键字 |
|
Groupid |
Int |
群的Id |
|
Username |
Nvarchar(150) |
用户账号 |
|
Time |
Datetime |
加入这个群的时间 |
18.2.3 消息
即时通信要处理的核心数据就是消息,为了处理方便,本章中把消息分为两种:两人聊天的消息和群聊天的消息。
1.两人聊天消息表msg
两人聊天消息表msg中包括一种特殊消息:系统消息。系统消息是以账号qucha的名义向用户发送的消息。如某人被别人加为了好友,他就会收到一条qucha发送的系统消息。两人聊天的消息表msg包括的信息有:发送者账号、接收者账号、消息内容、发送时间、接收时间、是否已读(0表示已读,1表示未读)。表msg的字段设计如表18-6所示。
表18-6 表msg的字段设计
|
字 段 名 |
字 段 类 型 |
字 段 说 明 |
|
Id |
int |
自增,关键字 |
|
senderName |
Nvarvhar(50) |
消息发送者的账号 |
|
Receivername |
Nvarchar(50) |
消息接收者的账号 |
|
Msg |
Nvarchar(500) |
消息内容 |
续表
|
字 段 名 |
字 段 类 型 |
字 段 说 明 |
|
Sendtime |
Datetime |
消息发送时间 |
|
Ifread |
Int |
消息是否已读,0表示已读,1表示未读 |
|
receivetime |
Datetime |
接收消息的时间 |
2.群消息表groupmsg
群消息和两人聊天消息有些不同,所以在这里进行了单独设计。群消息表groupmsg存储的信息有:群Id、发送者账号、发送时间、消息内容。表groupmsg的字段设计如表18-7所示。
表18-7 表groupmsg的字段设计
|
字 段 名 |
字 段 类 型 |
字 段 说 明 |
|
Id |
Int |
自增,关键字 |
|
Groupid |
Int |
群的id |
|
Sendername |
Nvarchar(150) |
发送者账号 |
|
Sendtime |
Datetime |
发送时间 |
|
msg |
Nvarchar(500) |
消息内容 |







