2024年江西省职业院校技能大赛中职组“数据库应用“竞赛样题解析

2024年江西省职业院校技能大赛中职组"数据库应用"竞赛样题解析

一、赛项背景
本赛项内容基于数据库课程教学标准及人才培养目标,引领相关 专业课程改革创新,促进高等职业院校信息类相关专业建设,培养技能型人才;产教融合、校企合作,通过赛项展示和提高教师的数据库 教学科研能力,提升学生从事数据库相关岗位的适配性,提供数据库 领域的高素质技术技能型人才。全面考察中职学生在数据库概念设计、逻辑设计、物理设计、数据查询与分析、数据库部署与维护、数据库备份与恢复等知识、技术技能以及职业素养能力;全面检验学生在数据库方面的工程实践能力和创新能力;以高水平赛事引领职业教育高 质量发展,发挥树旗、导航、定标、催化作用。
二、竞赛内容
赛卷分模块A、模块B 和模块C 三个部分。
在这里插入图片描述
三、成果物提交
“数据库应用”赛项参赛选手须按照三个模块的任务要求完成对应的成果物并提交。模块 A、C 在竞赛平台中完成考核并提交,无需额外再提交成果物。模块 B 的成果物按照任务要求命名并放至对应模块文件夹下。
比赛结束时,选手须将完成的模块 B 成果物文件放至以选手工位号命名的文件夹,并复制到提前发放给选手的 U 盘中提交给现场裁判。

四、竞赛注意事项
提交的成果物资源内容中,不能填写与选手相关的信息,如赛位号、姓名和院校。如出现上述标记,成绩按照零分处理。

模块A:数据库理论

一、模块考核点
本模块分值为 15 分。
本模块采用机考方式,试题为单选题、多选题、判断题等,主要考查从事本职业应掌握的基础知识、专业知识、课程思政等内容。包括但不限于:数据库基础理论、SQL 语言与查询优化、数据库设计与建模、事务与并发控制、数据库索引与性能优化、数据库安全、数据库备份与恢复、分布式数据库与大数据处理、存储引擎、计算机网络与数据库的交互、服务器配置与数据库管理、相应的法律法规及课程思政等内容。

二、模块任务
单选题
1.以下哪个 SQL 语句用于插入数据?
(A)INSERT
(B) SELECT
(C) DELETE
(D) UPDATE
(A)INSERT 语句用于向表中插入数据。SELECT 用于查询数据,DELETE 用于删除数据,UPDATE 用于更新数据。所以答案是 A。
2.关系数据库的主要特点是?
(A) 数据是树状结构
(B) 数据存储在表中
(C) 数据存储在文件中
(D) 数据没有固定结构
(B)关系数据库的主要特点是数据存储在表中,通过表之间的关系来组织和管理数据。数据是树状结构一般是层次数据库的特点;数据存储在文件中表述太宽泛且不是关系数据库主要特点;关系数据库中数据是有固定结构的表形式。所以答案是 B。
3.在 MySQL 中,以下哪个命令用于删除表?
A)DROP
B)DELETE
C)REMOVE
D)TRUNCATE
(A)在 MySQL 中,DROP 命令用于删除表。DELETE 用于删除表中的数据,REMOVE 不是 MySQL 中用于删除表的标准命令,TRUNCATE 用于快速删除表中的所有数据但保留表结构。所以答案是 A。

