1、微信数据库分析与设计1、需求分析微信作为当前的主要即时通讯工具之一,有着广泛的应用。其主要的功能是实现即时通信,这也是微信的核心功能。此外还有查看朋友圈动态、搜索好友、管理个人信息、建立用户自己的相册、收藏功能、摇一摇、搜索附近的人、购物、游戏等功能。此次对于微信平台的数据库设计主要对部分需要微信平台提供存储信息功能进行需求分析及设计。以下将对微信平台的主要需求做简要的分析并且根据分析做出数据流图使得对于微信平台数据库的设计有更好的理解。微信的通信主要包括与微信好友进行相互通信,这其中通信内容包括文字、语音、图片及视频。当用户订阅了公众号之后,会接收公众号发送的消息并且也可向公众号发信息或许其
2、提供的信息。微信通信功能的另一个主要方面是实现群聊。用户可以加入一个微信群进行群。另一方面用户也可以选择自己的联系人进行群聊。微信中通讯录实现了保存用户联系人的目的,并且订阅的公众号也保存于通讯录中,并且在通讯录中可以设定标签来为联系人分组。微信朋友圈保存好友发送的与朋友共享的消息,其内容可为文字、图片、视频。在朋友圈中可以设定权限使得不同权限的用户查看的内容不一样。摇一摇功能可以获取同一时刻一起摇动手机的用户,并且暂存于微信中。附近的人功能可以识别在一定范围内的微信用户,并且将获得的用户信息也暂存在微信中,对于识别附近的用户可以设定具体的条件来扫描。漂流瓶功能相当于随机的获取微信消息或者向微
3、信用户随机的发送消息。对于个人信息的编辑,用户可以根据自身需要编辑一些所需的个人信息。最后在微信用户个人信息中有相册和收藏记录用户的照片和收藏的文字语音等信息。以上是对微信的部分功能的需求分析,现根据以上需求对微信数据库画出数据流图:第 0 层 DFD:第 1 层 DFD:2、概念设计在第一步的需求分析中,我们了解了微信数据库平台设计中所需要的实体及需要存储的信息。在概念设计中将进一步明确数据库设计所需实体,实体所具有的属性及实体之间的关系。通过分析微信数据库平台所需实体主要有:用户信息、普通消息记录、公众号信息、公众号消息记录、微信群信息、群聊消息记录、收藏信息、相册、朋友圈信息、联系人信息
4、、附近人信息、漂流瓶信息、扫一扫信息、摇一摇信息。这些实体分别对应于微信功能的不同模块。在实现微信的通信功能主要是使用用户信息、普通消息记录、微信群信息、群聊消息记录和联系人信息这几个实体。在明确所需实体后根据实际需要对于每个实体设置符合实际情况的属性,每个属性对应了数据库中的具体属性。下图是根据对于微信数据库平台的需求分析做出的 CDM,通过此概念模型显示数据库之间各实体之间的相互关系及各个实体所具有的实际属性。 3、逻辑设计由以上概念设计模型,我们可以获得以下逻辑数据模型(LDM )。在 LDM 中对于 CDM 进行了进一步的细化和具体化,对其中的实体之间的关系在逻辑上进一步的进行了明确。
5、在此基础上我们获得更加具体能直接反映数据库涉及的无理数据模型(PDM )。通过 PDM 将具体显示数据库所需的表及其之间的关系。PDM 如下图所示:在 PDM 中显示了个表单之间的引用关系,其具体引用如下表:标间关系名称 父表格 子表格关注 用户信息 关注关注 公众号信息 关注发送 公众号信息 公众号消息记录发送/接收 用户信息 普通消息记录发送消息 用户信息 群聊消息记录收藏 用户信息 收藏信息查看 联系人信息 普通消息记录用户存放 用户信息 摇一摇信息用户所在群 用户信息 用户所在群用户所在群 微信群信息 用户所在群用户所属 用户信息 漂流瓶信息用户扫描获得 用户信息 扫一扫信息用户相册
6、用户信息 相册用户联系人 用户信息 联系人信息群聊天记录 微信群信息 群聊消息记录联系人相册 联系人信息 相册获取 用户信息 附近人信息本系统中使用的表单如下所示:1、用户信息表Name Data Type Length P(主键) F(外键) M(不可为空)用户 ID char(15) 15 X X昵称 char(20) 20 X头像 long binary二维码名片 long binary X我的地址 varchar(100) 100性别 char(5) 5 X地区 varchar(20) 20 X个性签名 varchar(500) 500登陆密码 varchar(20) 20 X2、普通
7、消息记录表Name Data Type Length P F M消息 ID char(20) 20 X X联系人 ID char(15) 15 X用户 ID char(15) 15 X内容 varchar(5000) 5,000 X发送时间 datetime X3、联系人表Name Data Type Length P F M朋友 ID char(20) 20 X X用户 ID char(15) 15 X备注名称 char(20) 20 X标签 varchar(20) 204、公众号信息表Name Data Type Length P F M公众号 ID char(20) 20 X X公众号名
8、称 char(40) 40 X5、公众号消息记录表Name Data Type Length P F M公众消息 ID char(20) 20 X X公众号 ID char(20) 20 X公众消息 varchar(5000) 5,000 X订阅者 varchar(8000) 8,000 X发送时间 timestamp X6、关注表Name Data Type Length P F M用户 ID char(15) 15 X X X公众号 ID char(20) 20 X X X7、微信群信息表Name Data Type Length P F M群 ID char(20) 20 X X群名称
9、char(20) 20 X群二维码 long binary X群成员 varchar(1000) 1,000 X8、用户所在群表Name Data Type Length P F M用户 ID char(15) 15 X X X群 ID char(20) 20 X X X9、群聊消息记录表Name Data Type Length P F M群聊消息 ID char(20) 20 X X群 ID char(20) 20 X发送人 char(20) 20 X发送时间 timestamp X内容 varchar(5000) 5,000 X10、相册表Name Data Type Length P
10、F M相册 ID char(20) 20 X X用户 ID char(15) 15 X联系人 ID char(20) 20 X存放时间 timestamp X内容 varchar(5000) 5,000 X11、收藏信息表Name Data Type Length P F M收藏 ID char(20) 20 X X用户 ID char(15) 15 X收藏时间 timestamp收藏内容 varchar(8000) 8,00012、附近人信息表Name Data Type Length P F M附近人 ID char(20) 20 X X用户 ID char(15) 15 X昵称 char
11、(20) 20 X距离 integer性别 char(5) 5地区 varchar(20) 20个性签名 varchar(500) 50013、摇一摇信息表Name Data Type Length P F M摇一摇信息ID char(20) 20 X X用户 ID char(15) 15 X时间 timestamp内容 varchar(5000) 5,00014、扫一扫信息表Name Data Type Length P F M扫一扫信息ID char(20) 20 X X用户 ID char(15) 15 X时间 timestamp内容 varchar(5000) 5,000 X15、漂流
12、瓶信息表Name Data Type Length P F M漂流瓶 ID char(20) 20 X X用户 ID char(15) 15 X内容 varchar(5000) 5,000 X对于微信数据库平台的逻辑分析,明确了在具体是实现时所需的表及其各个表之间的引用关系,在接下来的物理设计中将使用逻辑设计中的表在具体数据库实现微信数据库平台的设计。4、物理设计在此次物理实现微信数据库平台使用 SQL Server 2008。实现简单的微信平台的数据库,通过在数据库表中插入数据或查看数据来表现微信平台对信息的发送接收及查看。在此次物理实现是我们遵循 3NF。数据库设计如下图:1、向“用户信息
13、”表添加记录,模拟微信在线用户。此次添加三个用户作为模拟的微信用户。用户基本信息如下:2、我们选取“小 a”登陆微信,开始添加联系人。“联系人”表保存每个用户的联系人信息,这些联系人信息皆来自用户信息表。“小 a”的联系人如下表:此表的创建过程如下:3、普通用户发送消息时,消息内容将存储在“普通消息记录”表中,如现在“小 a”向“ 小 b”发送一条消息,然后 “小 b”再回复一条。“小 a”也向“小 c”发送一条消息。其中表中的外键约束和默认值如下:在”普通消息记录表”中也可以查询两个用户之间的聊天记录,如查询“小 a”和”小 b“之间的聊天记录:同样也可以在“普通消消息记录表”中实现删除消息
14、记录。在“普通消息记录”表中为了能使用户更快的查询自己的消息记录,这里创建了索引。4、“微信群信息”表中记录了所有用户创建的微信群的信息。由于在微信中群成员数量当前限制为 40 个,在本平台中我们设置为 4 个。并且每一个成员信息由外键引用自“用户信息”表。比如现在创建了两个个微信群如下:外键约束和非空约束如下:由于当用户创建了一个微信群后要在“用户所在群”表中显示出每个用户所在的群,因此需创建一个触发器。在此创建的 trigger 为“用户信息新增”。代码如下:5、“用户所在群”表存储了每个用户所在的群信。每个用户可根据此表查询所在群信息。当一个微信群被创建后在“用户所在群”表中将自动显示用
15、户所在群信息。6、“群聊消息记录表”记录了每个群的消息。也可以查询历史记录。比如在群“羽毛球部落”中的消息记录。为了使得用户在查询群历史消息时更加快速,创建索引。7、“公众号信息”表记录了所有公众号的信息。可以通过搜索公共号 ID 或名称来订阅公众号。8、“关注”表中,存储了每个用户订阅的公众号。9、“公众号消息记录”存储公众号为订阅者发送的消息。10、其余各表分别存储每个用户在微信中的信息,通过外键引用来确定每个表中各个用户的信息,其具体结构如下:以上即为微信数据库平台的简单的物理设计,在具体物理设计实现时根据具体需要对数据路平台的逻辑设计进行了部分修改,也更加具体化了数据库功能。本数据库只是简单的对微信平台数据库的实现,其中还存在许多不足和缺陷需进一步完善。最后,通过此次数据库的设计实现进一步熟悉了数据库相关的知识及数据库的设计和实现。