-- 1.使用SQL语句完成如下操作:
--(1)建立描述学校教务的数据库(JWDB),该数据库包含单一的关系模式Student,其包含学号(Sno)、所在系(Sdept)、系主任姓名(Mname)、课程号(Cno)和成绩(Grade)。
create database JWDB
create table Student
(
Sno char(7) not null,
Sdept char(10),
Mname char(10),
Cno char(3) not null,
Grade int
)
--(2)请问Student关系模式的候选码是什么?使用SQL语句为Student创建主键。
candidate key:(Sno,Cno)。
alter table Student
add primary key(Sno,Cno)
--(3)往Student中插入如下实例数据:
--Sno Sdept Mname Cno Grade
--S1 电子商务系 张明 C1 95
--S2 电子商务系 张明 C2 90
--S3 电子商务系 张明 C1 88
--S4 电子商务系 张明 C1 70
--S5 计算机系 曾刚 C1 78
insert into Student
values('S1','电子商务系','张明','C1',95)
insert into Student
values('S2','电子商务系','张明','C2',90)
insert into Student
values('S3','电子商务系','张明','C1',88)
insert into Student
values('S4','电子商务系','张明','C1',70)
insert into Student
values('S5','计算机系','曾刚','C1',78)
--(4)假设电子商务系系主任变成“张三”,请用SQL语句完成相应操作。请问这种操作是否有不合理的地方?
update Student
set Mname='张三'
where Sdept='电子商务系'
--(5)假设学校新成立外语系,并任命李四为系主任,请用SQL语句完成相应操作。请问这种操作是否有不合理的地方?
insert into Student
values(null,'外语系','李四',null,null)
该操作不合理。不能将值null插入列'Sno','Cno'中,因为第(2)题已将'Sno','Cno'设为主键,而主键值不能为null,插入失败。
--(6)建设学生S5需要退选C1课程,请用SQL语句完成相应操作。请问这种操作是否有不合理的地方。
update Student
set Cno=null
where Sno='S5'
该操作不合理。不能将值null插入列'Cno'中,由第(2)题可只该列不允许有null值,update失败。
--2.在上述数据库中,找出Student关系模式中的基本函数依赖关系。
(Sno,Cno)→Grade
--3.尝试消除Student关系模式中不合理的数据冗余和操作异常问题,为什么?
Student(Sno,Sdept,Mname)
SC(Sno,Cno,Grade)
--4.已知关系模式R<U,F>,其中U={W,X,Y,Z},F={X→Z,WX→Y}。求(WX)F+。
令A=WX,由于函数依赖WX→Y,左边的所有属性都在A中,所以可以把右边的Y添加到A中,这时A=WXY;
其次考虑函数依赖X→Z,左边X在A中,右边Z不在A中,将其添加到A中,此时A=WXYZ;
上述方法再不能向A中添加属性,所以得到(WX)F+=WXYZ
--5.已知关系模式R<U,F>,其中U={A,B,C,D,E},F={AB→C,B→D,C→E,EC→B,AC→B}.求(AB)F+。
令X=AB,由于函数依赖AB→C,左边的所有属性都在X中,所以可以把右边的C添加到X中,这时X=ABC;
其次考虑函数依赖B→D,C→E,AC→B,左边B,C,AC均在X中,右边D,E不在X中,将其添加到X中,此时X=ABCDE;
再考虑函数依赖EC→B,左边EC在X中,右边B也在X中,不能向X中添加属性,所以得到(AB)F+=ABCDE
------解决思路----------------------
--部分已经做出解释,请仔细看注释,如果想深入学习数据库,楼主还需努力
-- 1.使用SQL语句完成如下操作:
--(1)建立描述学校教务的数据库(JWDB),该数据库包含单一的关系模式Student,其包含学号(Sno)、所在系(Sdept)、系主任姓名(Mname)、课程号(Cno)和成绩(Grade)。
create database JWDB
create table Student
(
Sno char(7) not null,
Sdept char(10), --建议数据类型除了字符串长度规定一致,最好用varchar()
Mname char(10),
Cno char(3) not null,
Grade int
)
--(2)请问Student关系模式的候选码是什么?使用SQL语句为Student创建主键。
candidate key:(Sno,Cno)。
alter table Student
add constraint pk_sno_cno --此处修改
primary key(Sno,Cno)
--(3)往Student中插入如下实例数据:
--Sno Sdept Mname Cno Grade
--S1 电子商务系 张明 C1 95
--S2 电子商务系 张明 C2 90
--S3 电子商务系 张明 C1 88
--S4 电子商务系 张明 C1 70
--S5 计算机系 曾刚 C1 78
insert into Student
values('S1','电子商务系','张明','C1',95)
insert into Student
values('S2','电子商务系','张明','C2',90)
insert into Student
values('S3','电子商务系','张明','C1',88)
insert into Student
values('S4','电子商务系','张明','C1',70)
insert into Student
values('S5','计算机系','曾刚','C1',78)
--(4)假设电子商务系系主任变成“张三”,请用SQL语句完成相应操作。请问这种操作是否有不合理的地方?
update Student
set Mname='张三'
where Sdept='电子商务系'
--(5)假设学校新成立外语系,并任命李四为系主任,请用SQL语句完成相应操作。请问这种操作是否有不合理的地方?
--主键不能插入空值的,主键是用来辨识一条记录的唯一性的,是非空属性
insert into Student
values(null,'外语系','李四',null,null)
该操作不合理。不能将值null插入列'Sno','Cno'中,因为第(2)题已将'Sno','Cno'设为主键,而主键值不能为null,插入失败。
--(6)假设学生S5需要退选C1课程,请用SQL语句完成相应操作。请问这种操作是否有不合理的地方。
update Student
set Cno=null --cno=''
where Sno='S5'
该操作不合理。不能将值null插入列'Cno'中,由第(2)题可只该列不允许有null值,update失败。
--2.在上述数据库中,找出Student关系模式中的基本函数依赖关系。
(Sno,Cno)→Grade
--3.尝试消除Student关系模式中不合理的数据冗余和操作异常问题,为什么?
Student(Sno,Sdept,Mname)
SC(Sno,Cno,Grade)
--4.已知关系模式R<U,F>,其中U={W,X,Y,Z},F={X→Z,WX→Y}。求(WX)F+。
令A=WX,由于函数依赖WX→Y,左边的所有属性都在A中,所以可以把右边的Y添加到A中,这时A=WXY;
其次考虑函数依赖X→Z,左边X在A中,右边Z不在A中,将其添加到A中,此时A=WXYZ;
上述方法再不能向A中添加属性,所以得到(WX)F+=WXYZ
--5.已知关系模式R<U,F>,其中U={A,B,C,D,E},F={AB→C,B→D,C→E,EC→B,AC→B}.求(AB)F+。
令X=AB,由于函数依赖AB→C,左边的所有属性都在X中,所以可以把右边的C添加到X中,这时X=ABC;
其次考虑函数依赖B→D,C→E,AC→B,左边B,C,AC均在X中,右边D,E不在X中,将其添加到X中,此时X=ABCDE;
再考虑函数依赖EC→B,左边EC在X中,右边B也在X中,不能向X中添加属性,所以得到(AB)F+=ABCDE