4.哪个事务隔离级别可以防止脏读,但允许不可重复读?
A)可重复读
B)读未提交
C)读已提交
D)序列化
(C)读已提交的事务隔离级别可以防止脏读,但允许不可重复读。可重复读隔离级别可防止脏读和不可重复读;读未提交允许脏读;序列化可防止脏读、不可重复读和幻读,是最高隔离级别。所以答案是 C。
5.以下哪种类型的索引会强制表中的每一条记录唯一?
A)聚簇索引
B)非聚簇索引
C)唯一索引
D)全文索引
(C)唯一索引会强制表中的每一条记录在索引列上唯一。聚簇索引是一种数据存储方式,它决定了表中数据的物理存储顺序;非聚簇索引是与表数据分开存储的索引;全文索引主要用于文本内容的快速检索。所以答案是 C。
多选题
1.在数据库设计中,以下哪些是规范化设计的目标?
A)消除数据冗余
B)优化查询速度
C)确保数据的一致性
D)增加事务隔离性
(A、C)规范化设计的主要目标是消除数据冗余和确保数据的一致性。优化查询速度不一定是规范化设计的直接目标,规范化过度可能还会影响查询速度;增加事务隔离性与规范化设计关系不大。所以答案是 A、C。
2.以下哪些语句用于修改数据库中的数据?
A)INSERT
B)UPDATE
C)DELETE
D)SELECT
(B、C)UPDATE 语句用于修改表中的已有数据,DELETE 语句用于删除表中的数据,这两个操作都是对数据库中原有的数据进行改变。INSERT 用于插入新数据,SELECT 用于查询数据。所以答案是 B、C。
3.关于数据库的 ACID 特性,以下哪些是正确的?
A)A 代表原子性
B)C 代表一致性
C)I 代表隔离性
D)D 代表可用性
(A、B、C)数据库的 ACID 特性中,A 代表原子性(Atomicity),即事务是一个不可分割的工作单位;C 代表一致性(Consistency),事务完成时,数据必须处于一致状态;I 代表隔离性(Isolation),多个事务并发执行时,相互之间要隔离;D 代表持久性(Durability),而不是可用性。所以答案是 A、B、C。
4.以下哪些是 MySQL 的常用存储引擎?
A)InnoDB
B)MyISAM
C)MEMORY
D)Oracle
(A、B、C)InnoDB、MyISAM、MEMORY 都是 MySQL 的常用存储引擎。Oracle 是另一种数据库管理系统,不是 MySQL 的存储引擎。所以答案是 A、B、C。
5.以下哪些是数据库备份的常见类型?
A)全备份
B)增量备份
C)差异备份
D)快照备份
(A、B、C、D)全备份是对整个数据库进行完整备份;增量备份是只备份自上次备份(全备份或增量备份)以来更改的数据;差异备份是备份自上次全备份以来更改的数据;快照备份也是一种常见的备份方式,通过创建数据库的快照来实现备份。所以答案是 A、B、C、D。
判断题
1.数据库中的外键约束用于确保数据的完整性。
A)正确
B)错误
(A)正确。外键约束用于建立表与表之间的关系,通过引用其他表的主键或唯一键来确保数据的完整性,防止出现无效的关联数据。
2.SQL 中的 GROUP BY 子句用于对查询结果进行排序。
A)正确
B)错误
(B)错误。SQL 中的 GROUP BY 子句用于对查询结果按照指定的列进行分组,而不是排序。ORDER BY 子句才用于对查询结果进行排序。
3.数据库索引越多,查询速度就一定越快。
A)正确
B)错误
(B)错误。虽然索引可以提高查询速度,但并不是数据库索引越多查询速度就一定越快。过多的索引会增加数据插入、更新和删除操作的开销,可能反而降低整体性能。
4.在事务中,如果一条操作失败,整个事务会回滚到开始状态。
A)正确
B)错误
(A)正确。在事务中,如果一条操作失败,根据事务的原子性,整个事务会回滚到开始状态,以保证数据的一致性。
5.在数据库中,主键可以为空。
A)正确
B)错误
(B)错误。在数据库中,主键是用于唯一标识表中的每一条记录的,主键列的值不可以为空,必须是唯一且非空的值。

模块B:数据库设计与运维

一、模块考核点模块分值 45 分。
本模块主要考察选手在数据库设计和维护中的综合能力。选手需围绕给定的业务场景和需求描述,详细分析业务流程,识别关键实体和流程需求,理解数据流动和交互,设计合理的实体关系图(ER 图) 或数据流图,定义实体、属性及其相互关系,确保数据的完整性和规范化。在设计阶段,选手需合理规划字段类型、主键、外键约束,并构建数据库表结构,完成数据库的概念设计、逻辑设计和物理设计全过程。
题目:简化版学校信息管理系统数据库设计
背景描述:

某学校需要开发一个管理系统来处理日常运营中的关键业务,包括学生管理、教师管理、课程安排和成绩管理。该系统需要支持日常的教学流程,确保数据的完整性,并能够高效地查询学生和教师的信息及其关联的课程和成绩。
需求描述:
1.学生信息管理:

记录学生的基本信息,包括:学生 ID、姓名、性别、出生日期、联系方式、年级、紧急联系人信息。
每个学生可以注册多门课程,且每门课程有对应的成绩。

2.教师信息管理:

记录教师的基本信息,包括:教师 ID、姓名、科目 ID、职称、联系方式。
每个教师可以教授多门课程,且负责对应学生的成绩记录。

3.课程管理:

记录课程的基本信息,包括:课程 ID、课程名称、课程描述、教师 ID(负责该课程的教师)、上课时间、课程学分。
每门课程由一个教师授课,并可以有多个学生注册。

4.成绩管理:

记录学生在每门课程中的成绩信息,包括:成绩 ID、学生 ID、课程 ID、成绩、评定时间。
每个学生在每门课程中只有一条成绩记录。

1.根据需求阶段收集的信息,设计一个概念模型(ER 图)。需包含需求描述所涉及的实体,并定义他们之间的关系。
2.基于概念模型,设计一个逻辑模型,定义表结构和字段,请你使用 SQL DDL 语句来表示这些设计。包括:每个表的字段及其合适的数据类型、确定字段的数据存储规格(例如,字符串字段的长度)、有意义的字段名称、主键和外键约束、表与表之间的关系。
3.在逻辑模型的基础上,进行物理设计。请考虑为表设计索引, 以优化查询性能。

