数据库系统概论书本基础知识

                                                                                                         数据库系统概论复习重点

                                                                                                               第一章 绪论

1. 实体:客观存在并且相互区别的事物,例如:一个学生,学生的一次选课

2. 属性:实体所具有的某一特性,例如学生的成绩

3. 码:唯一标识实体的属性集,例如学号是学生实体的码

4. 实体型:用实体名及其属性集合来抽象和刻画同类实体,例如学生(学号,姓名,性别.......等)

5. 概念模型的表示方法:E-R

6. 信息世界抽象出概念模型,机器世界根据概念模型得到数据模型

7. 数据模型:由数据结构,数据操作,数据完整性约束条件组成

8. 关系模型的数据结构:

关系:即我们说的一张表(不允许表内部还有表)

元组:表的一行

属性:表的一列

码:唯一确定一个元组,如学号

分量:元组中的一个属性值

关系模式:例如:学生(学号,姓名,性别,班级)

 

                                                                                                  第二章 关系数据库

.传统的集合运算(二目运算)(以关系R和关系S为例,二者都有n个属性,并且属性取自用一个域,下同)

1.并:结果由属于R或者属于S的元组组成,但是要去除重复的元组

2.差:结果由属于R但是不属于S的所有元组组成

3.交:由既属于R又属于S的元组组成

4.笛卡儿积:域上的集合运算

总结:传统的集合运算是二目运算,包括并,差,交,笛卡儿积四种

 

数据库系统概论书本基础知识

二.专门的关系运算

1. 选择:从关系中选取使特定逻辑表达式为真的元组

2. 投影:关系R上的投影是从R中选若干属性列组成新的关系

3. 连接:从需要连接的关系的笛卡儿积中选满足条件的元组,常用的有等值连接和自然连接

4. 除:R除以S等于T

要求:T包含所有在R但是不在S中的属性和值,且TS的笛卡儿积必须在R

 

              数据库系统概论书本基础知识

 

                                                                    第三章 关系数据库标准语言SQL

一.查询:

1..单表查询:查询课程平均成绩大于所有同学课程平均成绩的同学的学号

select sno

from SC

group by

having avg (grade)>= all (select avg(grade)

                          from SC

  group by sno)

--在使用group by 分组的时候,where 是针对符合条件的元组的,而having是针对符合条件的分组的该例也使用了嵌套查询

 

2. 连接查询:查询选修二号课程的同学的学号和姓名

select Student.sno,sname

from Student,SC

where Student.sno=SC.sno and con='2'

--找到课程号为2的元组,且这些元组的学号等于Student表里面的学号,然后投影这些元组的sno,sname属性

3. 嵌套查询:查询选修二号课程的同学的学号和姓名

select sno,sname

from Student

where son in (select sno

                  from SC

  where con='2')

--先在SC表里面找到课程号为2的同学的学号,然后将找到的学号传递给Student表,然后根据传递的学号在Student表中寻找该学号的学生的学号和姓名

4. exists嵌套查询:查询选修二号课程的同学的学号和姓名

select sno,sname

from Student

where exists (select *

              from SC

  where sno=Student.sno and con='2')

--先在内部循环查询课程号为2的同学是不是存在,若存在则在exists处返回True,就返回该学生元组的所有信息,然后打印该元组的sno和sname属性,若不存在则在exists处返回false,后面就不会返回元组信息

5. 双重exists嵌套查询:查询选修了所有课程的同学

select sname

from Student

where not exists (select * 

                  from Course

  where not exists (select *

                    from SC

where SC.sno=Student.sno and SC.cno=Course.cno))

--对于这个双重exists嵌套循环个人的理解是这样的:先在最内层循环寻找Course表中有的课程看SC表里面有没有同学全部选了,not exists的意思是里面没有找到就写进去,因为有两个exists,所以双重否定表肯定,意思就是写进去

