首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

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)

电话

E-mail

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)

消息内容