数据库课程设计.docx

上传人:b****7 文档编号:11044397 上传时间:2023-02-24 格式:DOCX 页数:37 大小:3.44MB
下载 相关 举报
数据库课程设计.docx_第1页
第1页 / 共37页
数据库课程设计.docx_第2页
第2页 / 共37页
数据库课程设计.docx_第3页
第3页 / 共37页
数据库课程设计.docx_第4页
第4页 / 共37页
数据库课程设计.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

数据库课程设计.docx

《数据库课程设计.docx》由会员分享,可在线阅读,更多相关《数据库课程设计.docx(37页珍藏版)》请在冰豆网上搜索。

数据库课程设计.docx

数据库课程设计

《数据库系统概论》

课程设计报告

 

一、实验目的

二、实验要求

三、实验题目

四、实验设计

五、实验小结

 

一、实验目的:

1.加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平;

2.在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;

3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;

4.为毕业设计和以后工作打下必要基础。

二、实验要求

运用数据库基本理论与应用知识,在微机RDBMS(SQLServer)的环境上建立一个数据库应用系统。

要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。

1.概念设计

2.逻辑设计

订户(编号,姓名,住址);

报刊目录(代号,名称,期刊,单价);

订单(编号,代号,日期,起订期,终定期,订单量);

投递卡(编号,代号,期号,份量);

主码通过横线给出。

该关系属于第一范式

3.完整性设计

关系主码、外码约束

三、实验题目

(1)创建数据库的结构

(2)创建各基本表的结构

(3)编制输入子系统,完成数据的录入

(4)检索地址为“太平路4890号”的订户信息

(5)检索份数多于3的期号

(6)检索订阅“01-01”报刊代号的订户名、报刊名、订阅份数

(7)检索没有订阅“人民日报”的订户号

(8)检索至少订阅“人民日报”的订户名

(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)输出操作结果和程序清单

课程设计补充内容:

1.创建视图:

报刊订阅:

查询出用户杨春花订阅情况(字段根据自己设计选择即可)

2.授权操作:

请创建用户YANG,并授予他可以查询,修改第一题所建视图的权限。

3.触发器操作:

●删除某一个用户的记录时,利用触发器实现级联删除,即删除其他表中该用户的相应信息

●更新起订期和终定期时,若字段值小于1或者大于12,请提示“数据无效”错误

●更新用户订阅报刊份数时,请输出订阅报刊总份数大于6份的用户姓名和订阅数量

订单(ORDER)

订户号(CNO)日期(DATE)报刊代号(NMNO)起订期(START)终订期(TERM)份数

(QTY)

09010183121501-0101121

09010184012003-0104062

09010184010162-2601061

09010483120501-0101125

09010484013101-0302052

09020584071501-0309121

09020584062103-0107122

09020583120713-3001121

09020584053158-8007121

16041283122301-0101121

16041284031701-0304122

16041284062503-0107081

16121384093101-0111122

16121384031662-2604071

16748084012701-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.067

01-03中国日报周六报0.10

03-01解放日报日报0.033

11-06物价市场半月刊0.04

13-30内蒙古科技报周报0.03

58-80新疆社会科学季刊0.60

62-20四川中医月刊0.35

投递卡(SENDING)

订户号(CNO)报刊代号(NMNO)期号(ISSUE)份数(QTY)

09010101-0124071

09010103-011342

09010162-262041

09010401-0124075

09010401-0378402

09020501-0378401

09020503-0124012

09020513-307801

09020558-802301

09020558-802311

16041201-0124071

16041201-0378402

16041201-0124081

16041201-0378412

16121301-0124072

16121362-26451

四、实验设计

1-1创建数据库的结构

1-2创建各基本表的结构

在表“订单OR1”中将“订户号CNO”和“报刊代号NMNO”设置为主键,其中“订户号CNO”为表“订户CUSTOMER”的主键,“报刊代号NMNO”为表“报刊目录NMTABLE”的主键

在表“订户CUSTOMER”中将“编号CNO”设置为主键

在表“报刊目录NMTABLE”中将“代号NMNO”设置为主键

在表“投递卡SENDING”中将“订户号CNO”和“期号ISSUE”设置为主键,其中“订户号CNO”为“订户CUSTOMER”的主键

1-3编制输入子系统,完成数据的录入

代码段:

INSERT

INTOOR1

VALUES('167480','840127','01-01',02,12,2);

结果

1-4检索地址为“太平路4890号”的订户信息

代码段