三.视图:从一个或几个基本表导出的表,是虚表,视图中的数据仍然存放在基本表中,透过视图可以查看自己感兴趣的数据

视图是一个虚表,也可以通过这个表进行查询,插入,删除和修改

1.行列子集视图(一个表中截取某些行和列)

create view bt_s(sno,sname)

as 

select sno,sname

from Student

where age>=18;

2.分组视图(含有group by语句的视图)

create view s_g(sno,gavg)--括号内部是视图列名

as 

select Student.sno,avg(grade)

from Student,SC

group by Student.sno;

                       

                                                                                      第四章 数据库安全性

一.用户的创建和权限操作

1.用户的创建

create user u1 for login a

2.用户权限的操作

具体参考附带文件

(本章重点在用户的创建及对权限操作的部分)

                                                                                       第五章 数据库的完整性

1.断言:为数据库的完整性约束服务,任何使断言不为真值的操作都会被拒绝执行

例:数据库这门课程最多被60个同学选修

create assertion ASSE_SC_DB_NUM

check (60>=(select count(*)

            from Course,SC

where SC.cno=Course.cno and Course.cname='数据库');   

2.触发器:用户定义在表上的一类由事件驱动的特殊过程(具体意思请理解触发器三个字)

例:在Student表中如果插入的学生的age小于20,那么把该学生的age改为20

create trigger tri_age on Student

after insert

as

declare @age int ,@no char (12)

select @age=age,@no=sno from Student

begin

   if 

   @age<20 update Student set age=20 where [email protected]

   end;

 

                                                                                              第六章 关系数据理论

1.X->Y:X确定Y,Y依赖于X

2.函数依赖:平凡函数依赖,非平凡函数依赖,完全函数依赖,部分函数依赖

例:在关系(sno,cno,Grade)中

非平凡函数依赖:(sno,con)->Grade

平凡函数依赖:(sno,cno)->sno,(sno,cno)->cno////没有包含Geade

例:X->Y,X’X的真子集

完全函数依赖:X’不确定Y

部分函数依赖:X’确定Y

3主,非属性的区别:

主属性:包含任意一个码

非主属性:不包含任意一个码

4.范式

范式之间的关系是个同心圆,最外面是第一范式,依次往内部是二,三,BC,四范式

第一范式:属性不可再拆分

 

第二范式:非主属性对码是完全依赖

例:关系S-L-C(sno,sdept,sloc,cno,Grade),函数依赖有:(sno,cno)->Grade,sno->sdept,(sno,cno,)->sdept,snp->sloc,(sno,cno)->sloc,sdept->sloc,其中码是(sno,cno)

分析:sdept,sloc是非主属性,码中的cno确定不了这两个非主属性,即非主属性对码是部分函数依赖,所以S-L-C不是第二范式

现在我们来分析一下S-L-C,它包含有两类的非主属性,Grade与(sloc,sdept),Grade对码是完全依赖,因为sno和cno确定Geade,而(sloc,sdept)对码是部分函数依赖,所以我们分解一下:

SC(sno,cno,Grade)与SL(sno,sdept,sloc)

现在SC与SL都是属于第二范式

 

第三范式:不存在非主属性对码有传递函数依赖

例子:接着上的例子来

SL中,sno可以确定sdept,而sdept可以确定sloc,存在传递函数依赖,所以SL不是第三范式

SC中 要求sno和cno一起才能确定Grade,所以不存在传递函数依赖,所以SC是第三范式

 

BC范式:要求每一个决定因素包含码

例:在关系Y(C,B,D)中,C->B,C->D,码是C

分析:决定因素是:C->B,C->D,都包含了C,所以是每一个决定因素都包含了码,所以Y是BC范式

 

第四范式:不允许非平凡且非函数依赖的多值依赖

解析一下:就是允许非平凡且函数依赖的多值依赖(个人理解)

例子:WSC(W,S,C),W表示仓库,S表示保管员,C表示货物,W->->S,S->->C

分析;W->->S和S->->C都是非平凡的多值依赖,且码是(W,S,C),全码,不存在函数依赖,所以存在飞平凡且非函数依赖的多值依赖,所以WSC不是第四范式,现在我们来把WSC分解一下:WS(W,S)和WC(W,C),现在(W,S)中W->->S是平凡多值依赖,不存在函数依赖,所以不存在非平凡且非函数依赖的多值依赖,所以是第四范式,WC同理可得是第四范式

数据依赖的公理系统:

1.公理系统:

自反律:若Y属于X,X属于U,则X->Y

增广律:若X->Y,那么XZ->YZ

传递律:若X->Y,Y->Z,那么X->Z

2.推理规则:

合并规则:若X->Y,X->Z,那么X->YZ

伪传递规则:X->Y,WY->Z,那么XW->Z

分解规则:若X->Y,Z属于Y,那么X->Z

模式分解:

1.是否保持了函数依赖:通过分析分解之后的函数依赖,看能不能通过公理系统和推理规则推导出原来的函数依赖,如果能,则证明保持了函数依赖,否则就是没有保持

2.是否保持了无损连接的特性:

例:已知R(U,F),U={A,B,C,D,E},F={AB->C,C->D,D->E},R的一个分解为R1(A,B,C),R2(C,D),R3(D,E),证明这个分解的连接具有无损连接的特性

解答:

我们先来构造初始表

A B C D E
a1 a2 a3 b14 b15
b21 b22 a3 a4 b25
b31 b32 b33 a4 a5

构造规律:行数为函数依赖的个数,所以3行,每行代表一个函数依赖,我们以AB->C为例,这个函数依赖中有A,B,C所以第一行的这三列填a,其余填b,后面两行类似

现在开始修改表:还是以AB->C为例,这个函数依赖的右边是AB,所以我们寻找A,B列,如果有相同的分量则C列全部修改为a

修改后的表:

A B C D E
a1 a2 a3 a4 a5
b21 b22 a3 a4 a5
b31 b32 b33 a4 a5

如果修改之后某行全为a,那么该分解具有无损连接的特性

所以该分解具有无损连接的特性,证明完毕

                                                                                    第十一章 并发控制

1.*

排他锁(X锁):若事物T对对象A加上X锁,则只允许T读取和修改A,在T释放A上的X锁之前,其他事物不能对A加任何锁,目的是保证在事物T释放A上的X锁之前其他事物不能读取和修改A

共享锁(S锁):若事物T对对象A加S锁,则只允许T读取A而不能修改A,在T释放A上的S锁之前,其他事物只能对A加S锁,目的是保证在事物T释放对象A上的S锁之前其他事物只能读取而不能修改A

2.活锁,死锁

活锁:某一个事物一直处于等待状态,避免活锁要采取先来先服务的策略

死锁:某两个事物互相等待,永远进行下去,导致这俩个事物永远不能结束

3.可串行化调度:某个调度与串行化调度的结果一样,那么这个调度就叫做可串行化调度(正确调度)

4.怎么判断一个调度是不是可串行化调度?

冲突可串行化是可串行话调度的充分条件

冲突:不同事物对同一个数据的读写和写写操作

 ------------------------------------------------------------------------------------------------------------------------------

下面是关于SQL语句的相关代码(参考文件):

  1                                                          实验一
  2    表的建立样例
  31  4 create  table  Student(
  5 S#  char(12) primary  key,
  6 Sname  char(8)  unique,
  7 Age  int,
  8 Sex  char(2),
  9 );
 10 //创建了一个Student表,有3个列,一个主码约束,注意书写格式和字符
 112 12 create table course(
 13 c# char primary key,
 14 Cname char(20)NOT NULL,
 15 Teacher char(8),
 16 );
 17 //建立了一个course表,3个列,一个列为非空
 183 19 create table SC(
 20 S# char(12),
 21 C# char(4),
 22 Grage int,
 23 primary key(S#,C#),若在一个表里面要建立多个主码约束,就这么用
 24 );
 25 //建立了一个SC表,3个列,
 26    表的修改样例
 271)增加表的属性
 28 alter table Student add s_sdept char
 29 //在Student表里面增加s_sdept属性 char后面没有数字默认一个字符
 302)在SC表里面建立两个外码约束,S#是外码,被参照表是Student(S#),c#是外码,被参照表是course(c#):
 31       分析;
 32       SC表里面S#和C#都是主码,现在要建立外码约束,是外码约束必定有参照表
 33       代码:
 34       alter table SC add constraint fkS# foreign key (S#) references Student(S#)//名称为fkS#的外码约束键
 35 alter table SC add constraint fkC# foreign key (C#) references course(C#)//名称为fkC#的外码约束键
 36 
 37      建立索引
 38      在student表上建立属性S#的唯一索引:create unique index Stus# on Student(S#)//建立名称为 'Stus#'的唯一索引
 39      在course表上建立C#的唯一索引:create unique index c1ouc# on Course(C#)/建立名称为‘couc#’的唯一索引
 40                                                            实验二
 41 create table Student(
 42 S# char(12) primary key,
 43 Sname char(8) unique,
 44 Age int,
 45 Sex char(2),
 46 );
 47 create table Course(
 48 C# char(12) primary key,
 49 Cname char(20) NOT NULL,
 50 Teacher char(8),
 51 );
 52 create table SC(
 53 S# char(12),
 54 C# char(12),
 55 Grage int ,
 56 primary key(S#,C#),
 57 );
 58 alter table Student add S_sdept char(12)
 59 alter table SC add constraint fkS# foreign key (S#) references Student(S#)
 60 alter table SC add constraint fkC# foreign key (C#) references Course (C#)
 61 create unique index StuS# on Student(S#)
 62 create unique index CouC# on Course (C#)
 63 
 64 1.在Student表中增加两条学号相同的记录,验证实体完整性是否起作用
 65 insert into Student values ('201510101001','张天',20,'','c');
 66 可以加入
 67 insert into Student values ('201510101001','高磊',20,'','c');
 68 不能插入,因为学号相同,S#是主码约束
 69 insert into Student values ('201510101000','张天',20,'','c');
 70 同样不能插入,Sname是唯一约束
 71 答案:实体完整性起作用
 72 
 73 2.在SC表中插入一条记录,验证参照完整性是否起作用
 74 insert into SC values ('201510101002','1001','78')
 75 不能执行,因为在其余的两个表里面,没有要插入的数据,不符合参照完整性
 76 insert into Course values ('1001','数据结构','涂珊')
 77 insert into SC values ('201510101001','1001','78')
 78 现在可以执行了,因为在Course和Student表里面有要插入的数据,符合参照完整性
 79 答:参照完整性起作用
 80 
 81 3.在Student表中增加”学生入学”列,其数据类型是日期型
 82 alter table Student add S_entrance datetime
 83 
 84 4.将Sex的数据类型由字符型修改成整型
 85 alter table Student drop column sex
 86 alter table Student add Sex char(2)
 87 alter table Student alter column Sex int
 88 答:因为之前Sex列里面已经放进去了东西,如果直接把char类型转换成int类型的话会报错误,所以先把Sex列删除,然后再建立Sex列,然后再转换
 89 
 90 5.增加Course表中的Cname的UNIQUE约束
 91 alter table Course add constraint UQ_Cname unique (Cname)
 92 
 93 6.定义SC表中的Grade字段采用的是百分制
 94 alter table SC drop column Grage
 95 alter table SC add Grade int
 96 alter table SC add constraint ck_Grade check(Grade<=100 and Grade>=0)
 97 因为开始输入的时候把Grade写成了Grage,所以先删除了,再创建了一个新的列,Grade里面答数据也被删除了,需要的话要重新输入,再执行百分制语句
 98 check约束,对值进行范围限制
 99 
100 7.删除Course表中的UNIQUE约束、SC表中的CHECK约束
101 alter table Course drop constraint UQ_Cname
102 alter table SC drop constraint ck_Grade
103 
104 8.试着删除Course表中的PRIMARY  KEY约束,会出现什么情况
105 alter table Course drop constraint  primary key (C#)
106 不知道怎么删除,虽然知道C#有pk约束,但是不知道约束名..
107 
108 select * from Student
109 select * from Course
110 select *from SC
111 附加:
112 delete from SC where S#='01090122'
113 删除学号为01090122的这一行,实用
114 ..........................................................................................
115 
116 1.检索LIU老师所授的课程号和课程名
117 select C#,Cname
118 from Course
119 where Teacher='LIU'
120 
121 2.检索年龄大于岁的男学生的学号和姓名
122 select S#,Sname
123 from Student
124 where Age>23 and Sex=''
125 
126 3.检索学号为S3学生所学课程的课程名与任课教师名
127 select Cname,Teacher
128 from Course,SC
129 where Course.C#=SC.C# and SC.S#='S3'
130 
131 4.检索至少选修LIU(李东)老师所授课程中一门课程的女学生姓名
132 select Sname
133 from Student
134 where exists (
135 select distinct S#
136 from SC
137 where C# in (
138 select distinct  C#
139 from SC
140 where C# in ( select C#
141               from Course
142               where Teacher='李东')
143 intersect 
144 
145 select distinct C#
146 from SC
147 group by C#
148 having count(S#)>=1
149 )
150 ) and Sex=''
151 
152 
153 5.检索WANG同学不学的课程的课程号
154 select C#
155 from SC
156 where S# not in (select S#
157              from Student
158              where student.Sname='WANG')
159 
160 6.检索至少选修两门课程的学生学号
161 select S#
162 from SC 
163 group by S#
164 having count(C#)>=2
165 
166 7.检索全部学生都选修的课程的课程号与课程名
167 select C#,Cname
168 from Course
169 where C# in (select C#
170              from SC
171              group by SC.C#
172              having count(SC.S#)>=(select count(*) from Student))
173 ..........................................................................................
174                 实验三
175 --1.统计有学生选修的课程门数
176 select count(distinct C#)
177 from SC
178 
179 --2.求选修C4课程的女学生的平均年龄
180 select avg(Age) as stu_avg
181 from SC,Student
182 where SC.C#='2' and Student.S#=SC.S# and Student.Sex=''
183 
184 select avg(Age) as Stu_avg
185 from Student
186 where S# in (select S#
187              from SC
188              where C#='2') and Sex=''
189 
190 3--.求LIU(李东)老师所授课程的女学生的平均年龄
191 select avg(Age) as Stu_avg
192 from Student
193 where S# in (
194             select S# 
195             from SC
196             where C# in (
197                         select C#
198                         from Course
199                         where Teacher='李东'))and Sex=''
200 
201 select avg(Age) as Stu_avg
202 from Student
203 where S# in (
204             select S# 
205             from SC
206             where C# in (
207                         select C#
208                         from Course
209                         where Teacher='LIU'))and Sex=''
210 
211 
212 --4.统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
213 select distinct Course.C#,count(*)
214 from SC,Course
215 where SC.C#=Course.C#
216 group by Course.C#
217 order by 2 desc ,C# asc
218 
219 --5.检索学号比WANG(李勇)同学大,而年龄比他小的学生姓名
220 select B.Sname
221 from Student A,Student B
222 where A.Sname='李勇' and A.S#<B.S# and A.Age>B.Age
223 
224 select B.Sname
225 from Student A,Student B
226 where A.Sname='WANG' and A.S#<B.S# and A.Age>B.Age
227 
228 --6.在表SC中检索成绩为空值(80)的学生学号和课程号
229 select S#,C#
230 from SC
231 where Grage=null
232 
233 select S#,C#
234 from SC
235 where Grage=80
236 --7.检索姓名以L(李勇)打头的所有学生的姓名和年龄
237 select Sname,Age
238 from Student
239 where Sname like 'L%'
240 
241 select Sname,Age
242 from Student
243 where Sname like '李%'
244 
245 --8.求年龄大于女同学平均年龄的男学生姓名和年龄
246 select Sname,Age
247 from Student
248 where Sex='' and Age>(
249 select avg(Age)
250 from Student
251 where Sex='')
252 
253 --二.视图
254 
255 
256 
257 create view S_Grade(S#,C_num,AVG_Grage)
258 as select S#,count(C#),avg(Grage)
259 from SC
260 group by S#
261 
262 实验四
263 
264 --1.
265 select *
266 from S_Grade
267 --允许,打印这个视图
268 --对应操作:
269 select distinct S#,count(C#) as C_num,avg(Grage) as AVGGrage
270 from SC
271 group by S#
272 
273 
274 
275 --2.
276 select S#,C_num
277 from S_Grade
278 where AVG_Grage>80
279 --允许,打印视图中AVG_Grage>80的行的S#和C_num
280 --对应操作:
281 select S#,count(C#) as C_num
282 from SC
283 group by S#
284 having avg(Grage)>80
285 
286 --3.
287 select S#,AVG_Grage
288 from S_Grade
289 where C_num>(select C_num
290              from S_Grade
291              where S#='201215122')
292 --允许,打印比学号为201215122的同学的课程数目多的同学的学号和平均成绩
293 --对应操作:
294 select S#,avg(Grage) as AVG_Grage
295 from SC
296 group by S#
297 having count(C#)>(
298 select count(C#)
299 from SC
300 group by S#
301 having S#='201215122')
302 
303 
304 --4
305 update S_Grade
306 set C_num=C_num+2
307 where S#='201215122'
308 --不允许,因为SC表中的属性有的要参照Student表和Course表
309 
310 --5
311 delete
312 from S_Grade
313 where C_num>2
314 --不允许,因为视图'S_Grade'来自于SC表,而SC表的增删改查都要参照其余两个表
315 
316                         实验五
317 
318 --1.建立用户U1、U2、U3、U4、U5、U6、U7,用户类型全部选择为CONNECT。
319 --创建用户,但是前提是要先创建a,b,c的登录名
320 create user u1 for login a
321 create user u2 for login b
322 create user u3 for login c
323 
324 --2.在SYSTEM(即DBA)中与7个CONNECT用户之间进行授权。完成教材4.2.4小节【例4.1】~【例4.7】的授权语句。
325 --在完成授权之后,验证用户是否拥有相应的权限。例如:
326  --  用户U7向SC表中插入一条数据记录:(201215130,6,88);显示插入1条记录,即用户U7拥有对SC表的插入数据权限。
327  --答:
328  --4.1 把对Student表查询的权限给u1
329 grant select 
330 on Student 
331 to u1
332 
333 --4.2 把对Student表和Course表的所有权限给u2,u3
334 grant ALL PRIVILEGES  on Student to u2,u3
335 grant ALL PRIVILEGES on Course to u2,u3
336 
337 --4.3把对SC表的查询权限给所有用户
338 grant select  on SC to public
339 
340 --4.4 把对Student表的学号更新和查询权限给u1
341 grant update(S#),select on Student to u1
342 
343 --4.5 把对SC表的插入权限给u2,并且u2可以传播此权限
344 grant insert on SC to u2 with grant option
345 
346 --4.6把对SC表的插入权限给u3,并且u3可以传播此权限
347 grant insert  on SC  to u3 with grant option
348 
349 --4.7把对SC表的插入权限给u1
350 grant insert  on SC  to u1
351 
352 --总结:
353 --u1的权限:对Student表的查询和学号更新,对SC表的查询和插入
354 --u2的权限:Student表的所有权限,Course表的所有权限,SC表的查询权限和插入
355 --u3的权限:Student表的所有权限,Course表的所有权限,SC表的查询权限和插入
356 -- 验证:
357 u3 insert into SC (S#,C#,Grage) values ('201215130','6',88)--无法插入,因为SC表的学号和课程号是参照Student表和Course表的
358 --正确方法:
359 u2 insert into Student values ('201215130','d佬',40,'')
360 u2 insert into SC (S#,C#,Grage) values ('201215130','6',88)
361 
362 --3.完成教材4.2.4小节【例4.8】~【例4.10】的权限回收语句。在权限被回收之后,查看该用户是否真正丧失了对数据的相应权限。例如:
363    -- 用户U3查询表SC。用户U3重新登录数据库。执行命令:select  *  from  sc;执行失败。表明用户U3不再拥有此权限。
364 revoke update(S#) on Student from u1--收回u1对Student表的学号更新权限
365 
366 revoke select on SC from public--从所有用户收回对SC表的查询权限
367 
368 revoke insert on SC from u2 cascade--把u2对SC表的插入权限收回,并且把从u2这里获得该权限的用户的权限也删除,级联删除
369 --总结:
370 --u1的权限:对Student表的查询,对SC表插入
371 --u2的权限:Student表的所有权限,Course表的所有权限
372 --u3的权限:Student表的所有权限,Course表的所有权限
373 
374 u3 select *
375 from SC
376                           实验6
377 
378 --1.往关系C中插一个课程元组(‘C8’,‘VC++’,‘BAO’)
379 insert into Course values ('C8','VC++','BAO')
380 
381 --2.在SC中删除尚无成绩的选课元组
382 delete 
383 from SC
384 where Grage=null
385 
386 --3.把选修LIU(李东)老师课程的女同学选课元组全部删去
387 
388 delete 
389 from SC
390 where S# in (
391             select S#
392             from Student
393             where Sex='' and S# in(
394                                     select S#
395                                     from SC
396                                     where C# in(
397                                                 select C#
398                                                 from Course
399                                                 where Teacher='李东')))
400 
401 --查看是否删除成功
402 select *
403 from SC
404 
405 --4.把MATHS(高数)课不及格(小于88)的成绩全改为88分
406 update SC
407 set Grage=88
408 where Grage<88 and S# in (
409                          select S#
410                          from SC
411                          where C# in (
412                                      select C#
413                                      from Course
414                                      where Cname='高数'))
415 
416 --5.把低于所有课程总平均成绩的女同学成绩提高5%
417 update SC
418 set Grage = Grage * 1.05
419 where (
420 (S# in(
421 select S#
422 from Student
423 where Sex=''))
424  and
425 SC.Grage<(
426 select AVG(Grage)
427 from SC)
428 )
429 --思路很重要
430 
431 --6.在表SC中修改C4课程的成绩,若成绩小于等于70分时提高5%,若成绩大于70分时提高4%(用两个UPDATE语句实现)
432 update SC
433 set Grage = Grage *1.05
434 where Grage<=70
435 
436 update SC
437 set Grage = Grage *1.04
438 where Grage>70
439 
440 --7.在表SC中,当某个成绩低于全部课程的平均成绩时,提高5%。
441 update SC
442 set Grage = Grage *1.05
443 where SC.Grage<(select AVG(Grage)
444                 from SC)
445 
446 --总结:1.牢记更新的语法
447        -- update 表名
448         --set 修改表达式
449         --where 条件
450 
451       --2.记得这个操作select AVG(Grage)
452                     --from SC
453                     --求所有课程的总平均成绩
454 
455 --二、根据学生课程数据库编写一个存储过程,完成下述功能:统计任意一门课程的成绩分布情况,即按照各分数段统计人数(分数段自定);
456 --储存过程块
457 create  procedure sss @Cname varchar(20)
458 as declare
459 @cours varchar(20);
460 begin
461 select 
462 count(*)
463 from SC
464 where Grage between 0 and 59 and C# in (
465                                     select C#
466                                     from Course
467                                     where  Cname=@Cname);
468 select 
469 count(*)
470 from SC
471 where Grage between 60 and 80 and C# in (
472                                     select C#
473                                     from Course
474                                     where  Cname=@Cname);
475 select
476 count(*)
477 from SC
478 where Grage between 81 and 100 and C# in (
479                                     select C#
480                                     from Course
481                                     where  Cname=@Cname);
482 end;
483 
484 --调用储存过程块
485 execute sss '高数'
486                                     实验七
487 第6章  关系数据理论
488 一、设关系模式R(ABCD),F是R上成立的FD集,F={A→B,C→B},则相对于F,试写出关系模式R的关键码。并说明理由。
489 关系模式R的关键码为ACD,因为只有ACD才能推导出R(ABCD)
490 二、设关系模式R(ABCD),F是R上成立的FD集,F={A→B,B→C}。
491 1、试写出属性集BD的闭包(BD)+492 BCD,因为BD的子集B可以推导出C
493 2、试写出所有左部是B的函数依赖(即形为“B→?”)。
494 B→空集,B→C,B→B,B→BC
495 三、设关系模式R(ABC),F是R上成立的FD集,F={ B→C,C→A},那么分解ρ={AB,AC}相对于F,是否为无损分解和保持FD?
496     都没有,只能推导出A→B,A→C,不能推导出B→C
497 四、设有关系模式R(运动员编号、比赛项目、成绩、比赛类别、比赛主管),如果规定:每个运动员每参加一个一个比赛项目,只有一个成绩;每个比赛项目只属于一个比赛类别;每个比赛类别只有一个比赛主管。试回答下列问题:
498 1、根据上述规定,写出模式R的基本FD和关键码;
499 运动员编号→比赛项目,(运动员编号,比赛项目)→比赛成绩,比赛项目→比赛类别,比赛类别→比赛主管
500 关键码:运动员编号,比赛项目
501 2、说明R不是2NF的理由,并把R分解成2NF模式集;
502 非主属性对码不是完全依赖,因为比赛项目→(比赛类别,比赛主管),非主属性对比赛项目,部分函数依赖
503 分解:
504 R1:(运动员编号,比赛项目)→比赛成绩
505 R2:比赛项目→(比赛类别,比赛主管)
506 3、进而分解成3NF模式集。
507 第三范式要求不存在传递函数依赖,所以:
508 R1:(运动员编号,比赛项目)→比赛成绩
509 R2:比赛项目→比赛类别
510 R3:比赛类别→比赛主管
511 五、设关系模式R(ABCD),在R上有四个相应的FD集及分解:
512 1、F={B→C,D→A},ρ={BC,AD}
513 2、F={AB→C,C→A,C→D},ρ={ACD,BC}试对上述两种种情况分别回答些列问题:
514 ①确定R的关键码
515 1.BD
516 2.AB和BC
517 ②是否无损分解?
518 1.没有保持
519 画图可得:
520 A       B       C         D
521   b11      a2      a3         b14
522   a1       b22     b23        a4           
523 2.保持了
524 A       B       C         D
525 a1     b12     a3        a4
526 b21       a2     a3      b24
527 
528 A       B       C         D
529 a1     b12      a3        a4
530 a1       a2     a3      a4
531 
532 存在一行有a1,a2,a3,a4
533 ③是否保持FD集?
534 1.保持了
535 2.没有保持,丢失了AB→C
536 ④确定ρ中每个模式的范式级别。
537 1.BCNF
538 2.BCNF
539 因为每一个决定因素都包含了码

 

 

以上是个人对数据库系统概论的部分知识的了解,若有不正确的地方,欢迎兄弟们拍砖指正!!!

参考书籍:数据库系统概论 王珊 萨师煊著 第5版