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



微信數(shù)據(jù)庫分析與設計一、需求分析微信作為當前的主要即時通訊工具之一,有著廣泛的應用其主要的功能是 實現(xiàn)即時通信,這也是微信的核心功能此外還有查看朋友圈動態(tài)、搜索好友、 管理個人信息、建立用戶自己的相冊、收藏功能、搖一搖、搜索附近的人、購物、 游戲等功能此次對于微信平臺的數(shù)據(jù)庫設計主要對部分需要微信平臺提供存儲 信息功能進行需求分析及設計以下將對微信平臺的主要需求做簡要的分析并且 根據(jù)分析做出數(shù)據(jù)流圖使得對于微信平臺數(shù)據(jù)庫的設計有更好的理解微信的通信主要包括與微信好友進行相互通信,這其中通信內容包括文字、 語音、圖片及視頻當用戶訂閱了公眾號之后,會接收公眾號發(fā)送的消息并且也 可向公眾號發(fā)信息或許其提供的信息微信通信功能的另一個主要方面是實現(xiàn)群聊用戶可以加入一個微信群進行 群另一方面用戶也可以選擇自己的聯(lián)系人進行群聊微信中通訊錄實現(xiàn)了保存用戶聯(lián)系人的目的,并且訂閱的公眾號也保存于通 訊錄中,并且在通訊錄中可以設定標簽來為聯(lián)系人分組微信朋友圈保存好友發(fā)送的與朋友共享的消息,其內容可為文字、圖片、視 頻在朋友圈中可以設定權限使得不同權限的用戶查看的內容不一樣搖一搖功能可以獲取同一時刻一起搖動手機的用戶,并且暫存于微信中。
附近的人功能可以識別在一定范圍內的微信用戶,并且將獲得的用戶信息也 暫存在微信中,對于識別附近的用戶可以設定具體的條件來掃描漂流瓶功能相當于隨機的獲取微信消息或者向微信用戶隨機的發(fā)送消息對于個人信息的編輯,用戶可以根據(jù)自身需要編輯一些所需的個人信息最后在微信用戶個人信息中有相冊和收藏記錄用戶的照片和收藏的文字語音 等信息以上是對微信的部分功能的需求分析,現(xiàn)根據(jù)以上需求對微信數(shù)據(jù)庫畫出數(shù) 據(jù)流圖:第0層DFD第1層DFD二、概念設計在第一步的需求分析中,我們了解了微信數(shù)據(jù)庫平臺設計中所需要的實體及需要存儲的信息 在概念設計中將進一步明確數(shù)據(jù)庫設計所需實體, 實體所具有的屬性及實體之間的關系通過分析微信數(shù)據(jù)庫平臺所需實體主要有:用戶信息、普通消息記錄、公眾號信息、公眾號消息記錄、微信群信息、群聊消息記錄、收藏信息、相冊、朋友圈信息、聯(lián)系人信息、附近人信息、漂流瓶信息、掃一掃信息、搖一搖信息這些實體分別對應于微信功能的不同模塊在實現(xiàn)微信的通信功能主要是使用用戶信息、普通消息記錄、微信群信息、群聊消息記錄和聯(lián)系人信息這幾個實體在明確所需實體后根據(jù)實際需要對于每個實體設置符合實際情況的屬性,每個屬性對應了數(shù)據(jù)庫中的具體屬性。
下圖是根據(jù)對于微信數(shù)據(jù)庫平臺的需求分析做出的 CDM通過此概念模型顯示數(shù)據(jù)庫之間各實體之間的相互關系及各個實體所具有的實際屬性容他 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個令箕與落運人情息 ,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手守?發(fā)送人?發(fā)送封堂Ch,r?d5 2C)?裳林?歲東人?二步七名闿 o?城區(qū)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 發(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 計 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 在此基礎上我們獲得更加具體能直接反映數(shù)據(jù)庫涉及的無理數(shù)據(jù)模型(PDM 通過PDM各具體顯示數(shù)據(jù)庫所需的表及其之間的關系 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 四、物理設計在此次物理實現(xiàn)微信數(shù)據(jù)庫平臺使用 SQL Server 2008實現(xiàn)簡單的微信平臺的數(shù)據(jù)庫,通過在數(shù)據(jù)庫表中插入數(shù)據(jù)或查看數(shù)據(jù)來表現(xiàn)微信平臺對信息的發(fā) 送接收及查看在此次物理實現(xiàn)是我們遵循3NE數(shù)據(jù)庫設計如下圖:3 4黨信平臺+」數(shù)據(jù)庫關量圖 尸口表團□此□附近人信息+) J 6匕6公眾號消.皂:己靈 3 口此公眾號信息 3 _j晶口關注 司 3 dboKMA 國3北日霹郵信息 士二I此白苔國自息記錄 用_j此0靠融消息記錄 +1二]北口掃一3信息 +) _□此口,環(huán)畸信息 ±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 地區(qū)(varchar(20)t not null)1=1 個性卷名[varthar(5OO), null)H 登陸寶毛(wanchart2O), rot null)2、我們選取“小a”登陸微信,開始添加聯(lián)系人。 聯(lián)系人”表保存每個用戶的聯(lián)系人信息,這些聯(lián)系人信息皆來自用戶信息表小 a”的聯(lián)系人如下表:此表的創(chuàng)建過程如下:nst nuLlf用用朋標ID char H5) n9t noil fscziBtrairt p 內容「發(fā)顏1間£工口小 儂春「岫七a SfcMAjS m('0001\ f0002*) and 111(-0001' , *0002*),j55…__…_…_ ___發(fā)醫(yī)時間1 |取而后云標立?靄隹1 20153111:35:32,040VIIBIIAIBIIlUillll l&lll IlbU ■IIUdlliaMIIHIIMHIIIIKIIII iJ2 可以,下午球場見 20154&10 11 36:17207同樣也可以在“普通消消息記錄表”中實現(xiàn)刪除消息記錄在“普通消息記錄”表中為了能使用戶更快的查詢自己的消息記錄, 這里創(chuàng)建了索引create index用戶快速查詢記錄皿普通消息記錄f用戶1口)4、“微信群信息”表中記錄了所有用戶創(chuàng)建的微信群的信息由于在微信中群成員數(shù)量當前限制為40個,在本平臺中我們設置為4個并且每一個成員信息由外鍵引用自“用戶信息”表比如現(xiàn)在創(chuàng)建了兩個個微信群如下: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觸發(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=足=£二■ 領禪<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由于當用戶創(chuàng)建了一個微信群后要在 “用戶所在群”表中顯示出每個用戶所在的群, 因此需創(chuàng)建一個觸發(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、“用戶所在群”表存儲了每個用戶所在的群信。 每個用戶可根據(jù)此表查詢所 在群信息當一個微信群被創(chuàng)建后在“用戶所在群”表中將自動顯示用戶所在群 信息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群舊發(fā)送人內容發(fā)送時間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為了使得用戶在查詢群歷史消息時更加快速,創(chuàng)建索引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、“公眾號消息記錄”存儲公眾號為訂閱者發(fā)送的消息E 口 db?公眾號j省息記錄日口列I 公觸息ID CP< char^O), net null)?公眾號ID (FK, char^OX null)_2 公眾消.皂(varcbar(5OOO)r net null] J 發(fā)送藥間 ftimestamp, not null)公眾消息ID公眾號ID公眾消息OOO&DODM 0M2秋假安排廉政建設發(fā)送時間題 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]國地區(qū)(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區(qū)小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以上即為微信數(shù)據(jù)庫平臺的簡單的物理設計,在具體物理設計實現(xiàn)時根據(jù)具 體需要對數(shù)據(jù)路平臺的邏輯設計進行了部分修改,也更加具體化了數(shù)據(jù)庫功能。 本數(shù)據(jù)庫只是簡單的對微信平臺數(shù)據(jù)庫的實現(xiàn),其中還存在許多不足和缺陷需進一步完善最后,通過此次數(shù)據(jù)庫的設計實現(xiàn)進一步熟悉了數(shù)據(jù)庫相關的知識及數(shù)據(jù)庫的設計和實現(xiàn)。