SELECT*

FROMCUSTOMER

WHEREADDR='太平路号';

结果

1-5检索份数多于3的期号

代码段

SELECTISSUE

FROMSENDING

GROUPBYISSUE

HAVINGSUM(QTY)>3;

结果

1-6检索订阅“01-01”报刊代号的订户名、报刊名、订阅份数

代码段

SELECTNAME,TITLE,QTY

FROMOR1,CUSTOMER,NMTABLE

WHEREOR1.NMNO='01-01'ANDOR1.CNO=CUSTOMER.CNOANDNMTABLE.NMNO='01-01';

结果

1-7检索没有订阅“人民日报”的订户号

代码段

SELECTDISTINCTCNO

FROMOR1

WHEREOR1.CNONOTIN

(SELECTDISTINCTCNO

FROMNMTABLE,OR1

WHERETITLE='人民日报'ANDNMTABLE.NMNO=OR1.NMNO

结果

1-8检索至少订阅“人民日报”的订户名

代码段

SELECTNAME

FROMCUSTOMER,OR1,NMTABLE

WHERENMTABLE.TITLE='人民日报'ANDOR1.NMNO=NMTABLE.NMNO

ANDCUSTOMER.CNO=OR1.CNO;

结果

1-9检索至少订阅了“人民日报”的所有期号的订户号

代码段

SELECTDISTINCTS1.CNO

FROMSENDINGS1

WHERENOTEXISTS

(SELECT*

FROMSENDINGS2,NMTABLE

WHERENMTABLE.TITLE='人民日报'ANDS2.NMNO=NMTABLE.NMNOAND

NOTEXISTS

(SELECT*

FROMSENDINGS3

WHERES1.CNO=S3.CNOANDS2.ISSUE=S3.ISSUE

);

结果

1-10检索未订阅代号为“03-01”报刊的订户名

代码段

SELECTDISTINCTNAME

FROMOR1,CUSTOMER

WHEREOR1.CNO=CUSTOMER.CNOANDOR1.CNONOTIN

(SELECTOR2.CNO

FROMOR1OR2

WHEREOR2.NMNO='03-01'

);

结果

1-11检索被多个订户订阅的报刊之代号

代码段

SELECTDISTINCTNMNO

FROMOR1

GROUPBYNMNO

HAVINGSUM(QTY)>3;

结果

1-12增加一种报刊“04-01,经济信息报,周报,0.5”

代码段

INSERT

INTONMTABLE

VALUES('04-01','经济信息报','周报',0.5);

结果

1-13删去报刊代号为“01-03”的报刊

代码段

DELETE

FROMNMTABLE

WHERENMTABLE.NMNO='01-03'

DELETE

FROMOR1

WHEREOR1.NMNO='01-03'

DELETE

FROMSENDING

WHERESENDING.NMNO='01-03';

结果

1-14把订户号“161213”改为“161225”

代码段

UPDATEOR1

SETOR1.CNO='161225'

WHEREOR1.CNO='161213'

UPDATECUSTOMER

SETCUSTOMER.CNO='161225'

WHERECUSTOMER.CNO='161213'

UPDATESENDING

SETSENDING.CNO='161225'

WHERESENDING.CNO='161213';

结果

1-15把“090104”订户所订的“01-03”报刊的截止日期改为12

代码段

UPDATEOR1

SETTERM=12

WHERENMNO='01-03'ANDCNO='090104';

结果

因为前面已经删除过,所以0行受影响

1-16检索订阅期在1到12月份的各种报刊的代号和总数

代码段

SELECTNMNO,SUM(QTY)

FROMOR1

WHERESTART>=1ANDTERM<=12

GROUPBYNMNO;

结果

1-17检索每种报刊的订阅总数,并给出报刊代号

代码段

SELECTNMNO,SUM(QTY)

FROMOR1

GROUPBYNMNO;

结果

1-18统计各种报刊的订户数

代码段

SELECTNMNO,count(CNO)

FROMOR1

GROUPBYNMNO;

结果

1-19输出如下报表:

订户姓名报刊名称期号日期起订期终订期份数

代码段

SELECTCUSTOMER.NAME订户姓名,NMTABLE.TITLE报刊名称,OR1.DATA日期,OR1.START起订期,OR1.TERM终订期,OR1.QTY份数

FROMOR1,CUSTOMER,NMTABLE

WHEREOR1.CNO=CUSTOMER.CNOANDOR1.NMNO=NMTABLE.NMNO;

结果

1-20创建视图:

代码段

CREATEVIEWCUS_OR1

AS

SELECTOR1.CNO,NAME,DATA,NMNO,START,TERM,QTY

FROMOR1,CUSTOMER

WHEREOR1.CNO=CUSTOMER.CNO;

结果

1-21查询出用户杨春花订阅情况

代码段

SELECT*

FROMCUS_OR1

WHERENAME='杨春花';

结果

1-22授权操作:

请创建用户YANG,并授予他可以查询,修改第一题所建视图的权限。

GRANTSELECT,UPDATE

ONCUS_OR1

TOYANG;

结果

1-23触发器操作:

先建外码

OR1的外码

代码段

ALTERTABLEOR1

ADD

CONSTRAINTPK_CNO

FOREIGNKEY(CNO)REFERENCESCUSTOMER(CNO);

结果

代码段

ALTERTABLEOR1

ADD

CONSTRAINTPK_NMNO

FOREIGNKEY(NMNO)REFERENCESNMTABLE(NMNO);

结果

SENDING的外码

代码段

ALTERTABLESENDING

ADD

CONSTRAINTPK_CNO2

FOREIGNKEY(CNO)REFERENCESCUSTOMER(CNO);

结果

代码段

ALTERTABLESENDING

ADD

CONSTRAINTPK_NMNO2

FOREIGNKEY(NMNO)REFERENCESNMTABLE(NMNO);

结果

1-24删除某一个用户的记录时,利用触发器实现级联删除,即删除其他表中该用户的相应信息

代码段CREATETRIGGERDELECTER

ONCUSTOMER

INSTEADOFDELETE

AS

BEGIN

DECLARE@CN1NCHAR(12);

SELECT@CN1=CNO

FROMDELETED;

DELETE

FROMOR1

WHERECNO=@CN1;

DELETE

FROMSENDING

WHERECNO=@CN1;

DELETE

FROMCUSTOMER

WHERECNO=@CN1;

END;

结果

代码段

DELETE

FROMCUSTOMER

WHERECNO='167480';

结果

1-25更新起订期和终定期时,若字段值小于1或者大于12,请提示“数据无效”错误

代码段

CREATETRIGGERUP1

ONOR1

AFTERUPDATE

ASBEGIN

DECLARE@SSMALLINT;

SELECT@S=START

FROMINSERTED;

DECLARE@TSMALLINT;

SELECT@T=TERM

FROMINSERTED;

IF(@S<1OR@S>12)

BEGIN

PRINT'输入错误,请重新输入';

ROLLBACK;

END;

IF(@T<1OR@T>12)

BEGIN

PRINT'输入错误,请重新输入';

ROLLBACK;

END;

END;

结果

代码段

UPDATEOR1

SETSTART=14

WHERECNO='090205'ANDNMNO='58-80';

结果

1-26更新用户订阅报刊份数时,请输出订阅报刊总份数大于6份的用户姓名和订阅数量

代码段

CREATETRIGGERUP3

ONOR1

AFTERUPDATE

ASBEGIN

IFUPDATE(QTY)

BEGIN

SELECTNAME用户姓名,SUM(QTY)订阅份数

FROMOR1,CUSTOMER

WHEREOR1.CNO=CUSTOMER.CNO

GROUPBYCUSTOMER.NAME

HAVINGSUM(QTY)>6;

END;

END;

结果

代码段

UPDATEOR1

SETQTY=7

WHERECNO='090104'ANDNMNO='01-03';

结果

五、实验小结

学了一个学期的数据库,总感觉很简单,但是真正的到自己操作的时候才发现并不简单,大错误就先不说,小错误就一个接一个,比如说错把双引号用作单引号,将表的名字取的和关键字一样,报错时却不知道错在哪儿了,在不同的数据库下新建查询,导致结果错误,中文字符与英语字符的转换,下划线“-”与连线“—”区分等等。

发现错误的过程就是一个学习的过程,虽然错的很多,但那也正是自己水平的体现,或者说那样也就减少了以后自己工作中的错误,吃一堑长一智。

虽然很短的几天,但是对SQL语句了解的更多了一些,确实像老师所讲的那样,这是目前我所学的语言中最简单的一门了,很容易上手的,即便以前学的不认真,但是只要仔细的研究一下,还是会写一些简单的语句的,但是仅仅的局限于照葫芦画瓢还是不够的,要有自己的思路,这样才能真正的掌握到SQL,也只有这样才能对以后的工作有所帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1