在此基础上我们获得更加具体能直接反映数据库涉及的无理数据模型(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¥ 4IV ff口 孰胃? JUJD Asv 痢科停蜘1?%叫一吵》 潭& A ch#4整 埼“中山 rmtvnETmo注钟dpIJtlm*LWrGlu岂三片「「;7 二 一口 .luErs mFI ri* * M.E 从如% 注后.E i.'117 - 广/1>中小律—招,|!-%中抑,诲|«强小If'”阿 3 01 h#—臀鬻 R 恂羯iwll-ff富IliF -J一一可-smrtba-=i垢GYL 1 菖.厚4I,E 尸审h)ll_KJI回”号由 惜少>>)|脸曲q$4¥带冷*I.JtE也*mLllaInQ£l-plr>士. 心 k. H n my " WRa总MII的竹RAa.a壬®寻药曲<兽?X34O) ,SW4^ ffav在PDW显示了个表单之间的引用关系,其具体引用如下表:标间关系名称父表格子表格关注用户信息关注关注公众号信息关注发送公众号信息公众号消息记录发送/接收用户信息普通消息记录发送消息用户信息群聊消息记录收藏用户信息收藏信息查看联系人信息普通消息记录用户存放用户信息『摇信息用户所在群用户信息用户所在群用户所在群微信群信息用户所在群用户所属用户信息漂流瓶信息用户扫寸而获得用户信息『扫信息用户相册用户信息相册用户联系人用户信息联系人信息群聊天记录微信群信息群聊消息记录联系人相册联系人信息相册状取用户信息附近人信息本系统中使用的表单如下所示: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联系人IDchar(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,000X订阅者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(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 TypeLengthPFM附近人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、漂流瓶信息表NameData TypeLengthPFM漂流瓶IDchar(20)20XX用户IDchar(15)15X内容varchar(5000)5,000X对于微信数据库平台的逻辑分析,明确了在具体是实现时所需的表及其各个表之间的引用关系,在接下来的物理设计中将使用逻辑设计中的表在具体数据库 实现微信数据库平台的设计。
四、物理设计在此次物理实现微信数据库平台使用 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 Hcarvims db*用户宿息痈户ID卜.一一.1月破ID"e -i r用户ID朋友笛在名标箜11 W0Z0001明B月同学20M30M1NULLNULL3、普通用户发送消息时,消息内容将存储在“普通消息记录”表中,如现在“小 a”向“小b”发送一条消息,然后“小b”再回复一条小a”也向“小c” 发送一条消息dbd普圜鳄记录臼口更I? 声息JD (PKd char[20j,, not null)?联口 (FK. chdr(151 nulD'f 用口【D (FK. char[15)r null)直内容"archarf5000), not nidi)=1 发送Tj1闫汨己tetirri亡,not null]消息? 联系人旧用户ID内容 发送时间1 「证丽30002 DM1 F午5点去球场踢球 2015-D5-K 1135:320402 丽而2 0001 0002 可以,下午涉场见 20154P5-1011:36:172073 000003 0003 0W1 你好 2015-05-1012581EB3J其中表中的外键约束和默认值如下:箱13匚GSHe 0c,百通捎 目记无 单口4 gnapgJL口t 门司fnz工g 曜丁 欣/人工匚 Humreca* 80*用户信息 用 户二口sl tEE t isble dba .普通稍息布察 edd 匚口口口七匚勺七口t. 5kt E3re-ign 三口匚D) ruEuHuncun i±d用卢।信虑£用卢工「alter table 01tle-廿通捎息记录 ad:l 发送时间 日"“工口七 7c 、 default HMbEet在”普通消息记录表”中也可以查询两个用户之间的聊天记录,如查询“小 a”和”小b ”之间的聊天记录:II 乩工。
内容「发颜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以上即为微信数据库平台的简单的物理设计,在具体物理设计实现时根据具 体需要对数据路平台的逻辑设计进行了部分修改,也更加具体化了数据库功能。
本数据库只是简单的对微信平台数据库的实现,其中还存在许多不足和缺陷需进一步完善最后,通过此次数据库的设计实现进一步熟悉了数据库相关的知识及数据库的设计和实现。