数据库系统原理课程设计报告--动态评论技系统数据库设计.docx
数据库系统原理课程设计报告设计题目动态评论技系统数据库设计1系统开发概述21.1 系统开发背景21.2 系统功能需求及性能分析31.3 系统数据流程分析32数据库概念结构设计43数据库逻辑结构设计74数据库物理结构设计84.1SQLSerVer数据库及数据表的创建84.1.1数据库创建84.1.2数据表的创建94. 2数据完整性设计Il4. 2.1主键约束的创建115. 2.2DEFAULT约束的创建Il6. 2.3UNIQUE约束的创建126.3 索引的创建136.4 视图的创建135数据库的操作145. 1数据操纵145.1.1 数据插入147. L2数据更新175. L3数据删除195.2数据查询225.2.1单表查询225.2.2多表查询236、应用程序设计277总结32参考文献331系统开发概述1.1 系统开发背景Internet是目前世界上最大的计算机互联网络,它遍布全球,将世界各地各种规模的网络连接成一个整体。作为Internet上一种先进的,易于被人们所接受的信息检索手段,WOrIelWideWeb(简称WWW)发展十分迅速,成为目前世界上最大的信息资源宝库。据估计,目前Internet上己有上百万个Web站点,其内容范围跨越了教育科研、文化事业、金融、商业、新闻出版、娱乐、体育等各个领域,其用户群十分庞大。近年来计算机技术的快速发展,特别是计算机网络的发展,越来越深刻的改变了人们生活的方方面面。使得人们能以更低廉的价格,开发出更方便、更实用的网络工具。这种动态评论系统可以提供给人们一个平台,影响了人们的联系和交流方式,使得人们可以在远隔千里之遥随时看到别人的动态。通过提供较为完善的动态评论系统的管理,可以达到增进人与人之间的交流和联系的目的。1.2 系统功能需求及性能分析1、可以查询、增加和删除动态信息;2、可以查询、增加、修改和删除用户个人信息;3、用户可修改或删除个人信息;4、若要发布动态,需先登录用户;5、当前登录用户只能查看他人的个人及动态信息,无权限修改他人资料;6、当前用户发表的动态内容不能为空;7、发布成功之后,F5刷新即可看到自己的动态内容;8、新用户注册时,可以检测ID是否已存在及两次密码输入是否一致;9、注册成功后即可返回登录页面进行登录;10、登录完成后,可在评论框下方的动态信息中点击查看对方资料;用户注册管理:包括用户的增加、修改;用户登录管理:包括用户的增加、修改和查询;用户信息管理:包括用户信息的增加、修改、查询和删除;图1-1系统登录界面1.3 系统数据流程分析2数据库概念结构设计根据流程图可以得到4张表,分别是:注册表(register)、评论表(Coinnlent)、登录表(login)信息查询表(search)(,1、注册表的数据项有:ID、昵称、密码、头像、地址、性别、邮箱、出生年、月、日。实体属性图如下:图2-1注册表图2、评论表的数据项有:ID、昵称、用户头像、评论内容、发布时间。实体属性图如下:图2-2评论表图3、登录表的数据项有:ID、昵称、登录时间。实体属性图如下:4、查询表的数据项有:ID、查询时间。实体属性图如下:由上述各实体及其属性可以得到实体间的关系图即E-R图,如下图:图2-5全局E-R图3数据库逻辑结构设计系统数据库名称为DONGNI,数据库包括:1、注册表(register);2、评论表(COmment);3、登录表(Iogin);4、查询表(search)。下面列出各个表的数据结构,如表3-13-4所示。表3T注册表(register)的数据结构列名描述数据类型是否空值idIDvarchar(20)NOname昵称varchar(50)NOpassword密码varchar(20)NOimg头像varchar(250)NOaddress地址varchar(200)NOsex性别Varchar(IO)NOemail邮箱varchar(50)NOdate_year出生年varchar(10)NOdate_month出生月varchar(10)NOdateday出生日varchar(10)NO表3-2评论表(ConImenI)的数据结构列名描述数据结构是否空值idIDvarchar(20)NOauthor昵称varchar(50)NOimg头像varchar(250)NOcontent评论内容textNOcreate_time发布时间datetimeNO表3-3登录表(IOgin)的数据结构列名描述数据结构是否空值idIDvarchar(20)NOname昵称varchar(50)NOlogin_time登录时间datetimeNO表3-4查询表(SearCh)的数据结构列名描述数据结构是否空值idIDvarchar(20)NOsearch_time查询时间datetimeNO4数据库物理结构设计4.1 SQLServer数据库及数据表的创建4.1.1 数据库创建CREATEDATABASEDONGNIONPRIMARY(NAMEJDONGNf,FILENAME=,DDONGNLmdf,SIZE10MB,NfAXSIZE=100MB,FILEGROWTH-10%)LOGON(NAMEJDONGNIog',FlLENAME二'D:DONGNI_log.Idf,SIZE:5MB,Filegrowth=IMB)GO对家资海管理as=0Lenovo-PC(SQLServer11.0.2100-«ECi11g库田系蜕激旦摩田班B左快席£JDONGNl三JRepoctServer9IlReportSefverTempDB任5安全住SQ会务8»馋SGftJEECBAJwaysOn副J用住,d管理KClIntegrationServices目录9FISQLSeveralSQlQueryZsqI-JCnWSter(Sa(55)×.-CREATEDATABASEDOOIOXPRIMARYNANE=*DOHGNI',FlLEHAffi='D:DOKNI.adf'.SIZEIONB.Kaxsize=100hb.F1LEGROI11H=1OLONNAME3'DONGNlJog'.FILENAME='D:DOHGM_log.ldf'.SIZE=5HB,FILEGROirrH=IMB)GO13消息命令已囱功完成。图4T数据库的创建图Cl系妩敦娼谆Eu鼓据号快邮SODONGNI£-J明B库关系阳田二聂,Sffl田同义月可卿S住田'ServiceBroker田存住一安全性SIjReportServer£IjReportServerTempDe田CJ安全性CJ震务福对象WCjSM田CjAtwaysOn商可用住$cj«a田dIntegrationServices目录EBesQlServerKS图4-2注册表的创建图4-3评论表的创建登录表的创建:USEDONGNIGOCREATETABLEloginidvarchar(20)notnull,default(getdateO)namevarchar(50)notnull,logintimedatetimenotnul1)GO查询表的创建:USEDONGNIGOCREATETABLEsearch(idvarchar(20)notnull,search_timedatetimenotnulldefault(getdateO)GO4.2数据完整性设计4.2.1主键约束的创建创建注册表id主键的约束:.Lenovopgdongni - dbo.retefSQLQUefy2.ql LDONGNl (a (55)US IenoVO pC (SQL Server 11.0.21 OO u ftHRS 一系统典RM ii JlMK写怩邪 & Il DONGNl «XJ知BWd事 田GB系螭表 GB "Tgles ffi 3 dbo.«xnment S a dtxk>9*> 图 3 dt×register dt×>SMf<name即SWOfd F addre¼ssexemail<Ute.yeaf date.m<h dte.<Uyvarch*r(20) varchar(SO) varchar(20) varchar(25O) VdrchM(ZOO) varchr(10) Vgrchar(SO) Vdrchar(IO) varchM(lO) VdrchM(IO) W树B*a同义同 一可得性Service Brokefa9tt U ReportServer U ReportServerTe<npD 2瓷全住 J图务灯象K住-(M«)估桁5欧俺W企Kfi22vM<har图4-4创建表ID主键的创建创建评论表createtime主键的约束:USEDONGNIGOALTERTABLEcommentADDCONSTRAINTPKY_timePRIMARYKEYclustered(create_time)GO4.2.2DEFAULT约束的创建创建查询表时的DEFAULT约束:USEDONGNIGOCREATETABLEsearchidvarchar(20)notnull,SCarCh_timedatetimenotnulldefault(gctdatcO)GO创建登录表时的DEFAULT约束:SQLQUefy2.ql L-DONGNI (a (S5)力也,包H .已 0 Ienovo-PC (SQL Server 11.0.2100 u3 -1W3R!S)J笨统闵RM图J败JfiiS0耶S (1 DONGNIid name logi.timewchar(20) WChar(SO)<Utctime允杵NUH e max*ffld系统表ffi Qi FileTMMes图 mern 3 dbo.loin 也 dbo.register 3 dbo.e4rch闺-陋二斡义闰叫电?性 U Setvke Broker的二*序使 (J ReportServer Ij ReportServerTefnpOB 皆口安全性,一般务灯象SiW士二AIwjysOn高可用H,WSI n Intcgration Sfvke¼ 曰农 £ SQI Server ft图4-5创建登录表时的DEFAULT约束4.2.3UNIQUE约束的创建创建登录表的UNIQUE约束:图4-6创建登录表UNIQUE约束创建查询表的UNlQUE约束:图4-7创建查询表UNlQUE约束4.3索引的创建创建注册表name索引:USEDONGNIGOCREATEINDEXIXnameONregister(name)GO创建评论表create_time索引:USEDONGNIGOCREATEINDEXIXcreatetimeONcomment(createtime)GO5数据库的操作5.1 数据操纵5.1.1 数据插入用户个人信息的插入(即注册):第一步:用户填入需要填写的信息,通过form将数据传递给register<formaction="register_l.jsp"method="post''><form>第二步:接收传递过来的数据,并判断是否有遗漏项,若无,连接到数据库,将用户的个人信息插入到注册表(register)中try(Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver”);连接Sql驱动Connectionconn=DriverManager.getConnection("jdbc:sqlserver:/localhost:1433;DatabaseName=DONGNI','sa',sql);/sql连接urlPreparedStatementstmt=conn.prepareStatement("INSERTINTOregister(id,name,password,img,address,sex,email,date_year,date-month,date-day)VALUES(?,?,?,?)>>?,?,?)”);Sql插入语句第三步:若注册成功,弹出注册成功的提示页面<body>恭喜用户<%=session.getAttribIlte("iname")%>注册成功!<p><ahref=i“dex,sp>点此继续<a><body>. . ConnfctioLConteM*ttlc n3 Mvervtister(HNMStrif<tOtject> *H>s)yt*mlit4ry .,一 «60 Gwnc Ubf*y >Aflr4Tt .1Z1Ubr*yR*li< ttlc eS in(5trinc) r>M>N%<StrirveObje<t> Mp - IteShMAP<StrIfHhOMcct();-p.put(i4",UMMt);Mp.put(wr*.Mf%P.pvtCwsM-x4,12J);Mp.9ut(aifla,a*Mtp ttM.(MJi.<upU2ei4 W 17<MM3.)pcv); p.Mt(-Mr*.p.put("*ilaf 17MMQQ.ci);>.pt(-y*ar,-199);K>.put(-octb-12);lp.WyJl3);tocX 】“ Mrrrrgiftfriatp);”Hm )(Scte.wt.prlM(格用六3.c*Mrve).il<CV (XQC)g-); )1M(Svte.vtpriM(京夕族宾立,(oo)-w);Syte.out.print;eci>ter<Bp)> IefmMedA ComcticMUtN (1) PAppikJtMMtl CkBM<M0owlc*MVwy<lipM pro 2014 J okw EtJ>MryCom11分用户清风飞IbiIIIQV (XQC)O电电-hopew VD' ThfMd Oeemc , DMmc ,Oeemc ADMmC 40emc DMmc Omc4Oe<nc Q OMnX / Demc图5T用户注册(java内部)(网页注册用户:如下)图5-2填写注册信息K>/口赢×L二:二一恭喜用户清风飞扬注册成功!O(L11)O哈哈点此继续图5-3注册成功评论信息的插入:第一步:从界面评论框获取输入的内容,用AJAX框架传递数据$.ajax(type:"post",url:"data.jsp"jdata:"content":content/'author":author,id":id,img":img,将中的信息传递入data,jsp并data接收一个返回值);第二步:将传递过来的信息放到HaShMaP接口中,并传入对应存储评论功能的程序booleanflag=ConneCtionUtil.SaveComment(map);调用保存评论函数out.print(flagP,success,i,fail,)j第三步:接收HaShMaP接口传递过来的信息,存入到数据库中(java代码)tryClass.forNamecom.microsoft.sqlserver.jdbc.SQLServerDriver”);连接Sql驱动Connectionconn=DriverManager.getConnection(',jdbc:sqlserver:/localhost:1433;DatabaseName=D0NGNI",sa",sql")5sql连接urlPreparedStatementstmt=conn.prepareStatement("INSERTINTOcomment(contentjauthor,id,img)VALUES(?,?,?,?)");SqI插入语句publicstaticvoidBain(Stringuargs)HaSwtaIXStri",ObjectMP=MWHaShMap<String,0bject>();ap.put(*id*fT);ap.put("Sntent”,"头©好售出间邀了J);ap.put(,author*,R');wp.put('ig,"httpwf>wen.so5.cop201Me312eil31132730-1938174951.jpg);Systee.out.println(sveCwent(ap);jireWTasfcWebMwr日COrtoteXaSawqPtpjKtMgration×"-'"-(terminatedCoMectionUtiI阿aApplicationD:BaiduYunDcnmloddniy«clip$e-pf(>-20UGA-offiir)e-in$taler-wnd(M%b<naryconi$unjavd.jdk7.win32jc86_64_1.7.0.u45binayaw.)true图5-4保存评论成功(java内部)(网页发布评论:如下)用户清风已当录!【注销】【清立此用户所有倡层】【食,我的个人僖愿】会如没有遢上你,我会不会有另一种人生?不曾育没有结果,我还是宁厚与你相逢.|同步到:QQ,网易,微博【叁他人信息】图5-5输入评论AI停海Et悲欢1图5-7F5刷新页面即可看到发布的评论5.1.2数据更新用户个人信息更新:第一步:申请修改信息后,将需要更新的数据通过form表单提交给Updateing页面<formaction="updateing,jsp"method=,post,><form>第二步:接收form提交过来的数据,连接到数据库,通过Sql语句中的UPdate对数据库对应的信息进行更新,并在页面上显示更新的结果tryClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver”);连接Sql驱动Connectionconn=DriverManager.getConnection("jdbc:sqlserver:/localhost:1433;DatabaseName=DONGNInj',sa"jMsqlM);/sql连接urlStringsql="updateregistersetname=?,password=?address=?,sex=?,email=?,date_year=?,date_month=?,date_day=?whereid=+id+”;SqI更新语句PreparedStatementstmt=conn.prepareStatement(sql);(网页更新操作:如下)雌个人信息图5-8在我的个人信息页面点击【更改我的个人信息】图5-9在对应栏目里填写需要修改的信息图5-10更新之后的用户个人信息5.L3数据删除用户评论内容清空:第一步:通过按钮获取用户清空评论内容的申请,并将此申请传递给deletedata中转站$.ajax(type:"post",url:"deletedata.jsp"jdata:”id”:id,/传递ID参数success:function(data);第二步:申请中转站,获取传递过来的申请并传递给java程序booleanflag=COnneCtionUtiLdeIeteCOmment(id);调用删除评论函数out.print(flag?,success,:,fail,1);第二步:java程序接收传递过来的申请,连接到数据库,对发出申请的id用户的评论内容进行删除清空操作Class.forName(,com.microsoft.sqlserver.jdbc.SQLServerDriver“);/连接Sql驱动Connectionconn=DriverManager.getConnection(ujdbc:sqlserver:/localhost:1433;DatabaseName=DONGNI,sa",sql")jsql连接urlStringsql="deletefromcommentwhereid=",+id+;Sql删除语句stmt=conn.prepareStatement(sql);图5-11清空个人评论内容(java内部)(网页清空评论内容:如下)我的动态TO/、 发杆 201507-10 00:13:39.223图5-12点击清空列表图5T3弹出清空结果窗口图5-14刷新即可查看到评论已清空遇上你,我会不会有另一种人生?不管有没有结果,我还是宁愿与你相逢。-07-1000:17:12.237爱空间很大开发活动空间很舒服看发署P2O15-O7-O923:16:16,66烦死了发帖2015。23:13:43627用户所有信息清空:分成三块:清空评论信息、清除个人信息以及清除登录信息获取用户的清空数据申请,从登录表(login)获取当前登陆的用户的ID,连接到数据库,分别从注册表(register)评论表(comment)以及登录表(login)中删除id为此ID的所有有关信息Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");连接sql驱动ConnectionConn=DriverManager.getConnection(,jdbc:sqlserver:/localhost:1433;DatabaseName=DONGNI"j"sa",sql");/sql连接urlStringsqll="deletefromregisterwhereid=+id+”;SqI删除语句Stringsql2="deletefromcommentwhereid=*"+id+”;SqI删除语句Stringsql3="deletefromloginwhereid=,+id+”;SqI删除语句PreparedStatementstmtl=connprepareStatement(sqll);PreparedStatementstmt2=conn,prepareStatement(sql2);PreparedStatementstmt3=connprepareStatement(sql3);,hSMmnnt,RkWa.coMm vc JKf SEE Ubary > u - 1m££ GQ Ge*e«k Ubr«y MWebArplr>k JlTl IJ.lUxMjr g W»Moc«MAWJClMfMaM , ccwmwn! d<u>p / <kM*d4U *drto*tfnpi toMP mgfmv4a>p/ -2R / 3“< MMCtfVjtp H×SM*9H>>x>mFSFHUlOWOtO.Stvde<<S<ore,tM ,WcbTmClis.orMar(v<<*.l<roM4t.«lrvtr.><,即rv*r<kUvr);Com<t>0M<oRrlw<<fcer.9ftCcftne<ti0n(>:$qoe*/lclot:UB;Dtbs*MeXKNGNT,w","$qle);StrincW&lete<roy”廿3*eidF4;StrbM(al24elete”<co三e*twher«14.,id."%tri11gMll*Ut介«k«in14.id;Prrr*4ttfwn«t«tltom.pr*fM*tt«ee«it<%411);PrerEMnQE2rora.prr*ttfwot(4U);,tUcom.pre(»»re$tMfeent(»qD);booXMft"<1»tot1.rarevtUde()>?rv:fl,bolnCAC*tet2.rM<v41pd*()>?trw:fl.bolnfla(>*tt).m<vUpdr<)>?tree:fal.com.<lM<);ttl.ctot();stat2.cle();*tet3.c>os();rwtrU""3W1心)-Ex<e<l0ee)(«e.9rifit$tMkTf*«e();r«tvti«<1mv)1*HEUrVI*1m;9MUttl<faW5"Mrc)(Mim<bf*<e"0;“”Kv*t.<w*.priM(aa三三PWMmwa,-);)1H3Ne.X.priHLm11ilfB0Qit*Mnit'(oo©>»;,rTMta4tf*noOGMaoteMtt>,rrotUmuux>M*,lr*tfKdCnm<b<xti(1)(4vAppcj6orftduV5ov*4CMCfny<ip*eJ.ltw*r*>*b<Mfy*0-1*un4jd*Jmi)?>6.64.1.7.O.w4S'lbrMW.i己-MII户*更SlHr(12', f *wftr1 ,Tred(m ,OM*non AoMmOnrh AOMmOnTh J OwmonTh > 0«Befnon b > Dw<non Th > Daemon Th A CkMmonTh用户清风已登录!【注销】【清空比用户所有信息】【直看我的个人信息】图5-15清空用户所有信息(java内部)(网页清空用户所有信息:如下)图5-16点击【清空此用户所有信息】>U后福唬户雕场三一清除数据成功!点此返回图5-17清除成功登录S躇反面ID与密码组合不匹配!返回图5T8再次登录就登不上去了5.2数据查询5.2.1单表查询查询评论内容:连接到数据库,查询评论表(CommCnt)中的所有评论内容Class.orazne("com.microsoft.sqlserver.jdbc.SQLServerDriver”);连接Sql驱动Connectionconn=DriverManager.getConnecton("jdbc:sqlserver:/localhost:1433;DatabaseName=DONGNInj',sa"jMsqlM);/sql连接urlstmt=conn.prepareStatement("SELECT*FROMcommentORDERBYcreate_timeDESC”);SqI选择语句rs=stmt.e×ecuteQuery();/ <ocnmtttj ,&U冲 dtedauj Jindexisp Jjuddj MF>和j* ,M加E(神 / r*U押 ttgntf_2fip nttet.j tetfjurf>.j>p 4xm9j / spd*rm)*-j KTESTPhfuowowd UdcntScorecbT«tpublicstaticvol!aaiA(Strincafs)List<HasMp<Strinc,Object>>NPS三fidco三wt();for(HasNp<Strif<fCbje<t>:卿s)5yste.out.prt(.frt('ME');Syste.out.pri三t(三三=三三三U");boo】Mafl”Gktt川();if(惆HMgOUtMw己港E用PIi关的标U,iLMte VM)to OC:<tenwttd> ConnectjooUti (133 APPiiU 6oc DM*YMownkMnyecpf 2014GAdiftew*3<iaM(3avaidk7.w632j36.6 B.殊不会有另一# 人生17ffvm. fturtM. - “*;腔制阳是H纵弓了aJjM总 *g<ta. JiESt朽,Igioe. =N睚IJb 金嵇自己妫T翻喏,断.ll-z ift95. 9WlSM8? 9999999999V9999999999 =BffW asssssgsagsgsssssv I图5-19查询所有评论内容(网页查询所有评论内容:如下));M图JThrWdDweorJ0wxJDlCWorJOMWOr*sdeteVrruin(SUJoleeW D*>or >Dwx /0ew JoieeW JDlWX JDiewior JO«idoYiMSmO BV S15IO m HtX S* ' OacWlS.nMn A7T.gw(Jhelowofthe20150710 CBW V5yst.out.prirt(i8itSiftWSS!才W先收!(ooo)*);150710BS图5-20用户登录后所有评论内容全部显示在页面上5.2.2多表查询多表查询可由多个单表查询代替完成,本系统采用的就是单表查询代替多表查询查询他人信息:第一步:通过form表单获取要查询对象的ID,并传递给loadjump.jsp处理<formaction="Loadjump.jsp"method="post”>请在下面的文本框内输入需要查询的用户ID<br><inputtype="text"nane"authorID"style="height:25px;"SiZe="52"><inputtype="submit"value=,fstyle="font-size:20px;,><form>第二步:接收传递过来的ID参数,连接到数据库,在注册表中(register)查询此ID是否存在,若存在,将此ID插入到查询表(search)中,跳转到PerinfO.jsp界面,并进入下一步;否则,返回到上一步继续查询IDClass.forName(,com.microsoft.sqlserver.jdbc.SQLServerDriver”);连接Sql驱动ConnectionConn=DriverManager.getConnection(',jdbc:sqlserver:/localhost:1433;DatabaseName=DONGNI",sa,sql")jsql连接urlStatementStmt=(Statement)Conn.CreateStatement();Stringsql=,select*fromregisterwhereid=”+14+”;541选择语句ResultSetrs=(ResultSet)stmt.executeQuery(sql);if(rs.next()PreparedStatementstmtl=conn.PrepareStatement(,insertintosearch(id)values(?)");/sql插入语句stmtl.setString(IjString.valuef(id);booleanflag=stmtl.executeUpdate()>0?true:false;stmtl.close();catch(Exceptionee)ee.printStackTrace();第三步:从查询表(search)中获取查询ID,分别调用java方法查询出此ID的个人信息以及所有评论内容<%Stringid=ConnectionUtil.findsearch