数据库原理及应用实验五

目录

一、实验名称

二、实验目的

三、实验内容

四、实验任务

一、实验名称

学生成绩管理系统的数据库设计和数据操作

二、实验目的

掌握需求分析的方法,数据库概念结构设计、逻辑结构设计方法、物理结构设计的方法,
熟练掌握在 SQL Server 环境下的数据定义、数据查询、数据更新、数据控制的实现。

三、实验内容

1)采用面向对象方法对系统进行需求分析。
2)设计数据库的概念结构。
3)设计数据库的逻辑结构。
4)设计数据库的物理结构。
5)建立数据库、录入数据,并做指定的数据操作。

四、实验任务

学生成绩管理系统涉及教学系、班级、专业、学生、课程几个实体集。教学系从系编号、
系名称两个方面刻画。班级从班级编号、班级名称两个方面刻画。专业从专业编号、专业名
称两个方面刻画。学生从学号、姓名、性别,年龄、班级、专业、系别几个方面刻画。课程
从课程号、课程名、课程性质(课程性质指公共必修课、公共选修课、专业必修课、专业选
修课)、学时、学分、开课学期几个方面刻画。应用语义为:每个教学系有多个班级,每个班
级只属于一个教学系;每个教学系开设多个专业,每个专业只由一个教学系开设;每个专业
有多个班级,每个班级只属于一个专业;每个班级有多名学生,每个学生只属于一个班级;
一个专业开设多门课程,一门课程只属于一个专业;一个班级开设本专业的所有必修课,但
选修课由学生自选,一个学生可修多门课,一门课可由多名学生所修。
该系统要具有如下功能:
(1)学生基本信息的输入
(2)课程基本信息的输入
(3)修课及成绩信息的输入
输入指定班级指定课程的成绩。
(4)学生基本信息的修改
按学号修改指定学生的基本信息。
(5)课程基本信息的修改
按课程号修改指定课程的基本信息。
(6)修课及成绩信息的修改
按学号和课程名修改指定学生所修指定课程的成绩。
(7)学生基本信息的删除
按学号删除指定学生的基本信息及修课信息。注意删除某一个学生的基本信息后,该学
生的修课信息也要删除。
(8)课程基本信息的删除
按课程号删除指定课程的基本信息。注意删除某一门课程的基本信息后,所有选修该课
程的信息都必须删除。
(9)修课及成绩信息的删除
按学号和课程名删除指定学生所修指定课程及成绩信息。
(10)学生基本信息的查询
① 按学号查询指定学生的基本信息。
② 按姓名查询指定学生的基本信息。
(11)课程基本信息的查询
① 按课程号查询指定课程的基本信息。
② 按课程名查询指定课程的基本信息。
(12)修课及成绩信息的查询
① 按学号和课程名查询指定学生所修指定课程的成绩和学分绩点。
② 按学号查询指定学生所修全部课程的课程名、成绩和学分绩点。
③ 按班级和课程名查询指定班级所有学生选修指定课程的成绩,查询结果以学号、姓名、
成绩、学分绩点的形式显示。
(13)班级信息的设置
设置班级编号、班级名称,具有填加、删除、修改功能。
(14)专业信息的设置
设置专业编号、专业名称,具有填加、删除、修改功能。
(15)系别信息的设置
设置系别编号、系别名称,具有填加、删除、修改功能。
要求完成以下题目:
1、针对以上的需求运用面向对象的方法进行需求分析。
2、设计数据库的概念结构。
先设计初步的 E-R 图,再对初步的 E-R 图进行优化,得到基本的 E-R 图。要求所建立的
概念结构能真实反映上述的应用语义。
3、设计数据库的逻辑结构
先将基本的 E-R 图转换为关系模型,在将能合并的关系模式进行合并。要求所建立的关
系模式至少达到 3NF 要求。
4、设计数据库的物理结构
① 确定关系
确定每个关系模式的关系,包括关系名、字段名、字段的数据类型、字段的宽度。
②确定索引
根据系统的功能需求,确定合适的索引。
③确定存储安排
确定数据库文件、日志文件、数据库备份的存储位置。
5、建立数据库
根据设计的数据库物理结构,在 SQL Server 环境下建立数据库,包括建立基本表、索
引。要求建立基本表时必须确定完整性约束条件。
6、建立视图
建立视图,视图名为“学生成绩”,包含有:学号、姓名、班级、课程名、成绩、学分绩
点。
7、录入数据
在每个基本表中录入一批数据。
8、数据查询
(1)给定学号,按学号查询指定学生的基本信息。
(2)给定姓名,按姓名查询指定学生的基本信息。
(3)给定课程号,按课程号查询指定课程的基本信息。
(4)给定课程名,按课程名查询指定课程的基本信息。
(5)给定学号和课程名,按学号和课程号查询指定学生所修指定课程的成绩和学分绩点。
(6)给定学号,按学号查询指定学生所修全部课程的课程名、成绩和学分绩点。要求使
用所建立的“学生成绩” 视图。
(7)给定班级和课程名,按班级和课程号查询指定班级所有学生选修指定课程的成绩,
查询结果以学号、姓名、成绩、学分绩点的形式显示。要求使用所建立的“学生成绩” 视图。
(8)查询每个学生的学分绩点的总和及平均学分绩点。
9、数据更新
(1)插入一个学生的基本信息。
(2)插入一门课程的基本信息。
(3)插入一个学生某一门课的成绩。
(4)给定学号,按学号修改指定学生的基本信息。
(5)给定课程号,按课程号修改指定课程的基本信息。
(6)给定学号和课程名,按学号和课程名修改指定学生所修指定课程的成绩。
(7)给定学号,按学号删除指定学生的基本信息及修课信息。
(8)给定学号和课程名,按学号和课程名删除指定学生所修指定课程及成绩信息。
10、数据控制
先新建几个不同的数据库用户,给他们赋予不同的权限,然后自己以这些不同的用户登
录 SQL Server,比较操作权限的不同。

