微信數(shù)據(jù)庫分析與設(shè)計(jì)



微信數(shù)據(jù)庫分析與設(shè)計(jì)一、需求分析微信作為當(dāng)前的主要即時(shí)通訊工具之一,有著廣泛的應(yīng)用其主要的功能是 實(shí)現(xiàn)即時(shí)通信,這也是微信的核心功能此外還有查看朋友圈動(dòng)態(tài)、搜索好友、 管理個(gè)人信息、建立用戶自己的相冊(cè)、收藏功能、搖一搖、搜索附近的人、購物、 游戲等功能此次對(duì)于微信平臺(tái)的數(shù)據(jù)庫設(shè)計(jì)主要對(duì)部分需要微信平臺(tái)提供存儲(chǔ) 信息功能進(jìn)行需求分析及設(shè)計(jì)以下將對(duì)微信平臺(tái)的主要需求做簡要的分析并且 根據(jù)分析做出數(shù)據(jù)流圖使得對(duì)于微信平臺(tái)數(shù)據(jù)庫的設(shè)計(jì)有更好的理解微信的通信主要包括與微信好友進(jìn)行相互通信,這其中通信內(nèi)容包括文字、 語音、圖片及視頻當(dāng)用戶訂閱了公眾號(hào)之后,會(huì)接收公眾號(hào)發(fā)送的消息并且也 可向公眾號(hào)發(fā)信息或許其提供的信息微信通信功能的另一個(gè)主要方面是實(shí)現(xiàn)群聊用戶可以加入一個(gè)微信群進(jìn)行 群另一方面用戶也可以選擇自己的聯(lián)系人進(jìn)行群聊微信中通訊錄實(shí)現(xiàn)了保存用戶聯(lián)系人的目的,并且訂閱的公眾號(hào)也保存于通 訊錄中,并且在通訊錄中可以設(shè)定標(biāo)簽來為聯(lián)系人分組微信朋友圈保存好友發(fā)送的與朋友共享的消息,其內(nèi)容可為文字、圖片、視 頻在朋友圈中可以設(shè)定權(quán)限使得不同權(quán)限的用戶查看的內(nèi)容不一樣搖一搖功能可以獲取同一時(shí)刻一起搖動(dòng)手機(jī)的用戶,并且暫存于微信中。
附近的人功能可以識(shí)別在一定范圍內(nèi)的微信用戶,并且將獲得的用戶信息也 暫存在微信中,對(duì)于識(shí)別附近的用戶可以設(shè)定具體的條件來掃描漂流瓶功能相當(dāng)于隨機(jī)的獲取微信消息或者向微信用戶隨機(jī)的發(fā)送消息對(duì)于個(gè)人信息的編輯,用戶可以根據(jù)自身需要編輯一些所需的個(gè)人信息最后在微信用戶個(gè)人信息中有相冊(cè)和收藏記錄用戶的照片和收藏的文字語音 等信息以上是對(duì)微信的部分功能的需求分析,現(xiàn)根據(jù)以上需求對(duì)微信數(shù)據(jù)庫畫出數(shù) 據(jù)流圖:第0層DFD第1層DFD二、概念設(shè)計(jì)在第一步的需求分析中,我們了解了微信數(shù)據(jù)庫平臺(tái)設(shè)計(jì)中所需要的實(shí)體及需要存儲(chǔ)的信息 在概念設(shè)計(jì)中將進(jìn)一步明確數(shù)據(jù)庫設(shè)計(jì)所需實(shí)體, 實(shí)體所具有的屬性及實(shí)體之間的關(guān)系通過分析微信數(shù)據(jù)庫平臺(tái)所需實(shí)體主要有:用戶信息、普通消息記錄、公眾號(hào)信息、公眾號(hào)消息記錄、微信群信息、群聊消息記錄、收藏信息、相冊(cè)、朋友圈信息、聯(lián)系人信息、附近人信息、漂流瓶信息、掃一掃信息、搖一搖信息這些實(shí)體分別對(duì)應(yīng)于微信功能的不同模塊在實(shí)現(xiàn)微信的通信功能主要是使用用戶信息、普通消息記錄、微信群信息、群聊消息記錄和聯(lián)系人信息這幾個(gè)實(shí)體在明確所需實(shí)體后根據(jù)實(shí)際需要對(duì)于每個(gè)實(shí)體設(shè)置符合實(shí)際情況的屬性,每個(gè)屬性對(duì)應(yīng)了數(shù)據(jù)庫中的具體屬性。
下圖是根據(jù)對(duì)于微信數(shù)據(jù)庫平臺(tái)的需求分析做出的 CDM通過此概念模型顯示數(shù)據(jù)庫之間各實(shí)體之間的相互關(guān)系及各個(gè)實(shí)體所具有的實(shí)際屬性容他 3何一 三二;一二 區(qū)信發(fā)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個(gè)令箕與落運(yùn)人情息 ,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:?內(nèi)亨 VM * la6,OCUfS(800)■髀&I粵力7手守?發(fā)送人?發(fā)送封堂Ch,r?d5 2C)?裳林?歲東人?二步七名闿 o?城區(qū)o個(gè)隹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 發(fā)送消息 天云次 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 計(jì) eM機(jī) Own:廿 tts =-31 ? IT? oHHiR T 一^ ? 年<14<七吊者 U-^SAHS,n^曄2gn1■早二|1|n」Q.1JUH15"?導(dǎo)嚼 前nsDgarBJQ毀 一*|口13號(hào)二 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 噌號(hào)£ 匕'I'?工N色-fljllu cl仔?中』力帝?asy w. n _.20b將而a J吊5r 占 200-o tr 1■?蛇 ,占甲*lqs*is 在此基礎(chǔ)上我們獲得更加具體能直接反映數(shù)據(jù)庫涉及的無理數(shù)據(jù)模型(PDM 通過PDM各具體顯示數(shù)據(jù)庫所需的表及其之間的關(guān)系 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學(xué)巨M% 云口 w_.有號(hào)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 四、物理設(shè)計(jì)在此次物理實(shí)現(xiàn)微信數(shù)據(jù)庫平臺(tái)使用 SQL Server 2008實(shí)現(xiàn)簡單的微信平臺(tái)的數(shù)據(jù)庫,通過在數(shù)據(jù)庫表中插入數(shù)據(jù)或查看數(shù)據(jù)來表現(xiàn)微信平臺(tái)對(duì)信息的發(fā) 送接收及查看在此次物理實(shí)現(xiàn)是我們遵循3NE數(shù)據(jù)庫設(shè)計(jì)如下圖:3 4黨信平臺(tái)+」數(shù)據(jù)庫關(guān)量圖 尸口表團(tuán)□此□附近人信息+) J 6匕6公眾號(hào)消.皂:己靈 3 口此公眾號(hào)信息 3 _j晶口關(guān)注 司 3 dboKMA 國3北日霹郵信息 士二I此白苔國自息記錄 用_j此0靠融消息記錄 +1二]北口掃一3信息 +) _□此口,環(huán)畸信息 ±1 □ dbo徵信群信息+1 3 dbcr柜冊(cè)□ □此口提T信息 由J此口用戶所在群 1 _J此0用戶信息 if LJ視圖1、向“用戶信息”表添加記錄,模擬微信在線用戶此次添加三個(gè)用戶作為模擬的微信用戶用戶基本信息如下:日圉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 地區(qū)(varchar(20)t not null)1=1 個(gè)性卷名[varthar(5OO), null)H 登陸寶毛(wanchart2O), rot null)2、我們選取“小a”登陸微信,開始添加聯(lián)系人。 聯(lián)系人”表保存每個(gè)用戶的聯(lián)系人信息,這些聯(lián)系人信息皆來自用戶信息表小 a”的聯(lián)系人如下表:此表的創(chuàng)建過程如下:nst nuLlf用用朋標(biāo)ID char H5) n9t noil fscziBtrairt p 內(nèi)容「發(fā)顏1間£工口小 儂春「岫七a SfcMAjS m('0001\ f0002*) and 111(-0001' , *0002*),j55…__…_…_ ___發(fā)醫(yī)時(shí)間1 |取而后云標(biāo)立?靄隹1 20153111:35:32,040VIIBIIAIBIIlUillll l&lll IlbU ■IIUdlliaMIIHIIMHIIIIKIIII iJ2 可以,下午球場見 20154&10 11 36:17207同樣也可以在“普通消消息記錄表”中實(shí)現(xiàn)刪除消息記錄在“普通消息記錄”表中為了能使用戶更快的查詢自己的消息記錄, 這里創(chuàng)建了索引create index用戶快速查詢記錄皿普通消息記錄f用戶1口)4、“微信群信息”表中記錄了所有用戶創(chuàng)建的微信群的信息由于在微信中群成員數(shù)量當(dāng)前限制為40個(gè),在本平臺(tái)中我們?cè)O(shè)置為4個(gè)并且每一個(gè)成員信息由外鍵引用自“用戶信息”表比如現(xiàn)在創(chuàng)建了兩個(gè)個(gè)微信群如下:H匕口.滯信其傳導(dǎo)上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觸發(fā)瞿國用戶群信息新增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=足=£二■ 領(lǐng)禪<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由于當(dāng)用戶創(chuàng)建了一個(gè)微信群后要在 “用戶所在群”表中顯示出每個(gè)用戶所在的群, 因此需創(chuàng)建一個(gè)觸發(fā)器。 在此創(chuàng)建的 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、“用戶所在群”表存儲(chǔ)了每個(gè)用戶所在的群信。 每個(gè)用戶可根據(jù)此表查詢所 在群信息當(dāng)一個(gè)微信群被創(chuàng)建后在“用戶所在群”表中將自動(dòng)顯示用戶所在群 信息1 _ db.用戶哥在摩日口列?用戶[D (PK. F《char(15); ntrt null)?群[力(PK, FK, char^OL not null]g 巾卡 | UJ 1用戶2群ID1\W],! 0D0D120002W00130003CMK0140001M00250002W0026、“群聊消息記錄表”記錄了每個(gè)群的消息也可以查詢歷史記錄比如在群“羽毛球部落”中的消息記錄三口列/ BMK;當(dāng)息ID (PK, char(20)P not null)?群ID (FKr 小時(shí)口L null]H 費(fèi)送人(char(2D), not null]囪 內(nèi)容(varchart5000)P not null)J 宣野1 間(small datetime, null]-- ■ J-F11群哪肖息ID群舊發(fā)送人內(nèi)容發(fā)送時(shí)間1[OOWDOOOOI \DOMI小日明天去打羽毛球2015-05-1D 15:48:002OWOOM2D&M7小b下午去201^)6-10 1545003(wocoowm0OTQ1小C可以201M5-10 1543:004DOtMDDtXXMDCHM1小。 下午3點(diǎn)2015^1015:50:00為了使得用戶在查詢?nèi)簹v史消息時(shí)更加快速,創(chuàng)建索引sc index群消息快速查詢on如□.群聊梢息記錄(群工因7、“公眾號(hào)信息”表記錄了所有公眾號(hào)的信息可以通過搜索公共號(hào)ID或名稱 來訂閱公眾號(hào)日口列?公眾號(hào)2 (P6丑3, not null〕J (char(401 not null)8、“關(guān)注”表中,存儲(chǔ)了每個(gè)用戶訂閱的公眾號(hào)3 □ dbQ.關(guān)注臼一列g(shù) 用戶1口 (PK. F& char(15), not null)?公有【口 伊K FK, char(20)J not null)」落果消息1用戶心1?■ 1 imillBifl ■■■■ HUBI|\ 0001公氽^口QOT120002000230001QM3d(KXM9、“公眾號(hào)消息記錄”存儲(chǔ)公眾號(hào)為訂閱者發(fā)送的消息E 口 db?公眾號(hào)j省息記錄日口列I 公觸息ID CP< char^O), net null)?公眾號(hào)ID (FK, char^OX null)_2 公眾消.皂(varcbar(5OOO)r net null] J 發(fā)送藥間 ftimestamp, not null)公眾消息ID公眾號(hào)ID公眾消息OOO&DODM 0M2秋假安排廉政建設(shè)發(fā)送時(shí)間題 1541Moi收 17:0020154&10 1€:1&00WDOOOD06 0004深程計(jì)劃 201W51D 16:18:0010、其余各表分別存儲(chǔ)每個(gè)用戶在微信中的信息, 通過外鍵引用來確定每個(gè)表中各個(gè)用戶的信息,其具體結(jié)構(gòu)如下:d昌db.附近人信息日口列f 附(PK, chariot)], not null)f用戶【CUFK,小苜r(15h mil)圖 昵稱[char[20], not null ?ID 建至 frit null]S) ftBl (char(5L null]國地區(qū)(varchar(20)j null)國個(gè)性簽名(varcharfSOO), nullj二I db口醬惹信息臼LJ列f 漂(P& chartiO]. not null)f 用戶】D (F兄 charCIS), null)?1 內(nèi)客[vartzhaHSOOO] rot null]d」m口掃T信息日口列V 掃一S信副。 PK char(201 not null]* 用戶ID (國 chartl^ null)囿內(nèi)容(var匚har(5W01 not null]3 rfi? (sinalldatetime, null)■Urfr=1 口日口列t (PK char(2D)T not null),用戶ID(F區(qū)小ar(l辦null)3 L西內(nèi)容(vairha180001 null)fl 晚演門閆(sHnalldaletime. null]上二1 dbc1靠冊(cè)日口列?醐【D (PK ckar(20)J rrot null)f 用戶舊(FK, charCIS], null)31 寮莖人□ yharQO] null)3]內(nèi)容(varchartSOOOJj not null)3 存,放時(shí)向 Csmall datetime, null)U二i d ba延一備信息臼u列?授T信息m (PK char^oi not null)?用戶IB (F& c*r(15),「則S 內(nèi)容即L50TO, null)J 酎間(smalldatetime, null)一」 「?? Mi以上即為微信數(shù)據(jù)庫平臺(tái)的簡單的物理設(shè)計(jì),在具體物理設(shè)計(jì)實(shí)現(xiàn)時(shí)根據(jù)具 體需要對(duì)數(shù)據(jù)路平臺(tái)的邏輯設(shè)計(jì)進(jìn)行了部分修改,也更加具體化了數(shù)據(jù)庫功能。 本數(shù)據(jù)庫只是簡單的對(duì)微信平臺(tái)數(shù)據(jù)庫的實(shí)現(xiàn),其中還存在許多不足和缺陷需進(jìn)一步完善最后,通過此次數(shù)據(jù)庫的設(shè)計(jì)實(shí)現(xiàn)進(jìn)一步熟悉了數(shù)據(jù)庫相關(guān)的知識(shí)及數(shù)據(jù)庫的設(shè)計(jì)和實(shí)現(xiàn)。
