资源描述
大型数据库技术设计报告
题 目:网络游戏信息管理系统数据库设计
学生姓名: 易进
学 号: 201317030119
专业班级: 网工13101班
指导教师: 刘波涛
设计时间: 2015年下学期
指导老师意见:
签名:
日期:
评定成绩:
目录
1. 需求分析 1
2. 概念模型设计 1
1. 玩家信息E—R图(如图1所示) 1
2。 游戏信息E-R图(如图2所示) 2
3。 排行信息E-R图(如同3所示) 2
4。 交易信息E—R图(如图4所示) 3
5. 游戏币信息E—R图(如图5所示) 3
6. 整体简洁E—R图(如图6所示) 4
7. 用户信息E—R图(如图7所示) 4
3。 逻辑结构设计 5
1. 关系模型设计 5
2. 数据库表结构的设计 5
4。 数据库的实现 7
1. 创建玩家信息表 7
2. 向玩家信息表中插入记录 8
3。 在表空间上创建游戏表 9
4。 向游戏表中插入记录 9
5. 创建排行信息表 9
6。 向排行信息表中插入记录 10
7。 创建交易信息表 10
8。 向交易信息表中插入记录 10
9. 创建游戏币信息表 11
10。 向游戏币信息表中插入记录 11
11. 创建用户信息表 11
12. 向用户信息表中插入记录 12
13。 建立外键和CHCEK约束 12
5。 主要代码 13
1. 查询代码 13
2. 创建视图 17
3. 创建存储过程 18
6。 数据库备份 20
1. 导出数据 20
s
1. 需求分析
要求实现玩家信息管理、游戏介绍、成绩排行等功能,包括玩家信息的添加、 修改、删除及查询;按游戏类型、关键字等实现网络游戏的灵活查询;实现游戏 币销售等功能。
2. 概念模型设计
1. 玩家信息E—R图(如图1所示)
等级
玩家
昵称
玩家编号
充值总金额
游戏编号
性别
图 1玩家信息E-R图
2. 游戏信息E-R图(如图2所示)
游戏名称
游戏类型
游戏
上线时间
游戏编号
运营公司
图 2游戏信息E—R图
3. 排行信息E-R图(如同3所示)
排行
充值总金额
游戏编号
游戏人数
图 Error! Bookmark not defined.排行信息E—R图
4. 交易信息E-R图(如图4所示)
玩家编号
交易
交易编号
玩家编号
RMB
交易时间
图 Error! Bookmark not defined.职务信息E-R图
5. 游戏币信息E—R图(如图5所示)
游戏币
游戏编号
游戏币
RMB
图 Error! Bookmark not defined.考勤信息E—R图
6. 整体简洁E-R图(如图6所示)
玩家
游戏
交易信息
排行
游戏编号
玩家编号
图 Error! Bookmark not defined.整体简洁E—R图
7. 用户信息E-R图(如图7所示)
用户
密码
权限
用 户 名
图 7用户信息E—R图
3. 逻辑结构设计
1. 关系模型设计
1) 玩家信息对应的关系模型
玩家(玩家编号(主键),姓名,性别,游戏编号(外键),等级,充值总金额
2) 游戏信息对应的关系模型
游戏(游戏编号(主键),游戏名称,运营公司,上线时间)
3) 排行信息对应的关系模型
排行(游戏编号(外键),游戏人数,充值总金额)
4) 交易信息对应的关系模型
交易(交易编号(主键),玩家编号,游戏编号,RMB金额,交易时间)
5) 考勤信息对应的关系模型
考勤(员工编号(主键一部分),日期(主键一部分),请假次数,迟到次数,缺勤次数)
6) 用户信息对应的关系模型
用户(用户名,密码,权限)
2. 数据库表结构的设计
1) 玩家信息表结构
2) 游戏信息表结构
3) 排行信息表结构
4) 交易信息表结构
5) 游戏币信息表结构
4. 数据库的实现
1. 创建玩家信息表
CREATE TABLE player
(
pid int primary key,
pname varchar(10),
sex varchar(2),
gid int,
levels int,
money int
);
2. 向玩家信息表中插入记录
insert into player values(1,'张三’,’男',1,58,51);
insert into player values(2,'李四',’男’,1,59,58);
insert into player values(3,’王五',’男’,2,27,65);
insert into player values(4,’赵六','男',2,25,25);
insert into player values(5,'徐涛',’男',2,29,5);
insert into player values(6,'石头’,'男’,3,27,53);
insert into player values(7,’陈子文',’男',3,25,5);
insert into player values(8,'王灿',’女',4,66,35);
insert into player values(9,’徐香气’,’女',4,66,25);
insert into player values(10,'郭俊明’,’男’,5,6,45);
insert into player values(11,'王一’,'男’,4,66,35);
insert into player values(12,’王二','女’,3,6,5);
insert into player values(13,'王三’,’男',4,66,30);
insert into player values(14,’王四','女’,2,76,35);
insert into player values(15,'王五五’,’女’,4,66,35);
insert into player values(16,'王六',’女’,1,89,3);
insert into player values(17,'王七 ’,’女',4,54,35);
insert into player values(18,'王八’,'男’,2,66,31);
insert into player values(19,’王九','女’,4,86,35);
insert into player values(20,’王十’,'女’,1,66,37);
insert into player values(21,’赵一',’男’,4,66,54);
insert into player values(22,'赵二’,'女’,3,66,35);
insert into player values(23,'赵三’,’男’,1,69,38);
insert into player values(24,’赵四’,’男',5,66,39);
insert into player values(25,’赵五','女',4,60,5);
3. 在表空间上创建游戏表
CREATE TABLE game
(
gid int primary key,
gname varchar(10),
type varchar(5) NOT NULL,
operating_company varchar(10),
birth_date date
);
4. 向游戏表中插入记录
insert into game values(1,'吞噬天地’,’网游','网易’, '2014-9—1’);
insert into game values(2,'英雄联盟’,'竞技','腾讯', ’2010-5—20’);
insert into game values(3,’DOTA2',’竞技’,’暴雪', '2006—1-30');
insert into game values(4,'炫舞',’休闲',’腾讯', ’2012—6-1’);
insert into game values(5,’模拟人生’,'模拟’,'腾讯’, '2010-2—25’);
5. 创建排行信息表
CREATE TABLE rank
(
gid int,
peoplesum int,
moneysum int
);
6. 向排行信息表中插入记录
insert into rank values(1,25216020,35000);
insert into rank values(2,26514260,250000);
insert into rank values(3,215656560,205000);
insert into rank values(4,2515540,350000);
insert into rank values(5,1655620,3000);
7. 创建交易信息表
CREATE TABLE salerecord
(
saleid int primary key,
pid int,
gid int,
RMB int,
saledate date
);
8. 向交易信息表中插入记录
insert into salerecord values(1,1,2,35000,’2014—9—1’);
insert into salerecord values(2,2,3,250000,'2013—8-12');
insert into salerecord values(3,3,4,205000,'2014-9—12');
insert into salerecord values(4,4,1,350000,’2012-7-21');
insert into salerecord values(5,5,4,7000,’2014-9-3’);
insert into salerecord values(6,11,4,35050,'2010-3—1');
insert into salerecord values(7,6,5,50010,’2014—4-17’);
insert into salerecord values(8,9,2,935000,’2009—8-5’);
insert into salerecord values(9,6,3,835000,’2015—3-14’);
insert into salerecord values(10,18,1,3215000,'2010—3—11');
insert into salerecord values(11,22,2,1325000,'2014—3—1’);
9. 创建游戏币信息表
CREATE TABLE gameb
(
gid int,
RMB int,
gameb int
);
10. 向游戏币信息表中插入记录
insert into gameb values(1,8,800);
insert into gameb values(2,9,9000);
insert into gameb values(3,65,6500);
insert into gameb values(4,5,500);
insert into gameb values(5,25,25000);
insert into gameb values(6,25,2500);
insert into gameb values(7,25,2500);
11. 创建用户信息表
create table users
(username char(10) not null,
password char(30) not null,
juris char(30)
);
12. 向用户信息表中插入记录
insert into users(username,password,juris)values(’YH’,'123',’所有权限’);
insert into users(username,password,juris)values(’YH00’,'123’,'查询');
13. 建立外键和CHCEK约束
alter table player
add constraint player_game foreign key (gid)
references game(gid);
alter table rank
add constraint rank_game foreign key (gid)
references game(gid);
alter table salerecord
add constraint salerecord_player foreign key (pid)
references player(pid);
alter table salerecord
add constraint salerecord_game foreign key (gid)
references game(gid);
alter table player
add constraint check_sex check (sex in('男’,'女’));
5. 主要代码
1. 查询代码
1) 查询王五的等级
select levels from player
where player。pname=’王五’;
2) 查询模拟戏人生的运营公司
select operating_company from YH.dbo。game
where game。gname =’模拟人生';
3) 查看游戏排行按游戏人数排列
select distinct game。gname,rank。peoplesum,rank.moneysum from YH.dbo.game,YH.dbo.rank
where rank。gid= game。gid
order by peoplesum desc;
4) 查询DOTA2所有玩家信息
select player。* from YH.dbo。player,YH.dbo.game
where game。gname='DOTA2' and game.gid = player。gid;
5) 查询玩家及玩家所玩游戏名称
select player。pid,player。pname,game。gname,player。levels from YH.dbo。player,YH。dbo.game
where player。gid=game.gid;
6) 查询李四玩家的所有交易记录
select salerecord。* from YH。dbo。salerecord,YH.dbo。player
where player。pname=’李四’and player。pid=salerecord。pid;
7) 查询英雄联盟的玩家排行表按等级排列
select player。* from YH.dbo。player,YH.dbo。game
where game。gname=’英雄联盟' and player.gid=game。gid
order by levels desc;
8) 查询炫舞玩家的总充值金额
select sum(player。money) 炫舞充值总金额 from YH.dbo。game,YH.dbo.player
where game。gname='炫舞’ and player.gid =game。gid;
9) 查看所有充值金额超过50的玩家的名称和游戏
select game。gname,player.pname,salerecord。RMB from YH.dbo.game,YH。dbo.salerecord,YH。dbo.player
where salerecord。RMB〉50 and salerecord.pid=player.pid and player.gid=game。gid;
10) 查询与吞噬天地有交易的玩家的信息 按交易金额降序排列
select player。*,salerecord。RMB from YH。dbo。salerecord,YH。dbo.game,YH.dbo。player
where game.gname=’吞噬天地' and game。gid=salerecord.gid and salerecord.pid = player。pid
order by salerecord.RMB desc;
2. 创建视图
1) 创建视图统计各个游戏的玩家数量。按玩家编号升序排列
create view vw_count as
select distinct game.gid,game.gname,count(player.pid) player
from YH.dbo.game,YH。dbo.player
where game.gid= player.gid
group by game.gid,game.gname
order by game.gid;
2) 调用视图(sal_avg)中的记录
select * from vw_count;
3. 创建存储过程
1) 创建存储过程,使某玩家升级(levelup)
create procedure levelup
@pname varchar(10)
as
begin
update YH.dbo。player set player.levels=player.levels+1
where player.pname=@pname;
end;
张三升级了
exec levelup @pname='张三’;
2) 创建一个删除玩家的存储过程
create procedure del
@pid int
as
begin
delete YH.dbo。salerecord where salerecord。pid=@pid;
delete YH。dbo.player where player.pid=@pid;
commit;
end;
执行存储过程
exec del @pid='3’;
6. 数据库备份
1. 导出数据
14
展开阅读全文