--局部E-R图

 

 

--整体E-R图

 

 --关系模式
教学系(系编号、系名称)
班级(班级编号、班级名称)
专业(专业编号、专业名称)
学生(学号、姓名、性别、年龄、班级、专业、系别)
课程(课程号、课程名、学时、学分、开课学期 )
选课(学号、课程号、成绩)

--创建学生管理系统
create database 学生管理系统;

--创建教学系表
create table 教学系 (
   系编号                  smallint             not null,
   系名称                  char(10)             null,
   constraint PK_教学系 primary key (系编号)
)
go

--创建专业表
create table 专业 (
   专业编号                 smallint             not null,
   系编号                  smallint             null,
   专业名称                 char(10)             null,
   constraint PK_专业 primary key (专业编号)
)
go

--创建班级表
create table 班级 (
   班级编号                 smallint             not null,
   专业编号                 smallint             null,
   班级名称                 char(10)             null,
   constraint PK_班级 primary key (班级编号)
)
go

--创建学生表
create table 学生 (
   学号                   smallint             not null,
   姓名                   char(10)             null,
   性别                   char(2)              null,
   年龄                   smallint             null,
   班级编号                smallint             null,
   专业编号                smallint             null,
   系编号                  smallint             null,
   constraint PK_学生 primary key (学号)
)
go


--创建课程表
create table 课程 (
   课程号                  smallint             not null,
   课程名                  char(10)             null,
   学时                   smallint             null,
   学分                   smallint             null,
   开课学期                 char(10)             null,
   constraint PK_课程 primary key (课程号)
)
go

--创建选修课表
create table 选修课 (
   学号                   smallint            not null,
   课程号                 smallint             not null,
   成绩                   decimal(4,2)         null,
   绩点                   decimal(4,2)         null,
   负责人                  char(10)             null,
   constraint PK_选修课 primary key (学号, 课程号)
)
go

