大数据库课程设计报告材料完整版文档格式.docx
- 文档编号:4795052
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:30
- 大小:312.98KB
大数据库课程设计报告材料完整版文档格式.docx
《大数据库课程设计报告材料完整版文档格式.docx》由会员分享,可在线阅读,更多相关《大数据库课程设计报告材料完整版文档格式.docx(30页珍藏版)》请在冰点文库上搜索。
TEACHER(tno,tname,phone,salary)tno是主码
COURSE(cno,cname,department,credit)cno是主码
SECTION(secno,cno,tno,sqty)secno、tno、cno是主码,cno、tno是外码
ENROLL(secno,cno,sno,grade)cno,sno是主码,cno,sno是外码
3.系统功能结构
4.完整性设计
/*
包含:
关系主码、外码、CHECK约束。
并给出相应的SQL语句*/
COURSE的完整性约束:
cnoCHAR(10)PRIMARYKEY
STUDENT的完整性约束:
snoCHAR(10)PRIMARYKEY
TEACHER的完整性约束:
tnoCHAR(10)PRIMARYKEY
SECTION的完整性约束:
PRIMARYKEY(secno,tno,cno),
FOREIGNKEY(tno)REFERENCESTEACHER(tno),
FOREIGNKEY(cno)REFERENCESCOURSE(cno)
ENROLL的完整性约束:
PRIMARYKEY(cno,sno),
FOREIGNKEY(sno)REFERENCESSTUDENT(sno),
三、系统的实现
题目2
1.创建数据库
创建名为“SCTE”的数据库
2.创建各基本表
CREATETABLECOURSE
(cnoCHAR(10)PRIMARYKEY,
cnameCHAR(30),
departmentCHAR(30),
creditSMALLINT
);
CREATETABLESTUDENT
(snoCHAR(10)PRIMARYKEY,
snameCHAR(30),
addressCHAR(30),
zipCHAR(10),
cityCHAR(20),
stateCHAR(10),
sexCHAR
(2)
CREATETABLETEACHER
(tnoCHAR(10)PRIMARYKEY,
tnameCHAR(20),
phoneCHAR(10),
salaryNUMERIC(10,2)
CREATETABLESECTION
(secnoCHAR
(2),
tnoCHAR(10),
cnoCHAR(10),
sqtyINT,
PRIMARYKEY(secno,tno,cno),
FOREIGNKEY(tno)REFERENCESTEACHER(tno),
FOREIGNKEY(cno)REFERENCESCOURSE(cno)
CREATETABLEENROLL
(cnoCHAR(10),
seconCHAR
(2),
snoCHAR(10),
gradeINT,
PRIMARYKEY(cno,sno),
FOREIGNKEY(sno)REFERENCESSTUDENT(sno),
3.完成数据的录入
COURSE表录入数据
INSERT
INTOCOURSE
VALUES('
450'
'
WesternCivilization'
History'
3'
);
730'
CalculusIv'
Math'
4'
290'
EnglishComposition'
English'
480'
CompilerWriting'
ComputerScience'
SELECT*FROMCOURSE
STUDENT表录入数据
INTOSTUDENT
148'
Susanpowell'
534EastRiverDr'
19041'
Haverford'
PA'
F'
210'
BobDawson'
120SouthJefferson'
02891'
Newport'
RI'
M'
298'
HowardMansfield'
290WynkoopDrive'
22180'
Vienna'
VA'
348'
SusanPugh'
534EastHamptonDr'
06107'
Hartford'
CN'
349'
JoeAdams'
73EmmersonStreet'
19702'
Newark'
DE'
354'
JanetLadd'
44110thStreet'
18073'
Pennsburg'
410'
BillJone'
120SouthHarrison'
92660'
CA'
473'
CarolDean'
983ParkAvenue'
02169'
Boston'
MA'
548'
Allenthomas'
238WestOxRoad'
60624'
Chicago'
IL'
558'
ValShipp'
238WestportRoad'
60556'
649'
JohnAnderson'
473EmmoryStreet'
10008'
NewYork'
NY'
654'
JanetYhomas'
4416thStreet'
16510'
Erie'
SELECT*FROMSTUDENT
TEACHER录入数据
INTOTEACHER
303'
Dr.Horn'
257-3049'
27540.00);
Dr.Lowe'
257-2390'
31450.00);
430'
Dr.Engle'
56-4621'
38200.00);
VALUES(180,'
Dr.Cooke'
257-8088'
29560.00);
VALUES(560,'
Dr.Olsen'
257-8086'
31778.00);
VALUES(784,'
Dr.Scango'
257-3046'
32098.00);
SELECT*FROMTEACHER
SECTION表录入数据
INTOSECTION
1'
2);
6);
3);
180'
2'
560'
784'
SELECT*FROMSECTION
ENROLL表录入数据
INTOENROLL
0'
SELECT*FROMENROLL
COURSE
STUDENT
TEACHER
SECTION
ENROLL
4.检索系名为“Math”和“English”的课程信息
SELECT*
FROMCOURSE
WHEREdepartment='
ORdepartment='
5.按字母顺序列出教师姓名和电话号码
SELECTtname,phone
FROMTEACHER
ORDERBYtname
6.检索电话号码不是以“257”打头的教师姓名和电话号码
WHEREphonenotlike'
257%'
7.检索数学系所有成绩大于3的课程名、系名、学分
SELECTcname,department,credit
WHEREcnoIN(SELECTcno
FROMENROLL
WHEREgrade>
3ANDcno='
8.检索没有选修任何课的学生姓名、学号
SELECTsno,sname
FROMSTUDENT
WHERENOTEXISTS(SELECT*
WHERESTUDENT.sno=ENROLL.sno);
9.检索没有选修课程“CalculusIv”的学生学号
SELECTsno
WHEREsnoNOTIN
(SELECTSTUDENT.sno
FROMCOURSE,STUDENT,ENROLL
WHEREcname='
ANDCOURSE.cno=ENROLL.cno
ANDSTUDENT.sno=ENROLL.sno);
*10.检索至少选修教师“Dr.Lowe”所开全部课程的学生学号
SELECTDINSTINCTsno
FROMENROLLENROLLX
WHERENOTEXISTS
(SELECT*
FROMENROLLENROLLY
WHEREcnoin(
SELECTcno
FROMTEACHER,SECTION,
WHEREtname='
ANDTEACHER.tno=SECTION.tno)
ANDNOTEXISTS
(SELECT*
FROMENROLLENROLLZ
WHEREENROLLZ.sno=ENROLLX.sno
ANDENROLLZ.cno=ENROLLY.cno))
(修改数据验证,该老师教授课程号为730和500,只有学号148的学生同时选择了这两门课)
结果
11.检索每门课学生登记的人数、相应的课程名、课程号、分组号
SELECTDISTINCTsecno,ENROLL.cno,cname,sqty
FROMENROLL,COURSE,SECTION
WHERESECTION.cno=ENROLL.cno
ANDCOURSE.cno=ENROLL.cno
12.检索选修两门以上课程的学生姓名
SELECTsname
WHEREsnoin(SELECTsno
GROUPBYsno
HAVINGCOUNT(*)>
2)
13.检索只有男生选修的课程和学生名
SELECTcname,sname
FROMCOURSE,STUDENT,ENROLL
WHERESTUDENT.sno=ENROLL.sno
ANDCOURSE.cno=ENROLL.cno
ANDCOURSE.cnoin
(SELECTcno
WHEREcnonotin
(SELECTDISTINCTcno
FROMSTUDENT,ENROLL
WHEREsex='
andSTUDENT.sno=ENROLL.sno))
14.检索所有学生都选修的课程名、学生名、授课教师名、该生成绩
SELECTcname,sname,tname,grade
FROMSTUDENT,TEACHER,SECTION,ENROLL,COURSE
WHERECOURSE.cno=ENROLL.cno
ANDSTUDENT.sno=ENROLL.sno
ANDTEACHER.tno=SECTION.tno
ANDSECTION.cno=ENROLL.cno
ANDSECTION.secno=ENROLL.secon
ANDCOURSE.cno=(SELECTcno
FROMENROLL
GROUPBYcno
HAVINGCOUNT(*)=12)
15.删去名为“JoeAdams”的所有记录
DELETE
WHEREsname='
;
16.把教师“Scango”的编号改为“666”
UPGRADETEACHER
SETtno='
666'
WHEREtname='
Dr.Scango'
17.统计教师“Engle”教的英语课的学生平均分
SELECTAVG(grade)AVG
FROMENROLL
WHEREgradein(SELECTgrade
FROMTEACHER,SECTION,ENROLL
ANDENROLL.secno=SECTION.secno)
18.统计各门课程的选课人数
SELECTCOURSE.cname,COUNT(ENROLL.sno)
FROMENROLL,COURSE
WHEREENROLL.cno=COURSE.cno
GROUPBYCOURSE.cname;
19.输出如下报表:
学生名
课程名
教师名
成绩
SELECTsname学生名,cname课程名,tname教师名,grade成绩
FROMENROLL,STUDENT,COURSE,TEACHER,SECTION
WHEREENROLL.sno=STUDENT.sno
ANDSECTION.cno=COURSE.cno
ANDENROLL.secno=SECTION.secno
ANDENROLL.cno=SECTION.cno
ANDSECTION.tno=TEACHER.tno
*20.定义并验证触发器,当登记表增加一条新的记录时,自动在分组表中更新相应属性。
CREATETRIGGERENROLL_1
ONENROLL
AFTERINSERT
AS
UPDATESECTION
SETsqty=sqty+1
FROMSECTION,inserted
WHEREinserted.secno=SECTION.secno
ANDo=SECTION.cno
验证结果:
)
FROMSECTION
原始数据
执行结果
四、课程设计小结
在本次课设之前,我已经在前段学习期间上机编写过类似相关的SQL语句来完成对于学生-课程-选课的信息查询,这次在原先实验的基础上添加了分组和教师表,创建数据库、基本表和录入数据的过程与上机实验基本相同,因此很容易就完成了前三个步骤,在这个过程中对于数据库、表的创建以及数据的输入的操作都更加的熟练。
题目4-19都是对于表中数据进行查询、修改、删除等操作,并且运用了ORDERBY、GROUPBY等功能短语以及COUNT、AVG等聚集函数。
前两题都是基本的查询,比较简单,但由于输入数据时Dr.Engle中的‘.’多按了一个空格,结果在调试的时候出现的是错误的结果,结果不正确(见截图
}。
第10题是本次课设最难的题目,自己也尝试着去做,但是由于理解的失误以及数据的巧合性,错误的SQL语句得出的结果却是正确的。
这就导致了自己以为解决了这道难题,以至于在给老师检查的时候被指出严重的错误,感到很羞愧。
后来仔细分析题意,按照所有的关键字来编写查询语句,参照书上关于notexists语句以及嵌套循环的语句,用谓词演算将题目转换成逻辑运算,等价为“没有这样课程y,老师Dr.Lowe教授了这门课,而学生X没有选”。
p表示“老师教授了课程y”,q表示“学生X选了课y”,等价于┐ョy(p∧┐q)。
参照书上的例题,分层次地编写功能语句。
因为题目的巧合性所以在检验时修改了数据,添加了该老师新开另一门课,只有学号148的学生同时选择了这门老师的两门课。
然后再去验证结果发现是正确的。
第13题的题目刚开始理解的不透彻,所以直接查询了男生选修的课程,得到的结果有10个,但照表检查可以看出有些课程仍是有女生选的,与题目“只有男生选修”的条件不符,因此重新分析,发现可以使用嵌套查询先用子查询把女生选择的课程选出来,然后父查询在子查询的结果之外(notin)查询,这样就把女生选修的课程出去,这样就避免出现选择的课程男、女生都选修的错误。
(见截图)
第15、16题是对于学生、教师表的修改和删除。
在执行过程中程序一直报错,始终找不出问题所在。
后来经过询问同学,发现SECTION和ENROLL表中引用了这两个表中的sno和tno,由于其引用关系,所以无法对于这两个表进行修改。
因此需要先删除外码的引用关系,然后才能对其进行修改
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课程设计 报告 材料 完整版