数据库大作业三国战略
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库设计报告
-------------------模拟三国策略游戏数据库
院系:软件学院
班级:软件0903班
组员:卢鹏洲(2)
组员:马英杰(4)
日期2011/11/1
一、业务规则
我们数据库设计的构思来自于平时玩的三国题材游戏。
根据游戏中武将、城池、势力、军队、人物关系等各种信息,以及建设、战斗、查看情报等各种功能,提出一种可以实现游戏部分功能的数据库设计方案。在此,我们首先分析游戏的要实现的功能
主要包括:
1.情报查看:用户(以下统称玩家)可以查看各个势力、军团、城池的情报。
2.任命太守:玩家将一名武将设置为一座城池的太守,太守可在城池中执
行内政命令。
3.城池经营:城池经营包涵两个分支功能,一个是内政,内政由城池的太
守执行(执行效果由智力决定),内政提高城市的治安,治
安越高兵粮增加越快。
另一个是征兵,选取一个武将对一只部队进行征兵,征兵
数量由武将武力决定。
4.攻打城池:选择己方的一个城池发动对敌方一个城池的进攻,攻打时以
部队为单位,每只部队由一到两名武将带领。
5.输送:将部队或武将由一个城池转移到另一个城池。
游戏过程中的主要功能为以上几种,我们的数据库就围绕上述功能设计,尽管要形成一个游戏还有很多细小零碎的功能,其余和数据库关系不大的功能在此就不赘述了。
二、业务流程
1.情报查看:玩家执行情报查看功能,相关数据操作如下:
“实力情报显示”玩家发出的查看命令,系统显示各势力总体情报。“军团情报显示”玩家选择一个势力,显示该势力军团情报。
“城池武将情报显示”选择一个军团,显示该军团城池武将情报。
图 1 玩家查看情报数据流图
2.任命太守:玩家指定一位武将,再指定一座己方城池,将该武将设置为该城池太守,玩家相关数据操作如下:
“城池列表显示”
“选择城池”玩家选择城池,选择信息传给系统
“武将列表显示”
“选择武将”玩家选择城池、和太守,选择信息传给系统
“修改武将所在”
“计算城池太守能力”系统根据玩家指令修改城池
“太守能力修改”生成新的太守数据。
图 2 太守任命数据流图
3.城池经营-内政:玩家选择城池,根据该城太守智力增加城池治安,相关数据操作如下:
“城池列表显示”
“城池选择”玩家根据系统给出的城池表选择城池,选择信息传给系统“治安计算”系统根据所选城池最大治安值和太守智力计算出新治安值,并修改城池数据
图 3 内政指令数据流图
4.城池经营-征兵:玩家选择城池,之后选择武将、部队,让该武将对该部队执行征兵,相关数据操作如下:
“城池列表显示”
“选择城池”根据系统提供城池表选择城池
“武将、部队显示”系统根据所选城池生成武将\部队表
“选择武将、部队”由玩家选择执行武将和部队
“计算征兵数”系统根据玩家选择计算,然后修改相应数据
图4 征兵指令数据流图
5.攻打城池:有玩家选择一个敌对城池,选择由己方武将和部队编成的军队,将所选数据交给系统,系统计算输赢,修改城池、武将、部队信息,数据流图如下:
图 5 攻城指令数据流图
6.输送:玩家选择一个城池的部队或武将,转移到另一城池,对两城数据以及转移武将、部队数据进行修改,数据流图如下:
图 6 输送指令数据流图
三、概念设计
图 7 整体ER图
四、逻辑设计
势力表:
军团表:
城池表:
部队表:
兵种表:
太守表:
武将关系表:
如图所示,有钥匙标示的是表的主键,如城池的城池名,有的表不含有主键只是作为外部键,如太守表、武将关系表中没有主键
五、规范化设计
第一范式
势力(势力名,君主,)
军团(军团名,所属势力,军团长)
城池(城池名,所属军团,所属势力,太守)
太守(镇守城,名字,战力值,农业值)
武将(武将名,驻守城,势力,武力,智力)
武将关系(武将名,关系武将,关系)
部队(部队名,兵种,驻扎城池)
兵种(兵种名,地战力,山战力,水战力,城战力)
第二范式同以上第一范式
第三范式
势力(势力名,君主,)
军团(军团名,所属势力,军团长)
城池(城池名,所属军团,太守)
武将(武将名,驻守城,武力,智力)
太守(镇守城,名字,战力值,农业值)
武将关系(武将名,关系武将,关系)
部队(部队名,兵种,驻扎城池)
兵种(兵种名,地战力,山战力,水战力,城战力)
BC范式同以上第三范式
六、物理设计
建表语句:
CREATE TABLE [dbo].[势力](
[势力名] [char](20) NOT NULL,
[君主] [char](20) NULL,
CONSTRAINT [PK_势力_1] PRIMARY KEY CLUSTERED
(
[势力名] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
CREATE TABLE [dbo].[兵种](
[兵种名] [char](20) NOT NULL,
[地战力] [int] NULL,
[水战力] [int] NULL,
[山战力] [int] NULL,
[城战力] [int] NULL,
CONSTRAINT [PK_兵种] PRIMARY KEY CLUSTERED
(
[兵种名] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]