alter table 选修课 add constraint PK_选修课 primary key(学号, 课程号)

--创建必修课表
create table 必修课 (
   学号                   smallint            not null,
   课程号                 smallint             not null,
   成绩                   decimal(4,2)         null,
   绩点                   decimal(4,2)         null,
   constraint PK_必修课 primary key (学号, 课程号)
)
go
alter table 必修课 add constraint PK_必修课 primary key(学号, 课程号)  

--添加外键约束
alter table 专业
   add constraint FK_专业_REFERENCE_教学系 foreign key (系编号)
      references 教学系 (系编号)
go

alter table 学生
   add constraint FK_学生_REFERENCE_班级 foreign key (班级编号)
      references 班级 (班级编号)
go

alter table 必修课
   add constraint FK_必修课_REFERENCE_课程 foreign key (课程号)
      references 课程 (课程号)
go

alter table 必修课
   add constraint FK_必修课_REFERENCE_学生 foreign key (学号)
      references 学生 (学号)
go

alter table 班级
   add constraint FK_班级_REFERENCE_专业 foreign key (专业编号)
      references 专业 (专业编号)
go

alter table 选修课
   add constraint FK_选修课_REFERENCE_课程 foreign key (课程号)
      references 课程 (课程号)
go

alter table 选修课
   add constraint FK_选修课_REFERENCE_学生 foreign key (学号)
      references 学生 (学号)
go

--触发器
  --删除学生信息同时删掉选课信息
  create trigger tri_student
on [学生]
after delete
as
delete from [选修课]
where 学号 in
(select 学号 from deleted)

  create trigger tri_student1
on [学生]
after delete
as
delete from [必修课]
where 学号 in
(select 学号 from deleted)

 create trigger tri_course
on [课程]
after delete
as
delete from [选修课]
where 课程号 in
(select 课程号 from deleted)

  create trigger tri_course1
on [课程] 
after delete
as
delete from [必修课]
where 课程号 in
(select 课程号 from deleted)


--创建索引
  create unique index c1 on 学生(学号 ASC);
create unique index c2 on 课程(课程号 ASC,学分 DESC);

--院系基本信息输入
insert into 教学系 values (01,'计算机系'),
                          (02,'中文系'),
						  (03,'体育教育系'),
						  (04,'影视传媒系'),
						  (05,'工程管理系')

--专业基本信息输入
insert into 专业 values(1,01,'计算机专业'),
                       (2,01,'信计专业')
insert into 专业 values(3,02,'汉语言专业'),
				  	   (4,02,'历史专业')
insert into 专业 values(5,03,'武术专业'),
				  	   (6,03,'运训专业')
insert into 专业 values(7,04,'播音专业'),
				  	   (8,04,'配音专业')
insert into 专业 values(9,05,'土木专业'),
				  	   (10,05,'测绘专业')

--班级基本信息输入
insert into 班级 values(2101,1,'计本2101'),
				  	   (2102,1,'计本2102'),
					   (2103,2,'信计2103'),
					   (2104,2,'信计2104')
insert into 班级 values(2105,3,'汉语言2105'),
				  	   (2106,3,'汉语言2106'),
					   (2107,4,'历史2107'),
					   (2108,4,'历史2108')
insert into 班级 values(2109,5,'武术2109'),
				  	   (2110,5,'武术2110'),
					   (2111,6,'运训2111'),
					   (2112,6,'运训2112')
insert into 班级 values(2113,7,'播音2113'),
				  	   (2114,7,'播音2114'),
					   (2115,8,'配音2115'),
					   (2116,8,'配音2116')
insert into 班级 values(2117,9,'土木2117'),
				  	   (2118,9,'土木2118'),
					   (2119,10,'测绘2119'),
					   (2120,10,'测绘2120')

