数据库
数据库作业:
第一章:
1. 试说明数据、数据库、数据库管理系统和数据库系统的概念。
数据(Data):数据是以符号形式存储的事实或信息的集合。它可以是数字、文本、图像、音频或视频等形式。数据是计算机处理的基本单位,可以被收集、存储、操作和传输。
数据库(Database):数据库是组织和存储数据的集合。它是一个结构化的数据集合,被组织为一系列表、视图、索引等数据对象。数据库可以存储大量的相关数据,提供高效的数据访问和管理。
数据库管理系统(Database Management System,DBMS):数据库管理系统是用于管理数据库的软件系统。它提供了创建、检索、更新和删除数据的功能,还包括对数据进行安全性控制、备份和恢复、并发控制等管理和维护数据库的功能。常见的数据库管理系统包括MySQL、Oracle、SQL Server和PostgreSQL等。
数据库系统(Database System):数据库系统是由数据库、数据库管理系统和应用程序组成的集成系统。它是一个支持数据存储、管理和应用的完整解决方案。数据库系统提供了数据的持久化存储、高效的数据访问、数据完整性保护和并发控制等功能,使得应用程序可以方便地对数据进行操作和利用。
5.比较用文件管理和用数据库管理数据的主要区别。
- 文件管理:适用于数据量较小、结构简单、不需要频繁查询和复杂处理的场景,如配置文件、日志文件等。
- 数据库管理:适用于数据量大、结构复杂、需要频繁查询和更新的场景,如企业级应用、电子商务系统、数据分析等。
6. 在数据库管理方式中,应用程序是否需要关心数据的存储位置和存储结构?为什么?
不需要 因为数据库管理系统会负责相关的管理,并且会提供给用户需要的功能。
7.在数据库系统中,数据库的作用是什么?
数据库是存储数据的仓库,作用是存储数据。
8.在数据库系统中,应用程序可以不通过数据库管理系统而直接访问数据文件吗?
不可以。
10.数据库系统由哪几部分组成,每一部分在数据库系统中的作用大致是什么?
数据库系统分为DBMS和数据库,前者提供功能,例如对数据的操作(CRUD)、安全性控制、并发控制、备份于恢复等,后者是数据存储的媒介。
第二章:
3.实体之间的联系有几种?分别是哪些?请为每一种联系举出一个例子。
有三种:1:1,1:n,m:n。1:1示例:系和系主任,1:n示例:班和学生,m:n示例:老师和学生。
5.指明下列实体间联系的种类:
(1)教研室和教师(假设一个教师只属于一个教研室,一个教研室可有多名教师)。
一对多。
(2)商店和顾客。
多对多。
(3)国家和首都。
一对一。
6.解释关系模型中的主码、外码、主属性、非主属性的概念,并说明主码、外码的作用?
主码是关系模式中唯一标识每个元组(行)的属性或属性组合。它具有唯一性和非空性约束,确保每个元组都可以通过主码进行唯一标识和访问。主码在关系模式中起到了关键的作用,用于区分和索引数据。
外码(Foreign Key):
外码是关系模式中引用其他关系模式的属性或属性组合。它建立了关系模式之间的联系,通过引用其他关系模式的主码来建立关系。外码用于在不同的关系模式之间建立关联和约束,确保数据的完整性和一致性。
主属性(Primary Attribute):
主属性是构成关系模式主码的属性。它们是唯一标识每个元组的属性。主属性在主码中起到了关键的作用,用于确定元组的唯一性。
非主属性(Non-Primary Attribute):
非主属性是除了主属性和外码以外的其他属性。它们包含了关系模式中存储的其他数据信息,但不直接参与唯一标识元组的过程。
主码的作用:
唯一标识元组:主码确保每个元组在关系模式中具有唯一的标识,使得可以准确地访问和操作数据。
索引和查询优化:主码通常用作索引的基础,可以提高数据的访问性能和查询效率。
维持数据完整性:主码的唯一性约束确保数据的完整性,防止重复或冲突的数据出现。
外码的作用:
建立关系和关联:外码建立了关系模式之间的关联和联系,使得数据在不同的表格之间能够进行引用和共享。
强制数据一致性:外码可以用来确保引用关系的一致性,即被引用的关系模式中必须存在与外码匹配的主码,从而维护数据的一致性。
实现参照完整性:外码可以用来定义参照完整性约束,防止对被引用关系的无效引用操作,保证数据的完整性和准确性。
7.指出下列关系模式的主码:
(1)考试情况(课程号,考试性质,考试日期,考试地点)。假设一门课程在不同的日期可以有多次考试,但在同一天只能考一次。多门不同的课程可以同时进行考试。
答:(课程号,考试日期)
(2)教师授课(教师号,课程号,授课时数,学年,学期)。假设一名教师在同一个学年和学期可以讲授多门课程,也可以在不同学年和学期多次讲授同一门课程,对每门课程的讲授都有一个授课时数。
答:(教师号,课程号,学年,学期 )
(3)图书借阅(书号,读者号,借书日期,还书日期)。假设一个读者可以在不同的日期多次借阅同一本书,一个读者可以同时借阅多本不同的图书,一本书可以在不同的时间借给不同的读者。但一个读者不能在同一天对同一本书借阅多次。
答:(书号,读者号,借书日期)
8.设有如下两个关系模式,试指出每个关系模式的主码、外码,并说明外码的引用关系。
产品表(产品号,产品名称,产品价格,生产日期),其中产品名称有重复。
销售表(产品号,销售时间,销售数量),假设可同时销售多种产品,但同一产品在同一时间只销售一次。
产品表主码:产品号;无外码。
销售表主码:(产品号,销售时间);外码:其产品号引用销售表的外码。
9.关系模型的数据完整性包含哪些内容?分别说明每一种完整性的作用。
答:实体完整性,参照完整性,用户定义完整性。
实体完整性:用来保证表中不存储相同的数据,也不存储无意义的数据。
参照完整性:用来描述实体之间的联系。
用户定义完整性:用来限制属性的取值范围,确保数据库存储的值与现在世界相符。
10.数据库系统包含哪三级模式?试分别说明每一级模式的作用?
外模式(External Schema)、概念模式(Conceptual Schema)和内模式(Internal Schema)
外模型:对现实系统中用户感兴趣的对整体数据结构的局部描述,用于满足不同用户对数据的描述。
模型:是数据库中全体数据的逻辑结构和特征的描述,满足所有用户对数据的需求。
内模型:是对整个数据库的底层表示,它描述了数据库的存储位置和存储方式。
11.数据库系统的两级映像的功能是什么?它带来了哪些好处?
①两级映像是外模式/模式映像和模式/内模式映像。②外模式/模式映像带来了逻辑独立性,当模式的结构发生变化时,可以通过调整外模式和模式间的映像关系,使得外模式保持不变。模式/内模式带来了物理独立性,当数据库的物理存储改变了,只需要调整模式/内模式的影响关系,就可以保持模式不变。
12.数据库三级模式划分的优点是什么?它能带来哪些数据独立性?
三级模式的划分使用户可以在逻辑层处理数据,而不必关心具体的物理细节,同时当内模式或模式发生变化时,可以通过模式之间的映像关系,保证外模式不变,从而保证了应用程序的稳定性,它能带来物理独立性和逻辑独立性。
第三章:
10.写出创建如下三张表的 SQL 语句,要求在定义表的同时定义数据的完整性约束。
2)CREATE TABLE 图书表(
书号 nchar(6) primary key,
书名 nvarchar(30) not null,
第一作者 char(10) not null,
出版日期 smalldatetime,
价格 decimal(4, 1)
)
(2)CREATE TABLE 书店表(
书店编号 nchar(6) primary key,
店名 nvarchar(30) not null,
电话 char(8) check (电话 like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
地址 varchar(40),
邮政编码 char(6)
)
(3)CREATE TABLE 图书销售表(
书号 nchar(6) not null,
书店编号 nchar(6) not null,
销售日期 smalldatetime not null,
销售数量 tinyint check (销售数量 >= 1),
PRIMARY KEY(书号, 书店编号, 销售日期),
FOREIGN KEY(书号) REFERENCES 图书表(书号),
FOREIGN KEY(书店编号) REFERENCES 书店表(书店编号)
)
11.为“图书表”添加“印刷数量”列,类型为整数,同时添加约束,要求此列的取值要大于等于 1000。
ALTER TABLE 图书表 ADD 印刷数量 int check (印刷数量 >= 1000)
12.删除“书店表”中的“邮政编码”列
ALTER TABLE 书店表 DROP COLUMN 邮政编码
- 将“图书销售表”中的“销售数量”列的数据类型改为整型。
ALTER TABLE 图书销售表 ALTER COLUMN 销售数量 int
第四章:
1.查询 sc 表中的全部数据。
Select * from sc
2.查询计算机系学生的姓名和年龄
Select sname,sage
from student
where sdept=’计算机系’
3.查询成绩在 70~80 分的学生的学号、课程号和成绩。
Select sno,cno,grade
from sc
where grade between 70 and 80;
4.查询计算机系年龄在 18~20 岁的男学生的姓名和年龄。
Select sname,sage
from student
where sdept = ‘计算机系’ and sage between 18 and 20 and ssex=’男’;
5. 查询课程号为“c001”的课程的最高的分数。
Select max(grade)
from sc
where cno=’c001’;
6.查询计算机系学生的最大年龄和最小年龄。
Select max(sage) as 最大年龄,min(sage) as 最小年龄
From student
Where sdept=’计算机系’;
7.统计每个系的学生人数。
Select sdept, count(*) 总人数
From student
Group by sdept;
8.统计每门课程的选课人数和考试最高分
Select cno,count(*)选课人数,max(grade)最高分
From sc
Group by cno;
9.统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。
Select count(*)门数,sum(grade)总成绩
From sc
Group by sno
order by count(*)asc;
10.查询总成绩超过 200 分的学生,要求列出学号、总成绩。
Select sno,sum(grade)总成绩
From sc
Group by sno
having sum(grade)>200;
11.查询选修“C002”号课程的学生的姓名和所在系。
Select sname,sdept
From student s
Join sc on s.sno=sc.sno
Where sc.cno=’C002’;
12.查询成绩 80 分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果
Select sname,cno,grade
From student s
Join sc on s.sno=sc.sno
Where sc.grade>80
Order by sc.grade desc;
13.查询哪些学生没选课,列出学号,姓名和所在系。
Select sno,sname,sdept
From student s
Where not exists(
Select 1
From sc
Where s.sno=sc.sno
);
- 查询与 Java 在同一学期开设的课程的课程名和开课学期.
Select cname, semester
from course c1
join course c2 on c1.semester = c2.semester
Where c2.cname = ‘Java’ and c1.cname != ‘Java’
15.查询与李勇年龄相同的学生的姓名、所在系和年龄
Select sname,sdept,sage
From student s1
Join student s2 on s1.sage=s2.sage
Where s2.sname=’李勇’and s1.sname=’李勇’
16.用子查询实现如下查询
(1)查询选修了“C001”号课程的学生的姓名和所在系。
Select sname,sdept
from student
Where sno in (select sno from sc where cno = ‘C001’)
(2)查询数学系成绩 80 分以上的学生的学号、姓名、课程号和成绩。
Select sno,sname,cno, grade
from student s
Join sc on s.sno = sc.sno
Where sdept = ‘数学系’ and sno in (
Select sno from sc where grade > 80)
(3)查询计算机系考试成绩最高的学生的姓名。
Select sname
from student s
join sc on s.sno = sc.sno
Where sdept = ‘计算机系’ and grade = (
Select max(grade)
from sc
join student s on s.sno=sc.sno
Where sdept = ‘计算机系’)
(4)查询数据结构考试成绩最高的学生的姓名、所在系、性别和成绩。
Select sname,sdept,ssex,grade from student s
Join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
Where cname = ‘数据结构’
And grade in (
Select max(grade) from sc
join course c on c.cno=sc.cno
Where cname = ‘数据结构’ )
17.查询没有选修 Java 课程的学生的姓名和所在系。
Select sname,sdept
From student
Where sno not in (
Select sno from sc
Join course c on c.cno=sc.cno
Where c.name=’Java’
);
18.查询计算机系没有选课的学生的姓名和性别
Select sname,ssex from student
Where sdept=’计算机系’and sno not in
(select sno from sc)
19.
Create table test_t(
COL1 int,
COL2 char(10) not null,
COL3 char(10))
Insert into test_t(COL2) values(’B1’)
Insert into test_t(COL1,COL2) values(1,’B2’)
Insert into test_t values(2,’B3’,NULL)
20.
Delete from sc where grade<50
21.
Delete from course where cno not in(select cno from sc)
22.
Delete from sc
From sc join student s on s.sno = sc.sno
Join course c on c.cno = sc.cno
where cname = ‘Java’ and grade < 60
and sdept = ‘计算机系
23.
Update course set credit=credit+2
Where semester=2
24.
Update course set credit=3
Where cname=’Java’
25.
Update student set sage=sage+1
Where sdept=’计算机系’
26.
Update sc set grade=grade+5
From student s join sc on sc.sno=s.sno
Join course c on c.cno=sc.cno
Where sdept=’信息系’and cname=’计算机文化学’
27.
Select sdept,count(*)人数 into Dept_Age from student
Where sage >= 20
Group by sdept
第五章
3.使用第 3 章建立的 Student、Course 和 SC 表,写出创建满足下述要求的视图的 SQL
语句。
(1)查询学生的学号、姓名、所在系、课程号、课程名、课程学分。
Create view v1 As
Select s.sno,sname,sdept,c.cno,cname,credit
From student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
(2)查询学生的学号、姓名、选修的课程名和考试成绩。
Create view v2 As
Select s.sno,sname,cname,grade
From student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
(3)统计每个学生的选课门数,要求列出学生学号和选课门数。
Create view v3 As
Select sno,count(*) as total
From sc group by sno
(4)统计每个学生的修课总学分,要求列出学生学号和总学分(说明:考试成绩大于
等于 60 才可获得此门课程的学分)。
Create view v4 As
Select sno,sum(credit) as total_credit
From sno join course c on c.cno = sc.cno
Where grade >= 60
Group by sno
(5)查询计算机系 JAVA 考试成绩最高的学生的学号、姓名和 JAVA 考试成绩。
Create view v5 As
Select top 1 with ties s.sno, sname, grade
From student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
Where sdept = ‘计算机系’ and cname = ‘java’
Order by grade desc
4.
(1)查询考试成绩大于等于 90 分的学生的姓名、课程名和成绩。
Select sname,cname,grade From v2 where grade >= 90
(2)查询选课门数超过 3 门的学生的学号和选课门数。
Select * from v3 where total >= 3
(3)查询计算机系选课门数超过 3 门的学生的姓名和选课门数。
Select sname,total from v3 join student s on s.sno = v3.sno
Where sdept = ‘计算机系’ and total >= 3
(4)查询修课总学分超过 10 分的学生的学号、姓名、所在系和修课总学分。
Select v4.sno,sname,sdept,total_credit
From v4 join student s on s.sno = v4.sno
Where total_credit >= 10
5.
修改第 3 题(4)定义的视图,使其查询每个学生的学号、总学分以及总的选课门数。
Alter view v4 As
Select sno,sum(credit) as total_credit,count(*) as total_cno
From sc join course c on c.cno = sc.cno
Group by sno
6.
修改第 3 题(5)定义的视图,使其统计全体学生中 JAVA 考试成绩最高的学生的学号、姓16 名、所在系和 JAVA 考试成绩。
Alter view v5 As
Select top 1 with ties s.sno, sname, sdept, grade
From student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
Where cname = ‘java’
Order by grade desc
第六章
6.设有关系模式:学生修课(学号,姓名,所在系,性别,课程号,课程名,学分,成绩)。设一个学生可以选多门课程,一门课程可以被多名学生选。每个学生对每门课程有唯一的考试成绩。一个学生有唯一的所在系,每门课程有唯一的课程名和学分。请指出此关
系模式的候选码,判断此关系模式是第几范式的,若不是第三范式的,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。
①该关系模式的候选码为(学号,课程号)。
②该关系模式是第一范式的。
③将其规范化为第三范式后得到
学生(学号,姓名,所在系,性别)主码为学号,无外码
课程(课程号,课程名,学分) 主码为课程号,无外码
7. 设有关系模式:学生(学号,姓名,所在系,班号,班主任,系主任), 其语义为:一个学生只在一个系的一个班学习,一个系只有一个系主任,一个人只担任一个系的系主任;一个班只有一名班主任,但一名教师可以担任多个班的班主任;一个系可以有多个班。请指出此关系模式的候选码,判断此关系模式是第几范式的,若不是第三范式的,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。
①该关系模式的候选码为学号。
②该关系模式是第二范式的。
③将其规范化为第三范式后得到
学生(学号,姓名,所在系,班号),主码为学号,外码所在系引用自院系
8. 设有关系模式:教师授课(课程号,课程名,学分,教师号,教师名,职称,授课时数,授课学年),其语义为:一门课程(由课程号决定)有确定的课程名和学分,每名教师(由教师号决定)有确定的教师名和职称,每门课程可以由多名教师讲授,每名教师也可以讲授多门课程,在同一学年每个教师对每门课程只讲授一次,且有确定的授课时数。指出此关系模式的候选码,判断此关系模式属于第几范式,若不属于第三范式,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。
①该关系模式的候选码为(课程号,教师号,授课学年)。
②该关系模式是第一范式的。
③将其规范化为第三范式后得到
课程(课程号,课程名,学分),主码是课程号。
教师(教师号,教师名,职称),主码是教师号。
授课(课程号,教师号,授课学年,授课时数),主码是(课程号,教师号,授课学年),外码课程号引用自课程关系模式中的课程号属性,外码教师号引用自教师关系模式中的教师号属性。
第七章
1、试说明事务的概念及四个特征。
答:①事务是用户定义的数据操作系列,这些操作可作为一个完整的工作单元,一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行。②事物的四个特征是原子性,一致性,隔离性和持久性。原子性是指事务是数据库的逻辑工作单位;一致性是指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态;事务的隔离性是指数据库中一个事务的执行不能被其他事务干扰;事务的持久性是指事务一旦被提交,则其对数据库中数据的改变就是永久的,以后的操作或故障不会对事务的操作结果产生任何影响。
3:设有如下三个事务:
T1:B = A + 1; T2:B = B * 2; T3:A = B + 1
(1)设 A 的初值为 2,B 的初值为 1,如果这三个事务并发的执行,则可能的正确的执行结果有哪些?
排列组合
T1 -> T2 -> T3 A = 7, B = 6
T1 -> T3 -> T2 A = 4, B = 6
T2 -> T1 -> T3 A = 4, B = 3
T2 -> T3 -> T1 A = 3, B = 4
T3 -> T1 -> T2 A = 2, B = 6
T3 -> T2 -> T1 A = 2, B = 3
(2)给出一种遵守两段锁协议的并发调度策略。
T1: L(A), L(B), 读A, 写B, U(A), U(B)
T2: L(B), 读B, 写B, U(B)
T3: L(B), L(A), 读B, 写A, U(B), U(A)
4:当某个事务对某段数据加了 S 锁之后,在此事务释放锁之前,其他事务可以对此段数据加什么锁?
S 锁,共享锁
5:当某个事务对某段数据加了 S 锁之后,该事务可以对这段数据进行什么操作?其他事务可以对这段数据进行什么操作?
该事务可以进行的操作:
读操作:持有S锁的事务可以读取该数据。S锁允许多个事务同时读取同一数据而不会相互干扰。
其他事务可以进行的操作:
读操作:其他事务也可以对该数据加S锁,并进行读操作。S锁是共享的,允许多个事务同时持有S锁。其他事务不能对该数据加X锁,进行写操作。X锁需要独占访问,不能与S锁共存。
7:三级封锁协议分别是什么?各级封锁协议的主要区别是什么?每一级封锁协议能保证什么?
① 一级封锁协议是在一个事务对数据加X锁后,直到事务结束时才释放。可以防止丢失修改。②二级封锁协议是一级封锁协议加上一个事务对数据加S锁后,读完后即释放S锁。可以防止丢失修改、防止读“脏”数据。③三级封锁协议是一级封锁协议加上一个事务对数据加S锁后,直到事务结束时才释放S锁。可以防止丢失修改、防止读脏数据以及防止不可重复读的情况。④每级封锁协议的区别在于对读数据的加锁上。
8.:什么是可串行化调度?如何判断一个并行执行的结果是否是正确的?
多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,称这种调度为可串行化的调度。
如果一个并发调度可以通过重新排序其事务操作,使得该排序满足串行执行的所有特性,那么这个调度就是可串行化的。
9:两段锁的含义是什么?
两段锁是一种并发控制协议,用于管理并发事务对共享资源的访问。该协议分为两个阶段:扩展阶段和收缩阶段,在对任何数据进行读、写操作之前,首先要获得对该数据的封锁。在释放一个封锁之后,事务不再申请和获得任何其他锁。
10:数据库故障大致分为几类?
事务内部的故障,系统故障,其他故障
第八章
8:将下列 E-R 图转换为符合 3NF 的关系模式,并指出每个关系模式的主码和外码。
图书(书号,书名,出版日期,作者)
读者(读者编号,读者姓名,联系电话,所在单位)
借阅(书号,读者编号,借书日期)书号为引用图书的外码,读者编号为引用读者
的外码。
厂家(厂家编号,联系地址,联系电话)
商店(商店编号,商店名,联系电话)
商品(商品编号,商品名称,库存量,商品分类),
订购(商店号,厂家编号,商品编号,订购日期,订购数量),商店号为引用商店的
外码,商品编号为引用商品的外码,厂家编号为引用厂家的外码。
学生(学号,姓名,性别,专业,社团号,参加日期),社团号是引用社团的外码。
社团(社团号,社团名,电话,性质)
9和10书上没有
标签:总结,sno,每日,模式,60,课程,sc,cno,Select From: https://www.cnblogs.com/azure011328/p/18241436