1.針對給定的應用場景或自選應用場景設計數據庫,給出概念模式(E-R圖)、邏輯模式(基本表、主外鍵約束)、物理模式(索引);(場景1:倉庫管理,每個倉庫有若干保管員,每個保管員可以管理多個倉庫,每個倉庫可以存放多種商品,每種商品只能放一個倉庫;場景2:教學管理,每個老師可以教多個學生;每個學生可以跟多個老師學習,每個老師可以教多門課,每門課可以多個老師教,每個學生可以選多門課,每門課可以多個學生選。
2.能夠將SQL語句嵌入高級編程語言或通過存儲過程對數據庫表進行操作(包括增加、修改、刪除、查詢等操作,C、C++、JAVA、ASP、JSP或其它高級語言,數據庫系統不限);
(1)E-R圖:
(2)數據表
①表Student
主鍵:sno
②表Course
主鍵:cno
③表Teacher
主鍵:tno
④表Teach-class
主鍵:tno,cno
外鍵:tno,cno
⑤表Teach-stu
主鍵:sno,tno
外鍵:sno,tno
⑥表SC
主鍵:sno,cno
外鍵:sno,cno
(3)數據庫關係圖
(4)界面示例
①
②
③
④
執行該命令後的Student表:
學號爲20175198的學生成功被刪除。
⑤
修改前:
修改後:
修改成功。
⑥
插入新學生後的部分Student表:
表明插入成功。
⑦
⑧
(5)源程序
①
/*查詢學生表中的所有學生,並實現調用。*/
create procedure ALLstudent
as
begin
select * from Student;
end
go
execute ALLstudent;
②
/*根據學生的學號,查詢該生的詳細信息,並實現調用。*/
create procedure ChaSno @Sno char(10)
as
begin
select * from Student
where Sno = @Sno;
end
go
execute ChaSno '20175193';
③
/*根據學生的學號,查詢學生的姓名(姓名爲輸出參數),並實現調用。*/
create procedure Chasname
@sno char(10),
@stuname char(20) output
as
begin
select @stuname=Sname from student where sno=@sno;
end
declare @name char;
execute Chasname'20175197',@name output
select @name as 學生姓名;
④
/*刪除學號爲@sno的學生,並實現調用。*/
create procedure delsno
@sno char(10)
as
begin
delete from Student where sno = @sno;
end
go
execute delsno '20175198';
⑤
/*修改學號爲@sno學生的姓名,性別,年齡,系別,並實現調用。*/
ALTER procedure upstu
(@sno char(10),
@sname char(10),
@ssex char(10),
@sage char(10),
@sdept char(10)
)
as
update Student
set sname = @sname, ssex = @ssex,
sage = @sage, sdept= @sdept
where sno = @sno
go
execute upstu '20175198','馬龍','男','21','BS'
select * from Student;
⑥
/*向學生表中插入學生,並實現調用。*/
create procedure insstu
(@sno char(10),
@sname char(10),
@ssex char(10),
@sage char(10),
@sdept char(10)
)
as
begin
insert
into Student
values(@sno,@sname,@ssex,@sage,@sdept)
end
go
execute insstu '20175199','孫策','男','19','CS'
⑦
/* 查詢姓名爲@sname選修的數據庫課程的成績,並實現調用。*/
create procedure findname
@sname char(10)
as
select grade
from SC,Student,Course
where sname = @sname and
Student.sno = SC.sno and
SC.cno = Course.cno and
Cname = '數據庫'
go
execute findname '張靜'
⑧
/* 查詢選修了課程名爲@cname並且成績高於
該門課程平均分的學生學號和成績,並實現調用。*/
create procedure hgrade
@cname char(10)
as
begin
select sno,grade
from SC
where SC.cno =
(select cno
from Course
where cname = @cname
)
and
grade >=
(select AVG(grade)
from SC
group by cno
having SC.cno =
(select cno
from Course
where cname = @cname
)
)
end
go
execute hgrade '數據結構'