--学生基本信息输入
insert into 学生 values(21001,'张一','男',21,2101,1,01),
                       (21002,'张二','女',19,2102,1,01),
					   (21003,'张三','男',21,2105,3,02),
					   (21004,'张四','男',22,2107,4,02),
					   (21005,'张五','女',19,2110,5,03),
					   (21006,'张六','女',20,2118,9,05),
					   (21007,'张七','男',21,2113,7,04),
					   (21008,'张八','男',18,2111,6,03),
					   (21009,'张九','女',20,2114,7,04),
					   (21010,'张十','男',22,2116,8,04)
insert into 学生 values(21011,'甜甜','女',20,2101,1,01),
                       (21012,'壮壮','男',21,2101,1,01),
					   (21013,'李丽','女',23,2101,1,01),
					   (21014,'王萍','女',19,2101,1,01)

--课程基本信息输入
insert into 课程 values(10001,'高等数学',20,5,'大一上学期'),
                       (10002,'高等数学',20,5,'大二上学期'),
					   (10003,'Java',30,5,'大二上学期'),
					   (10004,'中国近代史',35,4,'大一上学期'),
					   (10005,'心理健康',15,3,'大一上学期'),
					   (10006,'大学英语',30,4,'大一上学期'),
					   (10007,'大学英语',30,4,'大二下学期'),
					   (10008,'大学英语',30,3,'大一下学期'),
					   (10009,'大学英语',30,3,'大二上学期'),
					   (10010,'C语言',40,6,'大一上学期'),
					   (10011,'数据结构',30,5,'大一下学期'),
					   (10012,'数据库',30,4,'大二下学期'),
					   (10013,'工程建筑',40,5,'大一下学期'),
					   (10014,'工程测绘',30,3,'大一上学期'),
					   (10015,'播音主持',36,2,'大一上学期'),
					   (10016,'配音',20,4,'大一上学期'),
					   (10017,'汉语言文学',40,5,'大一上学期'),
					   (10018,'运动康复',20,1,'大一下学期'),
					   (10019,'中国武术',35,3,'大二上学期'),
					   (10020,'计算机组成',30,3,'大二下学期')
insert into 课程 values(10021,'心理健康',15,3,'大二上学期');

--选修课及成绩信息输入
insert into 选修课 values(21001,10005,95,'马'),
                         (21002,10001,90,'钱'),
						 (21003,10020,75,'孙'),
						 (21004,10006,70,'李'),
						 (21005,10007,80,'周'),
						 (21006,10002,85,'吴'),
						 (21007,10021,80,'郑'),
						 (21008,10005,78,'马'),
						 (21009,10019,73,'陈'),
						 (21010,10020,65,'王')
update 选修课 set 绩点 = 4 where 成绩>=90
update 选修课 set 绩点 = 3.5 where 成绩<90 and 成绩>=80
update 选修课 set 绩点 = 3 where 成绩<80 and 成绩>=70
update 选修课 set 绩点 = 2.5 where 成绩<70 and 成绩>=60
update 选修课 set 绩点 = 0 where 成绩<60

--必修课及成绩信息输入
insert into 必修课 values(21001,10003,75),
                         (21001,10010,85),
						 (21001,10012,65),
                         (21002,10020,79),
						 (21003,10017,59),
						 (21003,10004,79),
						 (21004,10004,89),
						 (21005,10019,90),
						 (21005,10018,80),
						 (21006,10013,75),
						 (21006,10014,60),
						 (21007,10016,86),
						 (21008,10018,79),
						 (21009,10015,49),
						 (21010,10016,70)
insert into 必修课 values(21011,10010,95,4),
                         (21012,10010,94,4),
						 (21013,10010,78,3),
						 (21014,10010,80,3.5)