答题思路
一、概念模型(ER图)设计
(一)实体
  1. 学生(Student):具有学生ID、姓名、性别、出生日期、联系方式、年级、紧急联系人信息等属性。
  2. 教师(Teacher):包含教师ID、姓名、科目ID、职称、联系方式等属性。
  3. 课程(Course):包括课程ID、课程名称、课程描述、教师ID、上课时间、课程学分等属性。
  4. 成绩(Grade):由成绩ID、学生ID、课程ID、成绩、评定时间等属性构成。
(二)关系
  1. 学生与课程的关系(多对多):一个学生可以注册多门课程,一门课程可以有多个学生注册,通过一个中间表(例如:Student_Course)来关联,该中间表包含学生ID和课程ID两个字段,分别作为外键指向学生表和课程表。
  2. 教师与课程的关系(一对多):一个教师可以教授多门课程,一门课程只能由一个教师授课,在课程表中设置教师ID作为外键指向教师表。
  3. 学生与成绩的关系(一对多):一个学生可以有多门课程的成绩记录,在成绩表中设置学生ID作为外键指向学生表。
  4. 课程与成绩的关系(一对多):一门课程会有多个学生的成绩记录,在成绩表中设置课程ID作为外键指向课程表。

以下是大致的ER图结构示意:

         +-----------------+
         |    Student      |
         +-----------------+
         | StudentID (PK)  |
         | Name            |
         | Gender          |
         | BirthDate       |
         | ContactInfo     |
         | GradeLevel      |
         | EmergencyContact|
         +-----------------+
                   |
                   | (Many-to-Many)
                   |
         +-----------------+
         | Student_Course  |
         +-----------------+
         | StudentID (FK)  |
         | CourseID (FK)   |
         +-----------------+
                   |
                   |
         +-----------------+
         |    Course       |
         +-----------------+
         | CourseID (PK)   |
         | CourseName      |
         | CourseDescription|
         | TeacherID (FK)  |
         | ClassTime       |
         | CourseCredit    |
         +-----------------+
                   |
                   | (One-to-Many)
                   |
         +-----------------+
         |    Teacher      |
         +-----------------+
         | TeacherID (PK)  |
         | Name            |
         | SubjectID       |
         | Title           |
         | ContactInfo     |
         +-----------------+
                   |
                   | (One-to-Many)
                   |
         +-----------------+
         |    Grade        |
         +-----------------+
         | GradeID (PK)    |
         | StudentID (FK)  |
         | CourseID (FK)   |
         | GradeValue      |
         | EvaluationTime  |
         +-----------------+
二、逻辑模型(SQL DDL语句)设计
(一)创建学生表(Student)
CREATE TABLE Student (
    StudentID VARCHAR(10) PRIMARY KEY,
    Name VARCHAR(50) NOT NULL,
    Gender ENUM('Male', 'Female') NOT NULL,
    BirthDate DATE NOT NULL,
    ContactInfo VARCHAR(100),
    GradeLevel VARCHAR(10),
    EmergencyContact VARCHAR(100)
);
(二)创建教师表(Teacher)
CREATE TABLE Teacher (
    TeacherID VARCHAR(10) PRIMARY KEY,
    Name VARCHAR(50) NOT NULL,
    SubjectID VARCHAR(10) NOT NULL,
    Title VARCHAR(20) NOT NULL,
    ContactInfo VARCHAR(100)
);
(三)创建课程表(Course)
CREATE TABLE Course (
    CourseID VARCHAR(10) PRIMARY KEY,
    CourseName VARCHAR(50) NOT NULL,
    CourseDescription VARCHAR(200),
    TeacherID VARCHAR(10),
    ClassTime VARCHAR(50),
    CourseCredit DECIMAL(3, 1) NOT NULL,
    FOREIGN KEY (TeacherID) REFERENCES Teacher(TeacherID)
);
(四)创建成绩表(Grade)
CREATE TABLE Grade (
    GradeID VARCHAR(10) PRIMARY KEY,
    StudentID VARCHAR(10),
    CourseID VARCHAR(10),
    GradeValue DECIMAL(5, 2),
    EvaluationTime TIMESTAMP,
    FOREIGN KEY (StudentID) REFERENCES Student(StudentID),
    FOREIGN KEY (CourseID) REFERENCES Course(CourseID)
);
(五)创建学生与课程关联表(Student_Course)
CREATE TABLE Student_Course (
    StudentID VARCHAR(10),
    CourseID VARCHAR(10),
    PRIMARY KEY (StudentID, CourseID),
    FOREIGN KEY (StudentID) REFERENCES Student(StudentID),
    FOREIGN KEY (CourseID) REFERENCES Course(CourseID)
);
三、物理设计(索引优化)
(一)学生表(Student)

