《微信数据库分析与设计.docx》由会员分享,可在线阅读,更多相关《微信数据库分析与设计.docx(21页珍藏版)》请在三一办公上搜索。
1、微信数据库分析与设计一、需求分析微信作为当前的主要即时通讯工具之一,有着广泛的应用。其主要的功能是 实现即时通信,这也是微信的核心功能。此外还有查看朋友圈动态、搜索好友、 管理个人信息、建立用户自己的相册、收藏功能、摇一摇、搜索附近的人、购物、 游戏等功能。此次对于微信平台的数据库设计主要对部分需要微信平台提供存储 信息功能进行需求分析及设计。以下将对微信平台的主要需求做简要的分析并且 根据分析做出数据流图使得对于微信平台数据库的设计有更好的理解。微信的通信主要包括与微信好友进行相互通信,这其中通信内容包括文字、 语音、图片及视频。当用户订阅了公众号之后,会接收公众号发送的消息并且也 可向公众
2、号发信息或许其提供的信息。微信通信功能的另一个主要方面是实现群聊。用户可以加入一个微信群进行 群。另一方面用户也可以选择自己的联系人进行群聊。微信中通讯录实现了保存用户联系人的目的,并且订阅的公众号也保存于通 讯录中,并且在通讯录中可以设定标签来为联系人分组。微信朋友圈保存好友发送的与朋友共享的消息,其内容可为文字、图片、视 频。在朋友圈中可以设定权限使得不同权限的用户查看的内容不一样。摇一摇功能可以获取同一时刻一起摇动手机的用户,并且暂存于微信中。附近的人功能可以识别在一定范围内的微信用户,并且将获得的用户信息也 暂存在微信中,对于识别附近的用户可以设定具体的条件来扫描。漂流瓶功能相当于随机
3、的获取微信消息或者向微信用户随机的发送消息。对于个人信息的编辑,用户可以根据自身需要编辑一些所需的个人信息。最后在微信用户个人信息中有相册和收藏记录用户的照片和收藏的文字语音等信息。以上是对微信的部分功能的需求分析,现根据以上需求对微信数据库画出数据流图:第0层DFD:序敢消息:DFD64 茬用诸息i = = j.馅幻誉套弓左1响X弗倍岳登肴?史主专1苫日消息记景支件宝表彪7 三雄互22St_JLS10己一三f5BSiSS咸治浅送的枝幻B.H=2唳或窦百茗艾看相.见育房相卅I2渥号用息订E1楼亘19和查看个.h 吉皂)P3W螟粟ri辽段吉息二、概念设计在第一步的需求分析中,我们了解了微信数据库
4、平台设计中所需要的实体及 需要存储的信息。在概念设计中将进一步明确数据库设计所需实体,实体所具有 的属性及实体之间的关系。通过分析微信数据库平台所需实体主要有:用户信息、普通消息记录、公众 号信息、公众号消息记录、微信群信息、群聊消息记录、收藏信息、相册、朋友 圈信息、联系人信息、附近人信息、漂流瓶信息、扫一扫信息、摇一摇信息。这 些实体分别对应于微信功能的不同模块。在实现微信的通信功能主要是使用用户信息、普通消息记录、微信群信息、 群聊消息记录和联系人信息这几个实体。在明确所需实体后根据实际需要对于每个实体设置符合实际情况的属性,每 个属性对应了数据库中的具体属性。下图是根据对于微信数据库平
5、台的需求分析做出的CDM,通过此概念模型显 示数据库之间各实体之间的相互关系及各个实体所具有的实际属性。I-ttIm.K口舛雄,瞽汕料,鹭早四。琅陆-US-F-O我阵鼻有InhmrmlaersINla- chmrmcters20- valrnbF-&QDS Fit 8l-!-mE gsctw-N-e 就Eb-rtidlDDsct 胃 fies 口口$押一 3Cs世令-I-1tPAISQ1arB0*IMlg 作 3?OIHrEtcK【莒一 Q/II函 -rtegcr o tM olaraH* 一-s cljiRWJDOrr-mcnmraQErs201 口府IHM-仆如一口4J1U 命站怖参 隹H
6、罢曲nit.曲件E-kti-lclc-harIDIlfle-u 加14察A席 lr-jlrsielc-miuio n-T臼。SLe:Qmd Ql由血ftmrs 耳 01鱼血 ctmrsN.J wlar- uE。牛 DD ACTS(20 J vkr-uEni(50CIJ 宣一uEmcr 鱼KiflErs _ 20,.-.-笠曲廷.辿rilHlit支gm.MlD 舛版呻汁J舸律 最普 *日回坪 .-,沛排斗4olnrctETa _.2D 一ChanacteTi f 吉- ,力嘲 ,诲可回4苗冲讶片沛丁山帛住讯一.心已 ohuMciErs PCW ozrsreciE 修 旨s.MumDharEQmr
7、s l&onci Dsie 曲 T-rw三、逻辑设计由以上概念设计模型,我们可以获得以下逻辑数据模型(LDM)。I揪K:温洲网巾.llr. I#B咽一口lr!hllurllulftliri7 一lhjLc?oJlJTm Oibtz 二* 胃i&Aohguag _205.舛wJJ-Etarrn卬 口诂口 Hs _ 60 e*i ZK.riMTsOE.4 Hzi!i痔 A G=lxlr-9cief32= o 宣感动斜 &I-I3rr-E:d-的.aFLBI _os 口贵厩击吕口直twt孑IP?爵卷3自 r-.3b-E: d-的-aCLs (20 VBr-lacr-e ,.Bo-c-JEEE-e-W
8、FMCLLrlzr+en us.DkJbs 眼 Tim”arDEnaEuallrf _pcelE 最-.-卓王亚必以壬/ 一曲nH-H 一mej 口目。-&.Z!目varffirT二 E 口反口亲50010-FTP T-_JSgarDSI r-而 _史.luclJ |师3肝.K 一G史Ms 宏9 博tt #,HE:.e-&-Brsd.g-.= $aos 旬N E-PE p gkJruAflp-20Flilw曲anB.zlurug4gM懂屋睥illvrisbi由 di 理.gcterscjonh-BrBBJers20 .bHudhn- u;.5 - 快rDJ*t 一录 I?Q-sfissoo E
9、KM 口幻,匕|=|J0Js翔牌/田r.llT-箪讪称七.评nt瓶* e* 0 V 聃痹月而 南归蒲P 曲 -bHKMhnu;.5 - 玲由Ms (20 .早痴.由Heu5- cb.D!:lAlnaIT一II93Qclnn号-S 莺ItaCTfFl_a函ff-舟*.恨 金一Iollll-TiaIBIcm.-s rzc Mffl.frr卯 夺耍色!4$【20* wn/ft* _m*E5 d 诉即.WBrigftdTBJBCtEnJioDrtfe*出伸 B 口h Mslisn!b3s 口h US-K 国 c-rrJdunrinahD.nN MPA r-TraO1EJI 国 mtgctlmaciel
10、u.M T&rable: ns.uo.s50-02“宜sble: d-IEUdsfJ-=05在LDM中对于CDM进行了进一步的细化和具体化,对其中的实体之间的关系在逻辑上 进一步的进行了明确。在此基础上我们获得更加具体能直接反映数据库涉及的无理数据模型(PDM)。通过PDM将具体显示数据库所需的表及其之间的关系。PDM如下图所示:君一莎专患最一端株以心口 hM|W髀:脸巨户I口 ohar(15)司心吨叵tim*5-1anp击驾aruhar|5XiD)扫一拒气思拦一扫笔as脂暇叫及.用户ID七膈r15)时间timsslarrip& 咨varDhar(5OM)二扫一扫芝虐-月户疙括色导 逐户竺琼注
11、玄IB巾费斯5*祠户 ID char(15)对咨 warkarfSKO)片WAIBeKa倒如同 PID dia-(15) 走存 曲对) E 靠 intjpr 兰刍 da-(5j AR varhar?D) 伊兰筌莅 varthar(5DO:口芝一墙俱史一臣户样若L臣户蜡尽卅一用户兰壬芸或性有Z卜兰N加倒 dia伽 ksnjg bhary kERg bharydiafSlVSrtKar(20) W3rthar(5O0fi warliar(20).色登吾祠尸国色吾_吊尸汽柞台 ID tLSJlZ)12用 0 ID shardBJi款疚.kID七心(/岸汽汁句limesfemp K 字 varDhar
12、(5OM)也史三季废或心二liarli页初用户 ID oliarf15快裁咛削limeEtanp快蔽方其m时larUDXXft誓成涔愚花亲湾 W IDuf科5%底更人10山州:2仍壬心用户 IB char(15慕* 人di=r(2-3)宾任人 ch=r(S3)由 $ srhar(5养.M.啊血但|耳注名若吊矶H虫区srDbar(20)伊性亩 urMHrjsOS廿箜varthar(2a).二耳书.伉史就M混消幻由京云并Mil。Cha 例IDcha15)盼房理由常如2仍曳冬kchsJ窦至汁闻trnestinTp由3rchar(5M0)L肆耳同忌呼.示王用里_月尸气*1乒睥湾思沮星一宇鼻天史素_檬竺
13、专兰5号用邑记长&舟i湾 芭IDgn削”芯众号 IDcwinO)&2象送色会号杳咨讪3例公:众部 -wairch3f5DMtj 闻者varch(1MO)妄王村 Mltins lam?在PDM中显示了个表单之间的引用关系,其具体引用如下表:标间关系名称父表格子表格关注用户信息关注关注公众号信息关注发送公众号信息公众号消息记录发送/接收用户信息普通消息记录发送消息用户信息群聊消息记录收藏用户信息收藏信息查看联系人信息普通消息记录用户存放用户信息摇一摇信息用户所在群用户信息用户所在群用户所在群微信群信息用户所在群用户所属用户信息漂流瓶信息用户扫描获得用户信息扫一扫信息用户相册用户信息相册用户联系人用
14、户信息联系人信息群聊天记录微信群信息群聊消息记录联系人相册联系人信息相册获取用户信息附近人信息本系统中使用的表单如下所示:1、用户信息表NameData TypeLengthP (主键)F(外键)M (不可为空)用户IDchar(15)15XX昵称char(20)20X头像long binary二维码名片long binaryX我的地址varchar(100)100性别char(5)5X地区varchar(20)20X个性签名varchar(500)500登陆密码varchar(20)20X2、普通消息记录表NameData TypeLengthPFM消息IDchar(20)20XX联系人ID
15、char(15)15X用户IDchar(15)15X内容varchar(5000)5,000X发送时间datetimeX3、联系人表NameData TypeLengthPFM朋友IDchar(20)20XX用户IDchar(15)15X备注名称char(20)20X标签varchar(20)204、公众号信息表NameData TypeLengthPFM公众号IDchar(20)20XX公众号名称char(40)40X5、公众号消息记录表NameData TypeLengthPFM公众消息IDchar(20)20XX公众号IDchar(20)20X公众消息varchar(5000)5,000
16、X订阅者varchar(8000)8,000X发送时间timestampX6、关注表NameData TypeLengthPFM用户IDchar(15)15XXX公众号IDchar(20)20XXX7、微信群信息表NameData TypeLengthPFM群IDchar(20)20XX群名称char(20)20X群二维码long binaryX群成员varchar(1000)1,000X8、用户所在群表NameData TypeLengthPFM用户IDchar(15)15XXX群IDchar(20)20XXX9、群聊消息记录表NameData TypeLengthPFM群聊消息IDchar
17、(20)20XX群IDchar(20)20X发送人char(20)20X发送时间timestampX内容varchar(5000)5,000X10、相册表NameData TypeLengthPFM相册IDchar(20)20XX用户IDchar(15)15X联系人IDchar(20)20X存放时间timestampX内容varchar(5000)5,000X11、收藏信息表NameData TypeLengthPFM收藏IDchar(20)20XX用户IDchar(15)15X收藏时间timestamp收藏内容varchar(8000)8,00012、附近人信息表NameData TypeL
18、engthPFM附近人IDchar(20)20XX用户IDchar(15)15X昵称char(20)20X距离integer性别char(5)5地区varchar(20)20个性签名varchar(500)50013、摇一摇信息表NameData TypeLengthPFM摇一摇信息 IDchar(20)20XX用户IDchar(15)15X时间timestamp内容varchar(5000)5,00014、扫扫信息NameData TypeLengthPFM扫一扫信息IDchar(20)20XX用户IDchar(15)15X时间timestamp内容varchar(5000)5,000X15
19、、漂流瓶信息表NameData TypeLengthPFM漂流瓶IDchar(20)20XX用户IDchar(15)15X内容varchar(5000)5,000X对于微信数据库平台的逻辑分析,明确了在具体是实现时所需的表及其各个 表之间的引用关系,在接下来的物理设计中将使用逻辑设计中的表在具体数据库 实现微信数据库平台的设计。四、物理设计在此次物理实现微信数据库平台使用SQL Server 2008。实现简单的微信平台 的数据库,通过在数据库表中插入数据或查看数据来表现微信平台对信息的发送 接收及查看。在此次物理实现是我们遵循3NF。数 据 库 设 计 如 下 图 : u微信平台 口索据库矢
20、美囹日r表 j瞄,附近人信息 m 瞄,公众就b记录0 口 dbc?,公众与信息s m前。,关注0 J dbo.MAS二d bo,衡甫信息0 J 6反,普通潸皂记录s m 前群聊酒皂传0 J dbo,扫Tm信息(3二日应,收曲信息0 N dba微信群信息S m cd be相册O _J dbc?推一控信息(3二d应,用户所在畚E)dba用户信息 口视图1、向“用户信息”表添加记录,模拟微信在线用户。此次添加三个用户作为模 拟的微信用户。用户基本信息如下:0 _J dbci,用户信息日口列f 用户【DPK chsrflS, not null)J况称血r(20 not null)国头蟆binary,n
21、ull囿二名片 CbinaryCl, not null)FI!我的地址varchar(lOO). null图性别(由吕心),not null)E 地区(varchar(20), not null)司 个性签名(varchar(500). null)图 登陆密码(varchar(20), not null)2、我们选取“小a”登陆微信,开始添加联系人。“联系人”表保存每个用户 的联系人信息,这些联系人信息皆来自用户信息表。“小a”的联系人如下表:此表的创建过程如下:arczrte Table 联系人 1 朋友工口 char 15net nullf日户 ZD ciiar 15:uc r.11,k项
22、朋友H,用白HD】,ey耕更I。】rmfEEKK 如o.月户与屈 荒I H : 口 key (Jt IE) referenaes dba.用户桔启 用户邙 1雨备注名=har 3fl) r 标签 varchar 2C aonstzaxnt pkl pziinaiy constraint fle也迥.百迫:母免己芸 all consLraLut xkl Cozeicrzi Hsy 联系,、工:D reterezices 也:.用户值,息.i用户工D aAter table dbo.普通消点记亲 add canstri= int fk4 fcraign k=y (piD) ref-rences d
23、bo.用户桔息:用户 Walter cab-le dbr:、晋通辑息记录 add 茨送时间 dfitrtin.e rac null default ereedate(在”普通消息记录表”中也可以查询两个用户之间的聊天记录,如查询“小a”和” 小 b “之 间 的 聊 天 记 录:InCQQQLrf QQQ2)iEelec-t庆J/发送时艮fzQiQ藏思通51息记录 -where 联系人工口 in ( 1 QQQLr f r QQQ2 r : and ffipIDrrr四登发谖时间亟话丢新殛成2014)5-1 11:35:32.W苛征,示车竦旬员-I:部:疗网同样也可以在“普通消消息记录表”中实
24、现删除消息记录。在“普通消息记录”表中为了能使用户更快的查询自己的消息记录,这里创建 了索引。creite m加w用户快速查询记录s di.普通消息记录,用户工4、“微信群信息”表中记录了所有用户创建的微信群的信息。由于在微信中群 成员数量当前限制为40个,在本平台中我们设置为4个。并且每一个成员信息 由外键引用自“用户信息”表。比如现在创建了两个个微信群如下:微信爵信息日力列E ?程 E3 0S0D (PK. chart20). not null 群名称 Cchan-(2O), not null) 群二码(Linary(l), not null) (FK. ch3r(15), not nul
25、l)成员2 (FK. char(15), null) 成员3 (FKchar(15 null) 成员4 (FK, char(15), null)日口瞄器0用户群信息新增外键约束和非空约束如下:由于当用户创建了一个微信群后要在“用户所在群”表中显示出每个用户所在的群,因此需1X1,吉己群|口群名称群二维码成员1成员?成员3成员41 DDDD1羽毛球球部落RDFmim2DDD3NULL1C22D2足球球部落虫BFDDD1DDD2NULLNULL在 此 创 建 的USEGO:篇信十a:SETGOSETGO5声,Gbject: Trigger d&D. I用广茫信由F曾 AN5T NULLS OKQU
26、OTED lEEiHIFIER 取script rate : 05/10/2015 15:trigger为“用户信息新增”。代码如下:7用户IDEALTZR:北。:一用户群信息新增:皿皿由.微信群信息qx insert asdeci axe 四 qurUcl Cha r i 2 0) rcriar 115), ey2id cnar i 15; , ey3id chai 115 f ?2:y41i char (15select &aunidTD.且匚丫:id-成员 旧匚成员W-壬 from inserted if(gcylid 23 not null)J&egininae-t into dk3
27、-用户所在群用户工队群I叫 values i;cylidz qunid)endit i &cy2id jls noc null:teg ininsert into dbo.用户所在群 I用户工。群ID) values (cy?idz cjunid)endIT (gey3id Is hoc null)begininsert mtc 业二.用 户所在群 I用户工口群HD: values :c3idz ciiinid)endir(E-eyid is jl| rjj 11)beaininaert mtc 业9 .用户所在群 I用户工口1群工D: values :0cy4idz (mnid)enl5、“
28、用户所在群”表存储了每个用户所在的群信。每个用户可根据此表查询所 在群信息。当一个微信群被创建后在“用户所在群”表中将自动显示用户所在群 信息日3 ax,用户所在群?用户ID (PK. FK. char15/ not null? 群D CPK. FK, char(20). not null用户ID旺=1*=D1Du2026、“群聊消息记录表”记录了每个群的消息。也可以查询历史记录。比如在群 “ 羽毛球部落中 的消息记录。 dbu衲诲淳日口列?群哪消目!。(PK, char(20, not nullf 群ID (F01 not null如o扫一扫信息曰E刻扫一S言息ID (PK. charO,
29、not nullf 用户【D (FK. charfl null)Ft四容 varchar(5(KK)J, not nullj国 03 smalldatetime; null)日 dbo.itJSSfBM日列? llSID (PK. char(20). not nullJ 用户ID (FK. chartl5). null)5虞内官 vchE(K0 null)Ml 收时O smalldatetime, null日HRo相册曰t削f 相册ID (PK, char(20)! not null)| 用户D (FK. charflSl nullii联茎人J口 血心切,nullT| F*3- varchar
30、fSOOOJ, no-t null)国存放时间 C&malldatetime, null d况捱-普信息日匚j列?捧F信息ID (PK. char(20). not nullf 用户D FK, char(15)r null,FI 内容(varchar(5000J. null)f时间(sms 11 datetime, null以上即为微信数据库平台的简单的物理设计,在具体物理设计实现时根据具 体需要对数据路平台的逻辑设计进行了部分修改,也更加具体化了数据库功能。本数据库只是简单的对微信平台数据库的实现,其中还存在许多不足和缺陷 需进一步完善。最后,通过此次数据库的设计实现进一步熟悉了数据库相关的知 识及数据库的设计和实现。