update 必修课 set 绩点 = 4 where 成绩>=90
update 必修课 set 绩点 = 3.5 where 成绩<90 and 成绩>=80
update 必修课 set 绩点 = 3 where 成绩<80 and 成绩>=70
update 必修课 set 绩点 = 2.5 where 成绩<70 and 成绩>=60
update 必修课 set 绩点 = 0 where 成绩<60


--创建学生成绩视图学号、姓名、班级、课程名、成绩、学分、绩点
create view view_学生成绩1
AS
select 学生.学号,
学生.姓名,
班级.班级名称,
课程.课程名,
选修课.成绩 选修课成绩,
课程.学分,
选修课.绩点 as 选修课绩点
from 学生,选修课,课程,班级
where 学生.学号=选修课.学号 and 选修课.课程号 = 课程.课程号 and 班级.班级编号 = 学生.班级编号

create view view_学生成绩2
AS
select 学生.学号,
学生.姓名,
班级.班级名称,
课程.课程名,
必修课.成绩 必修课成绩,
课程.学分,
必修课.绩点 as 必修课绩点
from 学生,必修课,课程,班级
where 学生.学号=必修课.学号 and 必修课.课程号 = 课程.课程号 and 班级.班级编号 = 学生.班级编号

create view view_学生成绩
AS
select 学号,
姓名,
班级名称,
课程名,
选修课成绩 as 成绩,
学分,
选修课绩点 as 绩点,
学分*选修课绩点 as 学分绩点
from view_学生成绩1 
union
select 学号,
姓名,
班级名称,
课程名,
必修课成绩 as 成绩,
学分,
必修课绩点 as 绩点,
学分*必修课绩点 as 学分绩点
from view_学生成绩2 

select * from view_学生成绩

--数据查询
  --给定学号21001,按学号21001查询指定学生的基本信息
  select * 
     from 学生
	   where 学号 = 21001;

  --给定姓名张九,按姓名张九查询指定学生的基本信息
  select *
    from 学生
	  where 姓名 = '张九';

  --给定课程号10010,按课程号10010查询指定课程的基本信息
  select *
    from 课程
	  where 课程号 = 10010;

  --给定课程名Java,按课程名Java查询指定课程的基本信息
    select *
      from 课程
	    where 课程名 = 'Java';

  --给定学号21002和课程号10020,按照学生学号21002和课程号10020查询指定学生所修指定课程的成绩和学分绩点
  select  成绩,学分绩点
	from view_学生成绩
	  where 学号 = 21002 and view_学生成绩.课程名 = (select 课程名 
	                                                   from 课程
													     where 课程号 = 10020);

  --给定学号21001,按照学号21001查询指定学生所修全部课程的课程名、成绩和学分绩点。要求使用所建立的“学生成绩”视图
  select 课程名,成绩,学分绩点
    from view_学生成绩
	  where 学号 = 21001;

  --给定班级编号2101和课程号10010,按照班级编号2101和课程号10010查询指定班级所有学生选修指定课程的成绩,
    --查询结果以学号、姓名、成绩、学分绩点的形式显示。要求使用所建立的“学生成绩”视图
	select 学号,姓名,成绩,学分绩点
	  from view_学生成绩
	    where view_学生成绩.课程名 = (select 课程名 
	                                    from 课程
										  where 课程号 = 10010) 
			  and 
			  view_学生成绩.班级名称 = (select 班级名称
			                              from 班级
										    where 班级编号 = 2101);						  									  
  
  --查询每个学生的学分绩点的总和及平均学分绩点
  select 姓名,sum(学分绩点)as 总学分绩点,avg(学分绩点) as 平均学分绩点 
    from view_学生成绩 group by 姓名 
	  order by 总学分绩点 desc,平均学分绩点 desc;

