软件工程综合实践专题第一次作业
题目: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连接开发一个窗口程序。