为了提高根据学生ID快速查询学生信息的性能,可以在学生表的 StudentID 字段上创建索引:

CREATE INDEX idx_student_id ON Student(StudentID);
(二)教师表(Teacher)

在教师表的 TeacherID 字段上创建索引,便于根据教师ID快速查询教师信息:

CREATE INDEX idx_teacher_id ON Teacher(TeacherID);
(三)课程表(Course)
  1. 在课程表的 CourseID 字段上创建索引,用于快速查询特定课程的信息:
CREATE INDEX idx_course_id ON Course(CourseID);
  1. 由于经常需要根据教师ID查询其授课的课程信息,在 TeacherID 字段上也创建索引:
CREATE INDEX idx_course_teacher_id ON Course(TeacherID);
(四)成绩表(Grade)
  1. 在成绩表的 StudentID 字段上创建索引,以便快速查询某个学生的所有成绩记录:
CREATE INDEX idx_grade_student_id ON Grade(StudentID);
  1. 在成绩表的 CourseID 字段上创建索引,用于快速查询某门课程的所有学生成绩记录:
CREATE INDEX idx_grade_course_id ON Grade(CourseID);
(五)学生与课程关联表(Student_Course)

在该表的 StudentIDCourseID 字段上创建索引,可提高通过学生ID或课程ID查询关联记录的速度:

CREATE INDEX idx_student_course_student_id ON Student_Course(StudentID);
CREATE INDEX idx_student_course_course_id ON Student_Course(CourseID);

模块C:数据库查询与分析

一、模块考核点模块分值 40 分。
本模块主要考察选手根据给定的任务场景、数据库表结构及字段说明,结合实际业务需求,编写对应的 SQL 查询语句。要求选手在准确理解任务要求的基础上,合理运用 SQL 语言中的查询、条件过滤、聚合函数、连接(JOIN)操作等功能,完成数据查询和结果集的生成。
二、模块任务
有一个课程表(course_tb)简况如下:

id name course grade hire_date
10001 张三 数据库系统 88.5 2023 春季
10002 李四 计算机网络 92 2023 春季
10003 张伟 数据库系统 99 2020 春季
10004 王红 计算机网络 78.5 2020 春季
10005 刘丽 信息技术 70 2023 春季

1.编写 SQL 语句,查询所有学生 ID、姓名、课程,并按学生 ID
升序排列。
2.编写 SQL 语句,查询成绩大于 90 分的姓名和课程。
3.编写 SQL 语句,查询每门课程的平均成绩。
4.编写 SQL 语句,查询“2023 春季”学期中成绩最高的学生姓名、课程名称和成绩。

答题思路
1. 查询所有学生ID、姓名、课程,并按学生ID升序排列。
SELECT id AS student_id, name, course
FROM course_tb
ORDER BY id ASC;

在上述语句中,使用 SELECT 关键字选取 id 字段并通过 AS 关键字将其别名为 student_id,同时选取 namecourse 字段。然后使用 ORDER BY 子句按照 id(即学生ID)字段进行升序排列。

2. 查询成绩大于90分的姓名和课程。
SELECT name, course
FROM course_tb
WHERE grade > 90;

这里通过 SELECT 关键字选取 namecourse 字段,然后使用 WHERE 子句设置条件,筛选出 grade(成绩)字段大于90分的记录。

3. 查询每门课程的平均成绩。
SELECT course, AVG(grade) AS average_grade
FROM course_tb
GROUP BY course;

在这个查询语句中,首先通过 SELECT 关键字选取 course 字段,然后使用聚合函数 AVG() 计算每门课程的平均成绩,并通过 AS 关键字将其别名为 average_grade。接着使用 GROUP BY 子句按照 course 字段进行分组,这样就能得到每门课程各自的平均成绩。

4. 查询“2023春季”学期中成绩最高的学生姓名、课程名称和成绩。
SELECT name, course, grade
FROM course_tb
WHERE (hire_date = '2023春季') AND (grade = (SELECT MAX(grade) FROM course_tb WHERE hire_date = '2023春季'));

此语句先在主查询中通过 SELECT 关键字选取 namecoursegrade 字段。然后在 WHERE 子句中设置两个条件:一是 hire_date(学期)字段等于 ‘2023春季’,二是 grade 字段等于在子查询中计算出的“2023春季”学期中的最高成绩。子查询 (SELECT MAX(grade) FROM course_tb WHERE hire_date = '2023春季') 用于找出“2023春季”学期内的最高成绩值,只有同时满足这两个条件的记录才会被查询出来。

猜你喜欢

转载自blog.csdn.net/qq_50377269/article/details/143491713