2022年数据库系统原理实践任务书
1 软件功能学习部分
完成下列1~2题,并在实践报告中叙述过程,可适当辅以插图(控制在A4三页篇幅以内)
1)练习SQL Server或其他某个主流关系数据库管理系统软件的备份方式:数据和日志文件的脱机备份、系统的备份功能。
2)练习在新增的数据库上增加用户并配置权限的操作,通过用创建的用户登录数据库并且执行未经授权的SQL语句验证自己的权限配置是否成功。
2 SQL练习部分
假设在某个区域内的所有地点都存储在地点表中。该地区中的所有人员信息存储在人员表中。根据收集到的人员行程建立了疫情期间某个地区的人员行程表。
该地区的部分人员进行了核酸检测,检测结果保存在诊断表中。根据诊断表中的检测结果,对新冠确诊和无症状感染者的密切接触者进行隔离,密切接触者的信息存储到密切接触表中,隔离信息存储到隔离表中。隔离地点共设置了4个,并且每个隔离地点都有容量限制,隔离点的信息存储在隔离地点表中。
2.1 建表
1) 根据以上背景,请在DBMS中创建这些关系,包括主码和外码的说明,并写出指定关系的建表SQL语句
人员表【人员编号,姓名,电话】
person (id int, fullname char(20), telephone char(11))
主码为人员编号
地点表【地点编号,地点名称】
location (id int, location_name char(20))
主码为地点编号
行程表【行程编号,人员编号,所在地点编号,开始时间,结束时间】
itinerary (id int, p_id int, loc_id int, s_time datetime, e_time datetime)
主码为行程编号,
诊断表【诊断编号,人员编号,诊断日期,诊断结果】
diagnose_record (id int, p_id int, diagnose_date datetime, result int)
主码为诊断编号,诊断结果包括:1:新冠确诊,2:无症状感染者,3:正常
密切接触者表【密切接触编号,被接触者编号,接触日期,接触地点,病例人员编号】
close_contact (id int, p_id int, contact_date datetime, loc_id int, case_p_id int)
主码为密切接触编号
隔离表【隔离编号,被隔离人员编号,开始隔离日期,结束隔离日期,隔离地点编号,隔离状态】
isolation_record (id int, p_id int, s_date datetime, e_date datetime, isol_loc_id int, state int)
主码为隔离编号,隔离状态:1:正在隔离 2:隔离结束 3:转入医院
隔离地点表【隔离地点编号,隔离地点名,房间容量】
isolation_location (id int, location_name char(20), capacity int)
主码为隔离房间编号
2) 观察性实验
验证在设置外码时是否一定要参考被参照关系的主码,并在实验报告中简述过程和结果。
3) 数据准备
依据后续实验的要求,向上述表格中录入适当数量的实验数据,从而对相关的实验任务能够起到验证的作用。
2.2 数据更新
1) 分别用一条sql语句完成对人员表基本的增、删、改的操作;
2) 批处理操作
将行程表中所有到达地点2的记录插入到新表location_record_2中。
3) 数据导入导出
通过查阅DBMS资料学习数据导入导出功能,并将任务2.1所建表格的数据导出到操作系统文件,然后再将这些文件的数据导入到相应空表。
4) 观察性实验
建立一个关系,但是不设置主码,然后向该关系中插入重复元组,然后观察在图形化交互界面中对已有数据进行删除和修改时所发生的现象。
5) 触发器实验
编写一个触发器,用于实现以下完整性控制规则:
当隔离表中的某位隔离人员在诊断表中的诊断结果为“1:新冠确诊”,将隔离状态从“1”改成“3”。
2.3 查询
请分别用一条SQL语句完成下列各个小题的需求:
1) 查询截至目前的人流量大于30的地点,并按照从高到低排序
2) 查询出每个隔离地中正在进行隔离的人数,并按数量由多到少排序
3) 查询行程表中连续行程中的一对行程地点(例如,方斯雪,在2021-02-02 03:02:12至2021-02-02 03:51:12 在博物馆中,2021-02-02 03:51:12 至 2021-02-02 04:23:12出现超市中,输出【姓名,重合时间,起始地点id,起始地点,结束地点id,结束地点】,查询结果如下图所示)
4) 查询贾涵山的行程情况
5) 查询地名中带有‘店’字的地点名称
6) 新发现一位确诊者,已知他在2021.2.2日20:05:40到21:25:40之间在“活动中心”,查询他接触到的人员的名字
7) 查询正在使用的隔离区名(使用DISTINCT关键字)
8) 查询有出行记录的人员(使用EXISTS关键字)
9) 查询没有达到地点“Today便利店”的人数(使用NOT EXISTS 关键字)
10) 查询去过所有地点的人员
11) 新建一个视图,里面有每个隔离点的id,名称,已用房间,容量
12) 从视图中查询还有空房间的隔离点的剩余房间数目
13) 查询靳宛儿传染的人有哪些
14) 查询每个地点的密切接触者的数量
15) 查询感染人数最多的用户的名字和感染人数
16) 查询2021-02-02 10:00:00到14:00:00,行程记录最频繁的五个人及行程记录数目
2.4 了解系统的查询性能分析功能(选做)
选择上述2.3任务中某些较为复杂的SQL语句,查看其执行之前系统给出的分析计划和实际的执行计划,记录观察的结果,并对其进行简单的分析。
2.5 DBMS函数及存储过程(选做)
1) 编写一个依据人员编号计算其达到所有地点的次数的自定义函数,并利用其查询至少到达过3个地点的人员。
2) 尝试编写DBMS的存储过程,建立每个隔离点的人数统计表,并通过存储过程更新该表。
3 数据库应用系统设计
自行选择所擅长的DBMS软件以及数据库应用系统(客户端程序或者网站)的程序开发工具,参考后面的题目例子,拟定一个自己感兴趣的数据库应用系统题目,完成该小型数据库应用系统的设计与实现工作。主要内容包括:需求调研与分析、总体设计、数据库设计、详细设计与实现、测试等环节的工作。
下列题目作为选题背景参考,也可依据这些题目拟定一个自己感兴趣的具有类似工作量和复杂程度的课题。并在DBMS的交互式界面中验证事务机制的执行效果。