


微信数据库分析与设计一、需求分析微信作为当前的主要即时通讯工具之一,有着广泛的应用其主要的功能是 实现即时通信,这也是微信的核心功能此外还有查看朋友圈动态、搜索好友、 管理个人信息、建立用户自己的相册、收藏功能、摇一摇、搜索附近的人、购物、 游戏等功能此次对于微信平台的数据库设计主要对部分需要微信平台提供存储 信息功能进行需求分析及设计以下将对微信平台的主要需求做简要的分析并且 根据分析做出数据流图使得对于微信平台数据库的设计有更好的理解微信的通信主要包括与微信好友进行相互通信,这其中通信内容包括文字、 语音、图片及视频当用户订阅了公众号之后,会接收公众号发送的消息并且也 可向公众号发信息或许其提供的信息微信通信功能的另一个主要方面是实现群聊用户可以加入一个微信群进行 群另一方面用户也可以选择自己的联系人进行群聊微信中通讯录实现了保存用户联系人的目的,并且订阅的公众号也保存于通 讯录中,并且在通讯录中可以设定标签来为联系人分组微信朋友圈保存好友发送的与朋友共享的消息,其内容可为文字、图片、视 频在朋友圈中可以设定权限使得不同权限的用户查看的内容不一样摇一摇功能可以获取同一时刻一起摇动手机的用户,并且暂存于微信中。
附近的人功能可以识别在一定范围内的微信用户,并且将获得的用户信息也 暂存在微信中,对于识别附近的用户可以设定具体的条件来扫描漂流瓶功能相当于随机的获取微信消息或者向微信用户随机的发送消息对于个人信息的编辑,用户可以根据自身需要编辑一些所需的个人信息最后在微信用户个人信息中有相册和收藏记录用户的照片和收藏的文字语音 等信息以上是对微信的部分功能的需求分析,现根据以上需求对微信数据库画出数 据流图:第0层DFD第1层DFD二、概念设计在第一步的需求分析中,我们了解了微信数据库平台设计中所需要的实体及需要存储的信息 在概念设计中将进一步明确数据库设计所需实体, 实体所具有的属性及实体之间的关系通过分析微信数据库平台所需实体主要有:用户信息、普通消息记录、公众号信息、公众号消息记录、微信群信息、群聊消息记录、收藏信息、相册、朋友圈信息、联系人信息、附近人信息、漂流瓶信息、扫一扫信息、摇一摇信息这些实体分别对应于微信功能的不同模块在实现微信的通信功能主要是使用用户信息、普通消息记录、微信群信息、群聊消息记录和联系人信息这几个实体在明确所需实体后根据实际需要对于每个实体设置符合实际情况的属性,每个属性对应了数据库中的具体属性。
下图是根据对于微信数据库平台的需求分析做出的 CDM通过此概念模型显示数据库之间各实体之间的相互关系及各个实体所具有的实际属性容他 3何一 三二;一二 区信发x¥濡F5”cttn (20, Chgrseten (20)Varablc choroct&r: (6030) Cale & TimeCharacten (20)V^roble chwncf>n (100)Cote & Time# fc^JJD•雯称 O忌高O o o个令箕与落运人情息 ,Cnfiracten 12dCnoroctcr: (20IrtegerCnaracters (5)V»ri»ble cnnn»cf*n (20lArable c^woaters :「一,Coto & TimchaiKUn (X)0C)—两向 ?3-515.“ *一包 W,IC C"9,s[20)D«t« 6 TinwVariate cha-aaers (£000且云上知D C、o,n |二0:•内亨 VM * la6,OCUfS(800)■髀&I粤力7手守•发送人•发送封堂Ch,r・d5 2C)•裳林・岁东人•二步七名闿 o•城区o个隹8名V=r^.€C^ar3cte-s 15) C卜anadGrc 20)Chapdus 2J) imaje (100) Iec,(100)VorisblQ shocct。
100) cr<8oaefs OVariable Faraders 20)Varitblo am dore (500) dw«a«f> (20)Ch*r«a«r> 20)Charaae3 20)Ds:e&TmeVariobla sharActQQ (5CO9)、A 发送消息 天云次 s £1D•暮自生-妄二金天5— (20Chsr«rt
O军占$窘7&£c讣3『T苍 口m E T-mr . ii40□It&- 10 HR 1A ri ii ■ 口ii; 日 n n4 口 d U rv ea r ifyJ13 Li■¥ ■""A盾n ju $*iiAIA破.声 冲.掂—前ma 口牙比里白WElhJr M Tuu fEERH 中黑a0曾Pr-T-HMI P青 崎 v&dA'ble cT LJ生,SKiOdLllraE I«|而皿皿In- "ns 计 eM机 Own:廿 tts =-31 • IT• oHHiR T 一^ ・ 年<14<七吊者 U-^SAHS,n^晔2gn1■早二|1|n」Q.1JUH15"♦导嚼 前nsDgarBJQ毁 一*|口13号二 F IliffU 祐U I. ——r;- cka-rE・s-* ctlraL-Ers 二" 9**«-as 2ch DzianT-rw<1西江小笈5 Mesd.ll°5t.iiL* 年lff:DIII1B1 艮EArzay 春1>'■■ s・«a里二 ・ HH0W_5・£_G5nd◎stall・山m. . 1 29as^3 片‘■CJhTEWn20』 一3番±1昌-1 言》h-" b■启4 -flns Gd_EdiErs E..*nT Blur*dK^ -H) V^r-PIF, EilEacian -{Mq一 <嗝O3m 噌号£ 匕'I'•工N色-fljllu cl仔・中』力帝・asy w. n _.20b将而a J吊5r 占 200-o tr 1■♦蛇 ,占甲*lqs*is 在此基础上我们获得更加具体能直接反映数据库涉及的无理数据模型(PDM 通过PDM各具体显示数据库所需的表及其之间的关系 PDMto下图所示:箍—掘Hid廉iALtILl一?彳b 用工rlih■{4 舞同 Hme5lmpcs 尸I-.I1-BNH :-III廿C30har-1l11, &k2> ls&3§^ A? 口胃鼻冠lizFa*口 外鞫MH- rMUS char-3 w Jl * -ocharyw fc-E-w 手E_DlJi言 **c: 踣有>&W.B >丽 .HuhxEOODj 划p:17 由 ^Tivff-3-v,-IfflillaT-lTM 心防前R 涸 hnn ■r*3方向不・出UM.Midi砧暗,GMESKW^.=u%a—Em urTMM学巨M% 云口 w_.有号A^vli-iHMlli-u.立 飞 郭 6 Aarfa^ 稿 BJC" dl、-0 AM 鼻 A? Jr415』(KXS)MITlWE阳酒J> euXLal / AffMtrDly Il/ 叼科Tr西鼻 廿haryAl1寺 V 廿If■ OMAi 修Mc・rdMrt293 小麻髀的 so&Bff 脚Iv制SI修川•1-1j.r!:二 四.。 Q c*w 四、物理设计在此次物理实现微信数据库平台使用 SQL Server 2008实现简单的微信平台的数据库,通过在数据库表中插入数据或查看数据来表现微信平台对信息的发 送接收及查看在此次物理实现是我们遵循3NE数据库设计如下图:3 4党信平台+」数据库关量图 尸口表团□此□附近人信息+) J 6匕6公众号消.皂:己灵 3 口此公众号信息 3 _j晶口关注 司 3 dboKMA 国3北日霹邮信息 士二I此白苔国自息记录 用_j此0靠融消息记录 +1二]北口扫一3信息 +) _□此口,环畸信息 ±1 □ dbo徵信群信息+1 3 dbcr柜册□ □此口提T信息 由J此口用户所在群 1 _J此0用户信息 if LJ视图1、向“用户信息”表添加记录,模拟微信在线用户此次添加三个用户作为模拟的微信用户用户基本信息如下:日圉db□,用户信.名二 I 一i 到f 用户ItPK, char[15L not null)i n 呢称(chd<2 01 not null)圉 头焦(binary(l), null)iT1 二维膏名片(binary〔1). not null)国 我花地址 tvarcbar(lOO), null)H 性物(chard not null]E 地区(varchar(20)t not null)1=1 个性卷名[varthar(5OO), null)H 登陆宝毛(wanchart2O), rot null)2、我们选取“小a”登陆微信,开始添加联系人。 联系人”表保存每个用户的联系人信息,这些联系人信息皆来自用户信息表小 a”的联系人如下表:此表的创建过程如下:nst nuLlf用用朋标ID char H5) n9t noil fscziBtrairt p 内容「发颜1间£工口小 侬春「岫七a SfcMAjS m('0001\ f0002*) and 111(-0001' , *0002*),j55…__…_…_ ___发医时间1 |取而后云标立।霭隹1 20153111:35:32,040VIIBIIAIBIIlUillll l&lll IlbU ■IIUdlliaMIIHIIMHIIIIKIIII iJ2 可以,下午球场见 20154&10 11 36:17207同样也可以在“普通消消息记录表”中实现删除消息记录在“普通消息记录”表中为了能使用户更快的查询自己的消息记录, 这里创建了索引create index用户快速查询记录皿普通消息记录f用户1口)4、“微信群信息”表中记录了所有用户创建的微信群的信息由于在微信中群成员数量当前限制为40个,在本平台中我们设置为4个并且每一个成员信息由外键引用自“用户信息”表比如现在创建了两个个微信群如下:H匕口.滞信其传导上Li列? 荫口 (P<, char(2Ol not null'!图 辞名林(char(2D). not null)国 群二(binary(l)f not null) f (F< char[15), not null) f 成员2 (FK ch雨口5). nW) f OS3 (F< eh3r(151. null] f 成员4 ffK char(151 null)田N/5」的柬IT LJ触发瞿国用户群信息新增1 । 7 番 m ।群ID 群名祢 群二维码成员1成员2成员3成员4I—IM ■■ IMtd ■ |1 1 MXW1 j 可用$碟部落 &cEF DW1 OMH W03 NULL2 oS)02" 足避球部蓬 QcBF M)C1 0002 MULL NULL外键约束和非空约束如下:£uf 旦.二汽 信信信 百君苣声名 -一11=5=足=£二■ 领禅<0©fl-*Qlpilzer column chir (15 noz口3口口Till户户户户URFRFT息息息息信信信信川户户户he?rr喙己可 ccmBLrdlnt ug】rot-elgn i 1) e■1史爱W工皿 a;dd G^mstr^irt 二『7 £口「<1口11 key 嗔1年 fu 察看口仁七 m dh■:sdd ccnstrsizt 5-yS :ioixLg key xcfcscnccj db^三 Ed szrutrslzt sy a ^arexqn. key zeTerences dtni由于当用户创建了一个微信群后要在 “用户所在群”表中显示出每个用户所在的群, 因此需创建一个触发器。 在此创建的 trigger为“用户信息新增”代码如下:口叫「徵信平告】GO口匕:Trigger 【位u】* |用户群息।渐增 I Sacxp^ Da^.bi 05-工l&ta&il? ,,备・5ET Air3T_WULLS ON soSET GU0TED_I3€;niFIE.R QX8esltzr s.m- —“1」用户打信息新噌二皿『血:】J睁辎七息】ror insert aacfe^lar- 'Squn^d 2har JO) r ©c:\lLldl chAr 11 S;i F $cy2 Id ehi.r IS. , @cylld char 1 !1 ; f 9 -741 d ehar ;15> select Wqiinid一群TD? *eyli 1- r &cy2 id-2^ ^,r 4 £t&h inaertedxf।Saylid 19 nn: nullt«gininsert, into dbn .用户所在群 用户I口(工口) yh1u«s ; 9-箱.i d.外」nid) end£工 । ?cy2i d 工 2 口:二 u.ullbeginmaert into dbo.用户所在群 用户•1口 .群建value a 8cy2i2期a”nid) endr£ I 2 c2,'3 It!口- - iiu.llbeginiuert mt= db*用户所在群用户,匚群“ Tallies :0“”d 尸 gun工 d]endifi aisl -:」| :...:!beginxxLsext izitz: dh:i .月户所在群 用户1匚 群工匚 vaLue b ?cy4^dF '^crLinid;-fiQil5、“用户所在群”表存储了每个用户所在的群信。 每个用户可根据此表查询所 在群信息当一个微信群被创建后在“用户所在群”表中将自动显示用户所在群 信息1 _ db.用户哥在摩日口列?用户[D (PK. F《char(15); ntrt null)?群[力(PK, FK, char^OL not null]g 巾卡 | UJ 1用户2群ID1\W],! 0D0D120002W00130003CMK0140001M00250002W0026、“群聊消息记录表”记录了每个群的消息也可以查询历史记录比如在群“羽毛球部落”中的消息记录三口列/ BMK;当息ID (PK, char(20)P not null)?群ID (FKr 小时口L null]H 费送人(char(2D), not null]囱 内容(varchart5000)P not null)J 宣野1 间(small datetime, null]-- ■ J-F11群哪肖息ID群旧发送人内容发送时间1[OOWDOOOOI \DOMI小日明天去打羽毛球2015-05-1D 15:48:002OWOOM2D&M7小b下午去201^)6-10 1545003(wocoowm0OTQ1小C可以201M5-10 1543:004DOtMDDtXXMDCHM1小。 下午3点2015^1015:50:00为了使得用户在查询群历史消息时更加快速,创建索引sc index群消息快速查询on如□.群聊梢息记录(群工因7、“公众号信息”表记录了所有公众号的信息可以通过搜索公共号ID或名称 来订阅公众号日口列?公众号2 (P6丑3, not null〕J (char(401 not null)8、“关注”表中,存储了每个用户订阅的公众号3 □ dbQ.关注臼一列g 用户1口 (PK. F& char(15), not null)?公有【口 伊K FK, char(20)J not null)」落果消息1用户心1・■ 1 imillBifl ■■■■ HUBI|\ 0001公氽^口QOT120002000230001QM3d(KXM9、“公众号消息记录”存储公众号为订阅者发送的消息E 口 db»公众号j省息记录日口列I 公触息ID CP< char^O), net null)?公众号ID (FK, char^OX null)_2 公众消.皂(varcbar(5OOO)r net null] J 发送药间 ftimestamp, not null)公众消息ID公众号ID公众消息OOO&DODM 0M2秋假安排廉政建设发送时间题 1541Moi收 17:0020154&10 1€:1&00WDOOOD06 0004深程计划 201W51D 16:18:0010、其余各表分别存储每个用户在微信中的信息, 通过外键引用来确定每个表中各个用户的信息,其具体结构如下:d昌db.附近人信息日口列f 附(PK, chariot)], not null)f用户【CUFK,小苜r(15h mil)图 昵称[char[20], not null ।ID 建至 frit null]S) ftBl (char(5L null]国地区(varchar(20)j null)国个性签名(varcharfSOO), nullj二I db口酱惹信息臼LJ列f 漂(P& chartiO]. not null)f 用户】D (F兄 charCIS), null)?1 内客[vartzhaHSOOO] rot null]d」m口扫T信息日口列V 扫一S信副。 PK char(201 not null]* 用户ID (国 chartl^ null)囿内容(var匚har(5W01 not null]3 rfi? (sinalldatetime, null)■Urfr=1 口日口列t (PK char(2D)T not null),用户ID(F区小ar(l办null)3 L西内容(vairha180001 null)fl 晚演门闫(sHnalldaletime. null]上二1 dbc1靠册日口列?醐【D (PK ckar(20)J rrot null)f 用户旧(FK, charCIS], null)31 寮茎人□ yharQO] null)3]内容(varchartSOOOJj not null)3 存,放时向 Csmall datetime, null)U二i d ba延一备信息臼u列?授T信息m (PK char^oi not null)?用户IB (F& c*r(15),「则S 内容即L50TO, null)J 酎间(smalldatetime, null)一」 「・・ Mi以上即为微信数据库平台的简单的物理设计,在具体物理设计实现时根据具 体需要对数据路平台的逻辑设计进行了部分修改,也更加具体化了数据库功能。 本数据库只是简单的对微信平台数据库的实现,其中还存在许多不足和缺陷需进一步完善最后,通过此次数据库的设计实现进一步熟悉了数据库相关的知识及数据库的设计和实现。