--数据更新
  --插入一个学生的基本信息
  insert into 学生 values(21015,'娅娅','女',20,2102,1,01);
  select * from 学生 where 学号 = 21015;

  --插入一门课程的基本信息
  insert into 课程 values(10022,'计网原理',20,5,'大二下学期');
  select * from 课程 where 课程号 = 10022;

  --插入一个学生某一门课的成绩
  insert into 选修课 values(21015,10022,89,3.5,'高');
  select * from 选修课 where 学号 = 21015 and 课程号 = 10022;

  --给定学号21001,按学号21001修改指定学生的年龄基本信息
  select * from 学生 where 学号 = 21001;
  update 学生 set 年龄 = 18 where 学号 = 21001;

  --给定课程号10001,按课程号10001修改指定课程10001的学时基本信息
  select * from 课程 where 课程号 = 10001;
  update 课程 set 学时 = 30 where 课程号 = 10001;

  --给定学号21006和课程名工程测绘,按学号21006和课程名工程测绘修改指定学生21006所修指定工程测绘课程的成绩
  select 成绩 from view_学生成绩 where 学号 = 21006 and 课程名 = '工程测绘';
  update 必修课 set 成绩 = 69 where 学号 = 21006 and 课程号 = (select 课程号 from 课程 where 课程名 = '工程测绘');

  --给定学号21015,按学号21015删除指定学生的基本信息及修课信息
  select * from 学生 where 学号 = 21015;
  select * from 必修课 where 学号 = 21015
  union
  select 学号,课程号,成绩,绩点 from 选修课 where 学号 = 21015;

  delete from 学生 where 学号 = 21015;
  select * from 学生

  --给定学号21007和课程名心理健康,按学号21014和课程名心理健康删除指定学生所修指定课程及成绩信息 
  select * from 必修课 where 学号 = 21007
  union
  select 学号,课程号,成绩,绩点 from 选修课 where 学号 = 21007;
  select * from 课程 where 课程号 in(10016,10021);
  delete from 课程 where 课程名 = '心理健康';

--数据控制
  --创建LaiPign用户赋予查学生表权限
  SP_addlogin 'LaiPing','123456';
  SP_adduser 'LaiPing';
  grant select on 学生 to LaiPing with grant option;

  --创建LiLi用户赋予删除选修课表权限
  SP_addlogin 'LiLi','123456';
  SP_adduser 'LiLi';
  grant delete on 选修课 to LiLi with grant option;
  grant select on 选修课 to LiLi with grant option;

  --创建LiPign用户赋予插入选修课表权限
  SP_addlogin 'LiPign','123456';
  SP_adduser 'LiPign';
  grant insert on 选修课 to LiPign ;
  grant select on 选修课 to LiPign ;

  select * from 学生;
  select * from 选修课;
  delete from 选修课 where 学号 = 21006

  insert into 选修课 values (21001,10019,80,3,'五月')
  select * from 选修课;

 

