软件工程综合实践专题第一次作业
题目:NBA数据库程序分析
来源:SQL SERVER数据库课程同学的小组大作业
create table Coach_information(
cname char(20) primary key,
tname char(20),
age int,
)
insert into Coach_information values(\'卢克沃顿\',\'洛杉矶湖人\',\'38\')
insert into Coach_information values(\'史蒂夫科尔\',\'金州勇士\',\'50\')
insert into Coach_information values(\'迈克德安东尼\',\'休斯敦火箭\',\'67\')
insert into Coach_information values(\'布拉德史蒂文斯\',\'波士顿凯尔特人\',\'42\')
select * from Coach_information
create table Team_information(
tname char(20) primary key,
qiuguan_name char(20),
cname char(20) foreign key references Coach_information(cname)
)
insert into Team_information values(\'洛杉矶湖人\',\'斯台普斯中心\',\'卢克沃顿\')
insert into Team_information values(\'金州勇士\',\'甲骨文球馆\',\'史蒂夫科尔\')
insert into Team_information values(\'休斯敦火箭\',\'丰田中心\',\'迈克德安东尼\')
insert into Team_information values(\'波士顿凯尔特人\',\'TD花园\',\'布拉德史蒂文斯\')
select * from Team_information
create table Match_information(
match_time char(20) unique,
tname char(20) primary key,
vname char(20)
)
insert into Match_information values(\'2019.6.11_9:00\',\'洛杉矶湖人\',\'波士顿凯尔特人\')
insert into Match_information values(\'2019.4.28_8:00\',\'金州勇士\',\'休斯敦火箭\')
select * from Match_information
create table Player_information(
pname char(50) primary key,
age int,
height float,
weighet float,
weizhi char(20),
number int,
tname char(20),
foreign key (tname)references Team_information(tname)
)
insert into Player_information values(\'勒布朗詹姆斯\',33,2.03,113,\'SF/PF\',23,\'洛杉矶湖人\')
insert into Player_information values(\'布兰登英格拉姆\',21,2.06,86,\'SF\',14,\'洛杉矶湖人\')
insert into Player_information values(\'朗佐鲍尔\',21,1.98,86,\'PG\',2,\'洛杉矶湖人\')
insert into Player_information values(\'凯尔库兹马\',23,2.06,100,\'SF\',0,\'洛杉矶湖人\')
insert into Player_information values(\'贾维尔麦基\',30,2.13,122,\'C\',7,\'洛杉矶湖人\')
insert into Player_information values(\'斯蒂芬库里\',30,1.91,86,\'PG\',30,\'金州勇士\')
insert into Player_information values(\'凯文杜兰特\',30,2.06,109,\'SF\',35,\'金州勇士\')
insert into Player_information values(\'克莱汤普森\',28,2.03,98,\'PG\',11,\'金州勇士\')
insert into Player_information values(\'德雷蒙德格林\',28,2.01,104,\'PF\',23,\'金州勇士\')
insert into Player_information values(\'德马库斯考辛斯\',28,2.11,122,\'C\',0,\'金州勇士\')
insert into Player_information values(\'克里斯保罗\',33,1.83,79,\'PG\',3,\'休斯敦火箭\')
insert into Player_information values(\'詹姆斯哈登\',29,1.96,100,\'PG\',13,\'休斯敦火箭\')
insert into Player_information values(\'克林特卡佩拉\',24,2.11,109,\'C\',15,\'休斯敦火箭\')
insert into Player_information values(\'埃里克戈登\',29,1.93,98,\'PF\',10,\'休斯敦火箭\')
insert into Player_information values(\'PJ塔克\',33,1.98,111,\'PF\',17,\'休斯敦火箭\')
insert into Player_information values(\'戈登海沃德\',28,2.03,102,\'SF\',20,\'波士顿凯尔特人\')
insert into Player_information values(\'凯里欧文\',26,1.91,88,\'PG\',11,\'波士顿凯尔特人\')
insert into Player_information values(\'杰森塔图姆\',20,2.03,93,\'SF\',0,\'波士顿凯尔特人\')
insert into Player_information values(\'艾尔霍福德\',32,2.08,111,\'C/PF\',42,\'波士顿凯尔特人\')
insert into Player_information values(\'马库斯斯马特\',24,1.93,100,\'PG\',36,\'波士顿凯尔特人\')
create table Player_data
(
pname char(20) primary key,
time float,
score int,
backboard int,
assist int,
steal int,
block_shot int,
match_time char(20) foreign key references Match_information(match_time)
)
insert into Player_data values(\'勒布朗詹姆斯\',43,34,10,2,1,0,\'2019.6.11_9:00\')
insert into Player_data values(\'布兰登英格拉姆\',35,20,5,6,2,1,\'2019.6.11_9:00\')
insert into Player_data values(\'朗佐鲍尔\',36,25,6,4,6,0,\'2019.6.11_9:00\')
insert into Player_data values(\'凯尔库兹马\',34,20,10,3,5,0,\'2019.6.11_9:00\')
insert into Player_data values(\'贾维尔麦基\',30,9,10,10,3,8,\'2019.6.11_9:00\')
insert into Player_data values(\'斯蒂芬库里\',39,28,5,7,0,0,\'2019.4.28_8:00\')
insert into Player_data values(\'凯文杜兰特\',40,20,7,5,1,1,\'2019.4.28_8:00\')
insert into Player_data values(\'克莱汤普森\',36,20,2,3,0,0,\'2019.4.28_8:00\')
insert into Player_data values(\'德雷蒙德格林\',38,15,9,11,4,0,\'2019.4.28_8:00\')
insert into Player_data values(\'德马库斯考辛斯\',35,30,10,5,11,6,\'2019.4.28_8:00\')
insert into Player_data values(\'克里斯保罗\',40,28,10,4,2,0,\'2019.4.28_8:00\')
insert into Player_data values(\'詹姆斯哈登\',39,30,8,3,4,1,\'2019.4.28_8:00\')
insert into Player_data values(\'克林特卡佩拉\',30,9,2,3,4,5,\'2019.4.28_8:00\')
insert into Player_data values(\'埃里克戈登\',32,16,3,5,6,7,\'2019.4.28_8:00\')
insert into Player_data values(\'PJ塔克\',28,14,4,5,0,0,\'2019.4.28_8:00\')
insert into Player_data values(\'戈登海沃德\',39,20,4,2,3,5,\'2019.6.11_9:00\')
insert into Player_data values(\'凯里欧文\',40,30,10,3,4,0,\'2019.6.11_9:00\')
insert into Player_data values(\'杰森塔图姆\',39,30,9,2,4,0,\'2019.6.11_9:00\')
insert into Player_data values(\'艾尔霍福德\',30,10,3,4,5,9,\'2019.6.11_9:00\')
insert into Player_data values(\'马库斯斯马特\',27,18,3,4,0,0,\'2019.6.11_9:00\')
create table yonghu(
account char(20) primary key,
phone char(20),
password char(20)
pri int
)
insert into yonghu values(\'1759240\',\'17609396094\',\'heyixuan\',0)
insert into yonghu values(\'1759233\',\'17521577265\',\'xhy\',1)
select * from yonghu
create table user_favor(
account char(20) primary key,
flag int,
pname char(20)
create procedure Player
@pname char(50)
as select Player_information.pname 姓名,age 年龄,height 身高,weighet 体重,weizhi 位置,number 号码,tname 所属运动队,上场时间,得分,篮板,助攻,抢断,盖帽
from Player_information join(select pname,avg(time) 上场时间,avg(score) 得分,avg(backboard) 篮板,avg(assist) 助攻,avg(steal) 抢断,avg(block_shot) 盖帽 from Player_data group by pname) A on Player_information.pname=A.pname
where Player_information.pname=@pname
exec Player\'詹姆斯哈登\'
go
create view 洛杉矶湖人 as
select team_information.tname,team_information.qiuguan_name,player_information.pname,player_information.age,player_information.height,player_information.weighet,player_information.weizhi,player_information.number
from team_information,player_information
where team_information.tname=player_information.tname and team_information.tname=\'洛杉矶湖人\'
create view 金州勇士 as
select team_information.tname,team_information.qiuguan_name,player_information.pname,player_information.age,player_information.height,player_information.weighet,player_information.weizhi,player_information.number
from team_information,player_information
where team_information.tname=player_information.tname and team_information.tname=\'金州勇士\'
create view 休斯敦火箭 as
select team_information.tname,team_information.qiuguan_name,player_information.pname,player_information.age,player_information.height,player_information.weighet,player_information.weizhi,player_information.number
from team_information,player_information
where team_information.tname=player_information.tname and team_information.tname=\'休斯敦火箭\'
create view 波士顿凯尔特人 as
select team_information.tname,team_information.qiuguan_name,player_information.pname,player_information.age,player_information.height,player_information.weighet,player_information.weizhi,player_information.number
from team_information,player_information
where team_information.tname=player_information.tname and team_information.tname=\'波士顿凯尔特人\'
select * from 金州勇士
select * from 洛杉矶湖人
select * from 波士顿凯尔特人
select * from 休斯敦火箭
delete Player_information where pname=\'朗佐鲍尔\'
create trigger delete_player
on player_information
after delete
as
begin
declare @pname char(8)
select @pname=pname from deleted
delete player_data where pname=@pname
select @pname as\'退役球员\'
end
create table score1(
score1 float,
pname1 char(20)
)
declare Score cursor
for
select score,pname from Player_data
open Score
declare @score float
declare @pname char(20)
fetch next from Score into @score,@pname
while @@fetch_status=0
begin
fetch next from Score into @score,@pname
end
begin
insert into score1
values(@score,@pname)
fetch next from Score into @score,@pname
end
close Score
deallocate Score
select pname=pname1,score=max(score1)
from score1
group by pname1
create procedure time_perform(@weizhi char)
as
select Player_data.pname as ‘球员姓名’, time as ‘上场时间’ from Player_data
join Player_information
on Player_information.pname = Player_data.pname
where weizhi = @weizhi
order by time desc
go
exec time_perform \'C\'
//存储过程
create proc StuProc(@pname char(20),@username char(20))
as
begin
if(@pname is not null and @username is not null)
begin
insert into user_favor(pname,account)
values(@pname,@username)
end
end
//对数据进行更新操作
create trigger trg_content_insert
on user_favor
instead of insert
as
declare @content varchar(20),@c int,@content1 char(20)
select @content=pname from inserted;
select @content1=account from inserted;
select @c=count(1) from user_favor where pname=@content and account=@content1;
if @c>0
update user_favor set flag=flag+1 where pname=@content and account=@content1;
else
begin
insert into user_favor select * from inserted;
update user_favor set flag=1;
end
go
//测试:
exec StuProc \'凯文杜兰特\',\'1759240\'
create trigger tri_noedit_name
on Player_data
instead of update
as
declare @fla int
select @fla=(select pri from user_favor where account=\'1759240\')
if update(score) and @fla=0
begin
print(\'你没有权限!\')
rollback tran
end
//测试:
update Player_data
set score=100
where pname=\'凯文杜兰特\'
功能:该数据库可以对比赛的信息,球员的信息,球队教练信息以及球员在比赛中的表现进行查询。有一个存储过程,可以显示特定球员的球员信息和球员平均数据。有一个触发器,删除球员信息的同时可以删除球员数据。有一个游标,当查询球员数据时显示MVP。有一个存储过程,可以查询特定位置上的球员数据排名。有一个触发器,可以识别用户等级,在更新数据的时候,若等级不够,则无法更改。有一个存储过程,可以记录用户喜好。
心得体会:该程序数据库的表结构科学,关系模式清晰,主键和外键使用正确,用SQL语句能完成一些基本的需求功能。功能明确,涵盖了用户所需要的功能,在此之上也有创新,增加的用户等级识别功能和记录用户喜好功能使程序更人性化,更符合用户的使用习惯。
遇到的问题:该数据库程序没有一个便于用户使用、易于操作的窗口程序。
解决办法:用JDBC把SQL SERVER与JAVA连接开发一个窗口程序。