《数据库课程设计64270(33页).doc》由会员分享,可在线阅读,更多相关《数据库课程设计64270(33页).doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、- 数据库系统概论课程设计报告目 录 一、 实验目的二、 实验要求三、 实验题目四、 实验设计五、 实验小结一、实验目的:1. 加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平;2. 在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;3. 学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;4. 为毕业设计和以后工作打下必要基础。二、实验要求运用数据库基本理论与应用知识,在微机RDBMS(SQL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世
2、界的数据模型和数据文件,并对数据文件实施检索、更 新和控制等操作。 1 概念设计 2逻辑设计 订户(编号,姓名,住址);报刊目录(代号,名称,期刊,单价);订单(编号,代号,日期,起订期,终定期,订单量);投递卡(编号,代号,期号,份量);主码通过横线给出。该关系属于第一范式3完整性设计关系主码、外码约束三、实验题目(1)创建数据库的结构(2)创建各基本表的结构(3)编制输入子系统,完成数据的录入(4)检索地址为“太平路4890号”的订户信息(5)检索份数多于3的期号(6)检索订阅“01-01”报刊代号的订户名、报刊名、订阅份数(7)检索没有订阅“人民日报”的订户号(8)检索至少订阅“人民日报
3、”的订户名(9)检索至少订阅了“人民日报”的所有期号的订户号(10)检索未订阅代号为“03-01”报刊的订户名(11)检索被多个订户订阅的报刊之代号(12)增加一种报刊“04-01,经济信息报,周报,0.5”(13)删去报刊代号为“01-03”的报刊(14)把订户号“161213”改为“161225”(15)把“090104”订户所订的“01-03”报刊的截止日期改为12(16)检索订阅期在1到12月份的各种报刊的代号和总数(17)检索每种报刊的订阅总数,并给出报刊代号(18)统计各种报刊的订户数(19)输出如下报表: 订户姓名报刊名称期 号日 期起订期终订期份 数(20)输出操作结果和程序清
4、单课程设计补充内容:1. 创建视图:报刊订阅:查询出用户杨春花订阅情况(字段根据自己设计选择即可)2. 授权操作:请创建用户YANG ,并授予他可以查询,修改第一题所建视图的权限。3. 触发器操作:l 删除某一个用户的记录时,利用触发器实现级联删除,即删除其他表中该用户的相应信息l 更新起订期和终定期时,若字段值小于1或者大于12,请提示“数据无效”错误l 更新用户订阅报刊份数时,请输出订阅报刊总份数大于6份的用户姓名和订阅数量 订单(ORDER)订户号(CNO)日期(DATE)报刊代号(NMNO)起订期(START)终订期(TERM)份 数(QTY)09010183121501-010112
5、109010184012003-010406209010184010162-260106109010483120501-010112509010484013101-030205209020584071501-030912109020584062103-010712209020583120713-300112109020584053158-800712116041283122301-010112116041284031701-030412216041284062503-010708116121384093101-011112216121384031662-26040711674808401270
6、1-0102122 订户(CUSTOMER)编号(CNO) 姓名(NAME)住址(ADDR)090101 单明 北京路10号090104 杨春花 中山路4235号090205 陈卫星 汉府街1234号160412 李宇 光华门路784号161213 吴明镇 鼓楼街2107号167480 王文武 太平路4890号 报刊目录(NMTABLE)代号(NMNO)名称(TITLE)刊期(PERIOD)单价(PRICE)01-01人民日报 日报0.06701-03中国日报 周六报0.1003-01解放日报 日报0.03311-06物价市场 半月刊0.0413-30内蒙古科技报周报0.0358-80新疆社会
7、科学季刊0.6062-20四川中医 月刊0.35 投递卡(SENDING)订户号(CNO)报刊代号(NMNO)期号(ISSUE)份数(QTY)09010101-012407109010103-01134 209010162-26204 109010401-012407509010401-037840209020501-037840109020503-012401209020513-30780 109020558-80230 109020558-80231 116041201-012407116041201-037840216041201-012408116041201-037841216121
8、301-012407216121362-2645 1四、实验设计1-1创建数据库的结构1-2创建各基本表的结构在表“订单OR1”中将“订户号CNO”和“报刊代号NMNO”设置为主键,其中“订户号CNO”为表“订户CUSTOMER”的主键,“报刊代号NMNO”为表“报刊目录NMTABLE”的主键在表“订户CUSTOMER”中将“编号CNO”设置为主键在表“报刊目录NMTABLE”中将“代号NMNO”设置为主键在表“投递卡SENDING”中将“订户号CNO”和“期号ISSUE”设置为主键,其中“订户号CNO”为“订户CUSTOMER”的主键1-3 编制输入子系统,完成数据的录入代码段:INSERT
9、INTO OR1VALUES(167480,840127,01-01,02,12,2);结果1-4检索地址为“太平路4890号”的订户信息代码段SELECT *FROM CUSTOMERWHERE ADDR=太平路号;结果1-5检索份数多于3的期号代码段SELECT ISSUEFROM SENDINGGROUP BY ISSUEHAVING SUM(QTY)3;结果1-6检索订阅“01-01”报刊代号的订户名、报刊名、订阅份数代码段SELECT NAME,TITLE,QTY FROM OR1,CUSTOMER,NMTABLEWHERE OR1.NMNO=01-01 AND OR1.CNO=CU
10、STOMER.CNO AND NMTABLE.NMNO=01-01;结果1-7检索没有订阅“人民日报”的订户号代码段SELECT DISTINCT CNOFROM OR1WHERE OR1.CNO NOT IN(SELECT DISTINCT CNO FROM NMTABLE,OR1 WHERE TITLE=人民日报 AND NMTABLE.NMNO=OR1.NMNO 结果1-8检索至少订阅“人民日报”的订户名代码段SELECT NAMEFROM CUSTOMER,OR1,NMTABLEWHERE NMTABLE.TITLE=人民日报 AND OR1.NMNO=NMTABLE.NMNO AND
11、 CUSTOMER.CNO=OR1.CNO ;结果1-9检索至少订阅了“人民日报”的所有期号的订户号代码段SELECT DISTINCT S1.CNOFROM SENDING S1WHERE NOT EXISTS (SELECT * FROM SENDING S2,NMTABLE WHERE NMTABLE.TITLE=人民日报 AND S2.NMNO=NMTABLE.NMNO AND NOT EXISTS (SELECT * FROM SENDING S3 WHERE S1.CNO=S3.CNO AND S2.ISSUE=S3.ISSUE ) );结果1-10检索未订阅代号为“03-01”报
12、刊的订户名代码段SELECT DISTINCT NAMEFROM OR1,CUSTOMERWHERE OR1.CNO=CUSTOMER.CNO AND OR1.CNO NOT IN (SELECT OR2.CNO FROM OR1 OR2 WHERE OR2.NMNO=03-01 );结果1-11检索被多个订户订阅的报刊之代号代码段SELECT DISTINCT NMNOFROM OR1GROUP BY NMNOHAVING SUM(QTY)3;结果1-12增加一种报刊“04-01,经济信息报,周报,0.5”代码段INSERT INTO NMTABLEVALUES (04-01,经济信息报,周
13、报,0.5);结果1-13删去报刊代号为“01-03”的报刊代码段DELETEFROM NMTABLEWHERE NMTABLE.NMNO=01-03DELETEFROM OR1WHERE OR1.NMNO=01-03DELETEFROM SENDINGWHERE SENDING.NMNO=01-03;结果1-14把订户号“161213”改为“161225”代码段UPDATE OR1SET OR1.CNO=161225WHERE OR1.CNO=161213 UPDATE CUSTOMERSET CUSTOMER.CNO=161225WHERE CUSTOMER.CNO=161213 UPDA
14、TE SENDINGSET SENDING.CNO=161225WHERE SENDING.CNO=161213 ;结果1-15把“090104”订户所订的“01-03”报刊的截止日期改为12代码段UPDATE OR1SET TERM=12WHERE NMNO=01-03 AND CNO=090104;结果因为前面已经删除过,所以0行受影响1-16检索订阅期在1到12月份的各种报刊的代号和总数代码段SELECT NMNO, SUM(QTY)FROM OR1WHERE START=1 AND TERM=12GROUP BY NMNO ;结果1-17检索每种报刊的订阅总数,并给出报刊代号代码段SE
15、LECT NMNO,SUM(QTY)FROM OR1GROUP BY NMNO;结果1-18统计各种报刊的订户数代码段SELECT NMNO,count(CNO)FROM OR1GROUP BY NMNO;结果1-19输出如下报表:订户姓名报刊名称期 号日 期起订期终订期份 数代码段SELECT CUSTOMER.NAME 订户姓名,NMTABLE.TITLE 报刊名称,OR1.DATA 日期,OR1.START 起订期, OR1.TERM 终订期,OR1.QTY 份数FROM OR1,CUSTOMER,NMTABLEWHERE OR1.CNO=CUSTOMER.CNO AND OR1.NMN
16、O=NMTABLE.NMNO;结果1-20创建视图:代码段CREATE VIEW CUS_OR1AS SELECT OR1.CNO,NAME,DATA,NMNO,START,TERM,QTYFROM OR1,CUSTOMERWHERE OR1.CNO=CUSTOMER.CNO; 结果1-21查询出用户杨春花订阅情况代码段SELECT *FROM CUS_OR1WHERE NAME=杨春花;结果1-22授权操作:请创建用户YANG ,并授予他可以查询,修改第一题所建视图的权限。GRANT SELECT,UPDATEON CUS_OR1TO YANG;结果1-23触发器操作:先建外码OR1的外码代
17、码段ALTER TABLE OR1ADDCONSTRAINT PK_CNOFOREIGN KEY(CNO) REFERENCES CUSTOMER(CNO);结果代码段ALTER TABLE OR1ADDCONSTRAINT PK_NMNOFOREIGN KEY(NMNO) REFERENCES NMTABLE(NMNO);结果SENDING 的外码代码段ALTER TABLE SENDINGADDCONSTRAINT PK_CNO2FOREIGN KEY(CNO) REFERENCES CUSTOMER(CNO); 结果代码段ALTER TABLE SENDINGADDCONSTRAINT
18、PK_NMNO2FOREIGN KEY(NMNO) REFERENCES NMTABLE(NMNO);结果1-24删除某一个用户的记录时,利用触发器实现级联删除,即删除其他表中该用户的相应信息代码段CREATE TRIGGER DELECTERON CUSTOMERINSTEAD OF DELETE AS BEGINDECLARE CN1 NCHAR(12);SELECT CN1=CNO FROM DELETED;DELETE FROM OR1WHERE CNO=CN1;DELETE FROM SENDINGWHERE CNO=CN1;DELETE FROM CUSTOMERWHERE CNO
19、=CN1;END;结果代码段DELETEFROM CUSTOMERWHERE CNO=167480;结果1-25更新起订期和终定期时,若字段值小于1或者大于12,请提示“数据无效”错误代码段CREATE TRIGGER UP1ON OR1AFTER UPDATE AS BEGINDECLARE S SMALLINT;SELECT S=START FROM INSERTED;DECLARE T SMALLINT;SELECT T=TERM FROM INSERTED;IF (S12)BEGINPRINT 输入错误,请重新输入;ROLLBACK;END ;IF (T12)BEGINPRINT 输入
20、错误,请重新输入;ROLLBACK;END ;END;结果代码段UPDATE OR1SET START=14WHERE CNO=090205 AND NMNO=58-80;结果1-26更新用户订阅报刊份数时,请输出订阅报刊总份数大于6份的用户姓名和订阅数量代码段CREATE TRIGGER UP3ON OR1AFTER UPDATEAS BEGINIF UPDATE(QTY)BEGINSELECT NAME 用户姓名,SUM(QTY) 订阅份数FROM OR1,CUSTOMERWHERE OR1.CNO=CUSTOMER.CNOGROUP BY CUSTOMER.NAMEHAVING SUM(
21、QTY)6;END ;END;结果代码段UPDATE OR1SET QTY=7WHERE CNO=090104 AND NMNO=01-03;结果五、实验小结学了一个学期的数据库,总感觉很简单,但是真正的到自己操作的时候才发现并不简单,大错误就先不说,小错误就一个接一个,比如说错把双引号用作单引号,将表的名字取的和关键字一样,报错时却不知道错在哪儿了,在不同的数据库下新建查询,导致结果错误,中文字符与英语字符的转换,下划线“-”与连线“”区分等等。发现错误的过程就是一个学习的过程,虽然错的很多,但那也正是自己水平的体现,或者说那样也就减少了以后自己工作中的错误,吃一堑长一智。虽然很短的几天,但是对SQL语句了解的更多了一些,确实像老师所讲的那样,这是目前我所学的语言中最简单的一门了,很容易上手的,即便以前学的不认真,但是只要仔细的研究一下,还是会写一些简单的语句的,但是仅仅的局限于照葫芦画瓢还是不够的,要有自己的思路,这样才能真正的掌握到SQL,也只有这样才能对以后的工作有所帮助。-第 33 页-