1、有一课程管理系统,有如下特点:一个系可开设多门课程,但一门课只在一个系部开 设,一个学生可选修多门课程,每门课可供若干学生选修,一名教师只教一门课程,但 一门课程可有几名教师讲授,每个系聘用多名教师,但一个教师只能被一个系所聘用, 要求这个课程管理系统能查到任何一个学生某门课程的成绩,以及这个学生的这门课是 哪个老师所教的。 (1)请根据以上描述,绘制相应的E-R图,并直接在E- R图上注明实体名、属性、联系类型; (2)将E-R图转换成关系模型,画出相应的数据库模型图,并说明主键和外键。 (3)分析这些关系模式中所包含的函数依赖,根据这些函数依赖,分析相应的关系模式 达到了第几范式。对这些关系模式进行规范化。 1、参考答案: 2、设某汽车运输公司数据库中有三个实体集。一是"车队"实体集,属性有车队号、车队 名等;二是"车辆"实体集,属性有牌照号、厂家、出厂日期等;三是"司机"实体集,属 性有司机编号、姓名、电话等。 车队与司机之间存在"聘用"联系,每个车队可聘用若干司机,但每个司机只能应聘于一 个车队,车队聘用司机有"聘用开始时间"和"聘期"两个属性; 车队与车辆之间存在"拥有"联系,每个车队可拥有若干车辆,但每辆车只能属于一个 车队; 司机与车辆之间存在着"使用"联系,司机使用车辆有"使用日期"和"公里数"两个属性 ,每个司机可使用多辆汽车,每辆汽车可被多个司机使用。 (1)请根据以上描述,绘制相应的E-R图,并直接在E- R图上注明实体名、属性、联系类型; (2)将E-R图转换成关系模型,画出相应的数据库模型图,并说明主键和外键。 (3)分析这些关系模式中所包含的函数依赖,根据这些函数依赖,分析相应的关系模式 达到了第几范式。对这些关系模式进行规范化。 2、参考答案: (1)E-R图设计如下: (2)转换成的关系模型应具有4个关系模式: 车队(车队号,车队名) 车辆(车牌照号,厂家,生产日期,车队号) 司机(司机编号,姓名,电话,车队号,聘用开始时间,聘期) 使用(司机编号,车辆号,使用日期,公里数) 3、设某商业集团数据库中有三个实体集。一是"仓库"实体集,属性有仓库号、仓库名和 地址等;二是"商店"实体集,属性有商店号、商店名、地址等;三是"商品"实体集,属 性有商品号、商品名、单价。 仓库与商品之间存在"库存"联系,每个仓库可存储若干种商品,每种商品存储在若干仓 库中,库存有个"库存量"、"存入日期"属性; 商店与商品之间存在着"销售"联系,每个商店可销售若干种商品,每种商品可在若干 商店里销售,每个商店销售一种商品有月份和月销售量两个属性; 仓库、商店、商品之间存在一个三元联系"供应",反应了把某个仓库中存储的商品供 应到某个商店,此联系有月份和月供应量两个属性。 (1)请根据以上描述,绘制相应的E-R图,并直接在E- R图上注明实体名、属性、联系类型; (2)将E-R图转换成关系模型,画出相应的数据库模型图,并说明主键和外键。 (3)分析这些关系模式中所包含的函数依赖,根据这些函数依赖,分析相应的关系模式 达到了第几范式。对这些关系模式进行规范化。 3、参考答案 (1)E-R图设计如下: (2)据转换规则, E-R图可转换成6个关系模式: 仓库(仓库号,仓库名,地址) 商品(商品号,商品名,单价) 商店(商店号,商店名,地址) 库存(仓库号,商品号,日期,库存量) 销售(商店号,商品号,月份,月销售量) 供应(仓库号,商店号,商品号,月份,月供应量) 4.设有关系模式 R(职工名,项目名,工资,部门名,部门经理) 如果规定每个职工可参加多个项目,各领一份工资;每个项目只属于一个部门管理, 一个部门有多个项目;每个部门只有一个经理。 1. 试写出关系模式R的函数依赖和关键码。 2. 说明R不是2NF模式的理由,并把R分解成2NF模式集。 3. 进而把R分解成3NF模式集,并说明理由。 4、参考答案 R的基本函数依赖有三个: (职工名,项目名)(工资 项目名 (部门名 部门名 (部门经理 项目名 (部门经理 关键码为(职工名,项目名)。 根据 ,R中存在下列两个函数依赖: (职工名,项目名)( 项目名 ((部门名) (职工名,项目名)( 项目名 ((部门经理) 这两个函数依赖都是局部依赖,因此R不是2NF模式。 R应分解成两个模式: R1(项目名,部门名,部门经理) R2(职工名,项目名,工资) R1和R2都是2NF模式。 R2已是3NF模式,因为非主属性"工资"已经完全依赖主键"职工名,项目名" 在R1中,由于存在两个函数依赖: 项目名(部门名 部门名\(项目名 部门名(部门经理 即存在非主属性对主键的传递依赖,因此R1不是3NF模式。 对R1应分解成两个模式:R11(项目名,部门名),R12(部门名,部门经
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值