数据库大作业-三国战略262503.docx
数据库设计报告-模拟三国策略游戏数据库院系: 软件学学院 班级: 软件009033班 组员: 卢鹏洲洲(200099920442)组员: 马英杰杰(200099922114) 日期期 20011/11/1一、业务规规则我们数据库库设计的的构思来来自于平平时玩的的三国题题材游戏戏。根据游戏中中武将、城城池、势势力、军军队、人人物关系系等各种种信息,以以及建设设、战斗斗、查看看情报等等各种功功能,提提出一种种可以实实现游戏戏部分功功能的数数据库设设计方案案。 在在此,我我们首先先分析游游戏的要要实现的的功能主要包括:1.情报查查看:用用户(以以下统称称玩家)可以查查看各个个势力、军军团、城城池的情情报。2.任命太太守:玩玩家将一一名武将将设置为为一座城城池的太太守,太太守可在在城池中中执行内内政命令令。3.城池经经营:城城池经营营包涵两两个分支支功能,一一个是内内政,内内政由城城池的太太守执行行(执行行效果由由智力决决定),内内政提高高城市的的治安,治治安越高高兵粮增增加越快快。另一个是征征兵,选选取一个个武将对对一只部部队进行行征兵,征征兵数量量由武将将武力决决定。 4.攻打城城池:选选择己方方的一个个城池发发动对敌敌方一个个城池的的进攻,攻攻打时以以部队为为单位,每每只部队队由一到到两名武武将带领领。5.输送:将部队队或武将将由一个个城池转转移到另另一个城城池。游戏过程中中的主要要功能为为以上几几种,我我们的数数据库就就围绕上上述功能能设计,尽尽管要形形成一个个游戏还还有很多多细小零零碎的功功能,其其余和数数据库关关系不大大的功能能在此就就不赘述述了。二、 业务流程1.情报查查看:玩玩家执行行情报查查看功能能,相关关数据操操作如下下:1.1“实实力情报报显示”玩家发发出的查查看命令令,系统统显示各各势力总总体情报报。1.2“军军团情报报显示”玩家选选择一个个势力,显显示该势势力军团团情报。1.3“城城池武将将情报显显示”选择一一个军团团,显示示该军团团城池武武将情报报。 图 1 玩玩家查看看情报数数据流图图2任命太太守:玩玩家指定定一位武武将,再再指定一一座己方方城池,将将该武将将设置为为该城池池太守,玩玩家相关关数据操操作如下下:1.1“城城池列表表显示”1.2“选选择城池池”玩家选选择城池池,选择择信息传传给系统统2.1“武武将列表表显示”2.2“选选择武将将”玩家选选择城池池、和太太守,选选择信息息传给系系统3.1“修修改武将将所在”3.2“计计算城池池太守能能力”系统根根据玩家家指令修修改城池池3.3“太太守能力力修改”生成新新的太守守数据。 图 22 太守守任命数数据流图图3.城池经经营-内内政:玩玩家选择择城池,根根据该城城太守智智力增加加城池治治安,相相关数据据操作如如下:1.1“城城池列表表显示”1.2“城城池选择择”玩家根根据系统统给出的的城池表表选择城城池,选选择信息息传给系系统2.1“治治安计算算”系统根根据所选选城池最最大治安安值和太太守智力力计算出出新治安安值,并并修改城城池数据据 图 3 内内政指令令数据流流图4.城池经经营-征征兵:玩玩家选择择城池,之之后选择择武将、部部队,让让该武将将对该部部队执行行征兵,相相关数据据操作如如下:1.1“城城池列表表显示”1.2“选选择城池池”根据系系统提供供城池表表选择城城池2.1“武武将、部部队显示示”系统根根据所选选城池生生成武将将部队队表2.2“选选择武将将、部队队”由玩家家选择执执行武将将和部队队3.1“计计算征兵兵数”系统根根据玩家家选择计计算,然然后修改改相应数数据 图图4 征征兵指令令数据流流图5.攻打城城池:有有玩家选选择一个个敌对城城池,选选择由己己方武将将和部队队编成的的军队,将将所选数数据交给给系统,系系统计算算输赢,修修改城池池、武将将、部队队信息,数数据流图图如下: 图 5 攻攻城指令令数据流流图6.输送:玩家选选择一个个城池的的部队或或武将,转转移到另另一城池池,对两两城数据据以及转转移武将将、部队队数据进进行修改改,数据据流图如如下: 图图 6 输送指指令数据据流图三、 概念设计 图图 7 整体EER图四、 逻辑设计势力表:军团表:城池表:部队表:兵种表:太守表:武将表:武将关系表表:关系表:如图所示,有有钥匙标标示的是是表的主主键,如如城池的的城池名名,有的的表不含含有主键键只是作作为外部部键,如如太守表表、武将将关系表表中没有有主键五、 规范化设计计第一范式势力(势力力名,君君主,)军团(军团团名,所所属势力力,军团团长)城池(城池池名,所所属军团团,所属属势力,太太守)太守(镇守守城,名名字,战战力值,农农业值)武将(武将将名,驻驻守城,势势力,武武力,智智力)武将关系(武将名,关系武将,关系)部队(部队队名,兵兵种,驻驻扎城池池)兵种(兵种种名,地地战力,山山战力,水水战力,城城战力)第二范式 同以上上第一范范式第三范式势力(势力力名,君君主,)军团(军团团名,所所属势力力,军团团长)城池(城池池名,所所属军团团,太守守)武将(武将将名,驻驻守城,武武力,智智力)太守(镇守守城,名名字,战战力值,农农业值)武将关系(武将名,关系武将,关系)部队(部队队名,兵兵种,驻驻扎城池池)兵种(兵种种名,地地战力,山山战力,水水战力,城城战力)BC范式 同以上上第三范范式六、 物理设计建表语句:CREATTE TTABLLE dboo.势力(势力名名 chaar(20) NOOT NNULLL,君主 ccharr(220) NULLL, CONSSTRAAINTT PPK_势势力_11 PPRIMMARYY KEEY CCLUSSTERRED (势力名名 AASC)WITHH (PPAD_INDDEX = OFFF, IIGNOORE_DUPP_KEEY = OFFF) ON PRRIMAARY) ON PRRIMAARYCREATTE TTABLLE dboo.兵种(兵种名名 chaar(20) NOOT NNULLL,地战力力 intt NNULLL,水战力力 intt NNULLL,山战力力 intt NNULLL,城战力力 intt NNULLL, CONSSTRAAINTT PPK_兵兵种 PRIIMARRY KKEY CLUUSTEEREDD (兵种名名 AASC)WITHH (PPAD_INDDEX = OFFF, IIGNOORE_DUPP_KEEY = OFFF) ON PRRIMAARY) ON PRRIMAARYCREATTE TTABLLE dboo.关系(武将名名 chaar(20) NUULL,关系 ccharr(220) NULLL,关系武武将 chhar(200) NNULLL) ON PRRIMAARYCREATTE TTABLLE dboo.太守(镇守城城 chaar(20) NUULL,名字 ccharr(220) NOTT NUULL,战力值值 intt NNULLL,农业值值 intt NNULLL) ON PRRIMAARYCREATTE TTABLLE dboo.武将(武将名名 chaar(20) NOOT NNULLL,武力 iint NUULL,智力 iint NUULL,势力 ccharr(220) NULLL,驻守城城 chaar(20) NUULL, CONSSTRAAINTT PPK_武武将 PRIIMARRY KKEY CLUUSTEEREDD (武将名名 AASC)WITHH (PPAD_INDDEX = OFFF, IIGNOORE_DUPP_KEEY = OFFF) ON PRRIMAARY) ON PRRIMAARYCREATTE TTABLLE dboo.军团(军团名名 chaar(20) NOOT NNULLL,军团长长 chaar(20) NUULL,所属势势力 chhar(200) NNULLL, CONSSTRAAINTT PPK_军军团 PRIIMARRY KKEY CLUUSTEEREDD (军团名名 AASC)WITHH (PPAD_INDDEX = OFFF, IIGNOORE_DUPP_KEEY = OFFF) ON PRRIMAARY) ON PRRIMAARYCREATTE TTABLLE dboo.城池(城池名名 chaar(20) NOOT NNULLL,太守名名 chaar(20) NUULL,军团名名 chaar(20) NUULL,势力名名 chaar(20) NUULL,兵数 iint NUULL, CONSSTRAAINTT PPK_城城池 PRIIMARRY KKEY CLUUSTEEREDD (城池名名 AASC)WITHH (PPAD_INDDEX = OFFF, IIGNOORE_DUPP_KEEY = OFFF) ON PRRIMAARY) ON PRRIMAARYCREATTE TTABLLE dboo.部队(部队名名 chaar(20) NOOT NNULLL,驻扎城城池 chhar(200) NNULLL,兵种 ccharr(220) NULLL, CONSSTRAAINTT PPK_部部队 PRIIMARRY KKEY CLUUSTEEREDD (部队名名 AASC)WITHH (PPAD_INDDEX = OFFF, IIGNOORE_DUPP_KEEY = OFFF) ON PRRIMAARY) ON PRRIMAARY关系语句:ALTERR TAABLEE ddbo.关关系 WIITH CHEECK ADDD CCONSSTRAAINTT FFK_关关系_武武将 FORREIGGN KKEY(武将将名)REFERRENCCES dbbo.武将将 (武将将名)ALTERR TAABLEE ddbo.关关系 CHEECK CONNSTRRAINNT FK_关系_武将ALTERR TAABLEE ddbo.太太守 WIITH CHEECK ADDD CCONSSTRAAINTT FFK_太太守_城城池 FORREIGGN KKEY(镇守守城)REFERRENCCES dbbo.城池池 (城池池名)ALTERR TAABLEE ddbo.太太守 CHEECK CONNSTRRAINNT FK_太守_城池ALTERR TAABLEE ddbo.太太守 WIITH CHEECK ADDD CCONSSTRAAINTT FFK_太太守_武武将 FORREIGGN KKEY(名字字)REFERRENCCES dbbo.武将将 (武将将名)ALTERR TAABLEE ddbo.太太守 CHEECK CONNSTRRAINNT FK_太守_武将ALTERR TAABLEE ddbo.武武将 WIITH CHEECK ADDD CCONSSTRAAINTT FFK_武武将_城城池 FORREIGGN KKEY(驻守守城)REFERRENCCES dbbo.城池池 (城池池名)ALTERR TAABLEE ddbo.武武将 CHEECK CONNSTRRAINNT FK_武将_城池ALTERR TAABLEE ddbo.武武将 WIITH CHEECK ADDD CCONSSTRAAINTT FFK_武武将_势势力 FORREIGGN KKEY(势力力)REFERRENCCES dbbo.势力力 (势力力名)ALTERR TAABLEE ddbo.武武将 CHEECK CONNSTRRAINNT FK_武将_势力ALTERR TAABLEE ddbo.军军团 WIITH CHEECK ADDD CCONSSTRAAINTT FFK_军军团_势势力 FORREIGGN KKEY(所属属势力)REFERRENCCES dbbo.势力力 (势力力名)ALTERR TAABLEE ddbo.军军团 CHEECK CONNSTRRAINNT FK_军团_势力ALTERR TAABLEE ddbo.城城池 WIITH CHEECK ADDD CCONSSTRAAINTT FFK_城城池_军军团 FORREIGGN KKEY(军团团名)REFERRENCCES dbbo.军团团 (军团团名)ALTERR TAABLEE ddbo.城城池 CHEECK CONNSTRRAINNT FK_城池_军团ALTERR TAABLEE ddbo.部部队 WIITH CHEECK ADDD CCONSSTRAAINTT FFK_部部队_兵兵种 FORREIGGN KKEY(兵种种)REFERRENCCES dbbo.兵种种 (兵种种名)ALTERR TAABLEE ddbo.部部队 CHEECK CONNSTRRAINNT FK_部队_兵种ALTERR TAABLEE ddbo.部部队 WIITH CHEECK ADDD CCONSSTRAAINTT FFK_部部队_城城池 FORREIGGN KKEY(驻扎扎城池)REFERRENCCES dbbo.城池池 (城池池名)ALTERR TAABLEE ddbo.部部队 CHEECK CONNSTRRAINNT FK_部队_城池七、 SQL部分分1. 查看蜀国城城池情报报selecct * froom 城城池wheree 势力力名='蜀''2.零陵增增兵3000000updatte 城城池set 兵兵数=(sellectt 新兵兵数=a.兵数+300000 froom (sellectt 兵数数 frrom 城池wheree 城池池名='零陵陵') a )wheree 城池池名='零陵陵'3. 零陵攻城部部队选择择列表的的查询selecct aa.武将名名,a.武力,a.智力,b.部队名名,b.兵种from(sellectt * froom 武武将whheree 驻守守城='零陵陵') a,(seleect * froom 部部队whheree 驻扎扎城池='零陵陵') b4.假如选选择 卢鹏州州-零陵1 生成成新表需需要新查查询selecct aa.武将名名,a.武力,a.智力,b.部队名名,b.兵种from(sellectt * froom 武武将whheree 驻守守城='零陵陵') a,(sellectt * froom 部部队whheree 驻扎扎城池='零陵陵') bwheree a.武将名名<>'卢卢鹏州'' andd b.部队名名<>'零零陵1'5.列出所所有可能能的吴魏魏两国武武将配对对 显示示两名武武将的所所在城池池 以及及武力差差值selecct aa.武将名名,a.驻守城城,b.武将名名,b.驻守城城,diffferrencce=(a.武力-b.武力)froom 武武将a , 武将将bwheree a.武将名名<>b.武将名名andd a.武力>b.武力annd aa.势力='魏'' andd b.势力='吴''6.假设武武力和智智力与兵兵数的换换算是11:200,与在在零陵的的卢鹏州州相比更更为有实实力的是是,输出出城池和和武将(重新设设置零陵陵兵力为为120000)selecct aa.武将名名,a.驻守城城,a.总兵数数 ,b.武将名名,b.驻守城城,b.总兵数数froom(seleect 武将名名,驻守城城,总兵数数=(200*(武力力+智力)+兵数) froom 武武将,城池wheree 驻守守城=城池名名)a,(seleect 武将名名,驻守城城,总兵数数=(200*(武力力+智力)+兵数) froom 武武将,城池wheree 驻守守城=城池名名)bwheree a.武将名名='卢鹏鹏州' andd a.总兵数数<b.总兵数数7.不在同同一势力力却有朋朋友关系系的武将将,输出出武将和和势力selecct aa.武将名名,a.势力,b.武将名名,b.势力,关系frrom 关系,武将aa ,武将bbwheree 关系系.武将名名=a.武将名名andd 关系系武将=b.武将名名andd a.势力<>>b.势力8.输出在在地面上上实力最最强的城城池部队队(包括括太守的的能力值值)selecct 战战力=(地战力力+战力值值),镇守守城,部队名名,兵种,势力frrom 部队,兵种,太守,武将wheree 兵种种=兵种名名andd 镇守守城=驻扎城城池annd 名名字=武将名名andd 势力力='魏'' orderr by 战战力deesc; 9.输出魏魏蜀前线线军团中中总兵数数和蜀魏魏前线军军团总兵兵数,并并算出差差值selecct aa.总兵数数,b.总兵数数,差值=(a.总兵数数-b.总兵数数) froom(seleect summ(兵数) 总兵兵数from 城池groupp by 军团名名havinng 军军团名='魏蜀蜀前线军军')a , (seleect summ(兵数) 总兵兵数from 城池groupp by 军团名名havinng 军军团名='蜀魏魏前线军军')b10.可以以带领弩弩兵部队队的武将将selecct 武武将名,城池名名,部队名名froom 城城池,部队,武将wheree 驻守守城=城池名名andd 城城池名=驻扎城城池annd 兵兵种='弩兵兵'