足球彩票节是由爱彩网在2014年巴西世界杯前夕发起的彩民网上盛筵,从2014年6月3日开幕,至世界杯结束闭幕,此节日长达41天。节日期间爱彩网不间断推出众多促销活动惠及球迷和彩民,同时为世界杯助力造势。因此,建立一套基于计算机环境的技术先进、高效稳定、安全可靠的世界杯彩票竞猜测评系统是完全有必要的。
世界杯彩票竞猜系统的目的是自动分析、计算、统计、管理历届每次比赛数据,减少人工操作,降低计算失误,提高工作效率,减少彩民买彩票的不确定性,使买彩票变得系统化、自动化。
与传统的彩票凭运气相比,计算机不但能发挥计算机方便、快捷的功能,而且可以节省大量的资源费用等,更方便灵活操作,而且方便管理,增加世界杯彩票竞猜的稳定性,有效防止世界杯彩票竞猜的过大的风险,使世界杯彩票竞猜更加合理、更趋于高获奖率。因此开发一套比较成熟的世界杯彩票竞猜系统很有必要。
本文档适用于项目开发的设计阶段,在项目开发阶段可按照本文档检验数据库的实施情况。
《世界杯彩票竞猜系统(WordCupFootballlotteryticketSystem)》的读者对象包括从事DBMS、面向对象编程、高校教务人员行业的工作者,高校中信息专业、计算机专业、管理专业、软件工程专业等有数据库课程的本科生、硕士生,深入学习SQLServer-数据库的读者,深入学习对象-关系数据库的读者,也可以作为数据库课程的参考资料。
本文档面向具有数据库开发使用经验的开发者中那些希望获得锻炼和提升的人。
[1]张海藩.软件工程导论[M].北京:清华大学出版社.1998年
[2]郑人杰,殷人昆.软件工程概论[M].北京:清华大学出版社.2001年
[3]KatharineWhitehead.基于组件开发[M].北京:人民邮电出版社.2003年
[4]熊春荣,学校学生信息管理系统的设计与实现[J].玉林师范学院学报,2006年
[5]萨师煊,王珊.数据库系统概论(第三版)[M],高等教育出版社,2000年
[6]邵维忠,杨芙清著.面向对象的系统分析.北京:清华大学出版社,1998年
[7]张友生等编著.《软件体系结构》.北京:清华大学出版社,2006年
[8]吴洁明,袁山龙编著.软件工程应用实践教程.北京:清华大学出版,
2003年
缩写、术语
解释
SPP
精简并行过程,SimplifiedParallelProcess
SD
系统设计,SystemDesign
1:1联系
如果实体集E1中的每个实体最多只能和实体集E2中的一个实体有联系,反之亦然,好么实体集E1对E2的联系称为"一对一联系",记为"1:1"
1:N联系
如果实体集E1中每个实体与实体集E2中任意个(零个或多个)实体有联系,而E2中每个实体至多和E1中的一个实体有联系,那么E1对E2的联系是"一对多联系",记为"1:N"
M:N联系
如果实体集E1中每个实体与实体集E2中任意个(零个或多个)实体有联系,反之亦然,那么E1对E2的联系是"多对多联系",记为"M:N"
SQL数据库
SQL(StructuredQueryLanguage),即'结构式查询语言',采用英语单词表示和结构式的语法规则。一个SQL数据库是表的汇集,它用一个或多个SQL模式定义
DD
数据字典(DataDictionary),数据库系统中存放三级结构定义的数据库称为数据字典。(通常DD还存放数据库运行时的统计信息)
集中式DBS
是指数据库中的数据集中存储在一台计算机上,数据的处理集中在一台计算机上完成
函数依赖
FD(functiondependency),设有关系模式R(U),X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t1,t2,由t1[X]=t2[X]导致t1[Y]=t2[Y],则称X函数决定Y,或Y函数依赖于X,记为X→Y。X→Y为模式R的一个函数依赖
1NF
第一范式。如果关系模式R的所有属性的值域中每一个值都是不可再分解的值,则称R是属于第一范式模式。如果某个数据库模式都是第一范式的,则称该数据库存模式属于第一范式的数据库模式
2NF
第二范式。如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称是第二范式模式;如果某个数据库模式中每个关系模式都是第二范式的,则称该数据库模式属于第二范式的数据库模式。(注:如果A是关系模式R的候选键的一个属性,则称A是R的主属性,否则称A是R的非主属性。)
3NF
第三范式。如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。如果某个数据库模式中的每个关系模式都是第三范式,则称为3NF的数据库模式
BCNF
BC范式。如果关系模式R是第一范式,且每个属性都不传递依赖于R的候选键,那么称R是BCNF的模式
4NF
第四范式。设R是一个关系模式,D是R上的多值依赖集合。如果D中成立非平凡多值依赖X→→Y时,X必是R的超键,那么称R是第四范式的模式
最小依赖集
如果函数集合F满足以下三个条件:(1)F中每个函数依赖的右部都是单属性;(2)F中的任一函数依赖X→A,其F-{X→A}与F是不等价的;(3)F中的任一函数依赖X→A,Z为X的子集。(F-{X→A}∪{Z→A}与F不等价。则称F为最小函数依赖集合,记为Fmin
串行调度
事务的依次执行称为串行调度
并发调度
利用分时的方法,同时处理多个事务,称为事务的并发调度
可串行化调度
对于事务集(T<1>,T<2>,…,T),如果一个并发调度的结果与一个串行调度等价,则称此调度是是可串行化调度
数据库服务器选择Lenovo,操作系统使用windows7,数据库选用SQLServer。
程序设计语言为Delphi7。Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了MicrosoftWindows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语(Object-OrientedLanguage),当今世界上最快的编辑器和最为领先的数据库技术。
系统的硬件要求为微型计算机,8M以上的内存,500M以上的外存。
(1)表的命名:以名词和名词短语;
(2)列的命名:采用有意义的命名,能表达其表示的内容的名词短语;
(3)视图与存储均与表的命名类似。
数据库涉及字符规则
采用26个英文字母(区分大小写)和0-9这十个自然数,加上下划线_组成,共63个字符。不能出现其他字符(注释除外)。
数据库对象命名规则
数据库对象包括表、视图(查询)、存储过程(参数查询)、函数、约束。对象名字由前缀和实际名字组成,长度不超过30。
前缀:使用小写字母。如:
表
tb
视图
vi
存储过程
sp
函数
fn
实际名字
实际名字尽量描述实体的内容,由单词或单词组合,每个单词的首字母大写,其他字母小写,不以数字和_开头。因此,如合法的对象名字类似如下。
tbUser_Info、tbMessage_Detail
vi_MessageList
sp_MessageAdd
数据库表命名规则
字段由前缀和实际名字组成。实际名字中首单词一个系统尽量采取同一单词。
前缀:使用小写字母tb,如表示表。
例如:tbMembertbMember_InfotbForum_BoardtbForum_Thread1
字段命名规则
后缀:使用小写字母,代表该字段的属性。
例如:User_IdintUser_NamestrUser_RegDatedtm
视图命名规则
字段由前缀和实际名字组成,中间用下划线连接。
前缀:如使用小写字母vi,表示视图。
例如:vi_Uservi_UserInfo
存储过程命名规则
前缀:如使用小写字母sp,表示存储过程。
例如:sp_User
SQL语句规则
所有SQL语句的关键词全部大写或首字母大写,比如SELECT,UPDATE,FROM,ORDER,BY等。
VS表
VS(队名,巴西,墨西哥,......,阿尔及利亚)
result表
result(场次,主场,客场,主场分数,客场分数)
team表
team(队名,组别)
(1)主要是设计表结构。一般地,实体对应于表,实体的属性对应于表的列,实体之间的关系成为表的约束。逻辑设计中的实体大部分可以转换成物理设计中的表,但是它们并不一定是一一对应的。
(2)对表结构进行规范化处理(第三范式)。
表名
功能说明
VS
记录预测分差
team
记录队伍的队名和组别
result
记录比赛比分结果
列名
数据类型(精度范围)
空/非空
约束条件
队名
Nvarchar(255)
非空
主键
巴西
Float
可以为空
无
墨西哥
Folat
……
阿尔及利亚
补充说明
组别
场次
主场
客场
主场分数
客场分数
提高软件系统的安全性应当从"管理"和"设计"两方面着手。这里仅考虑数据库的安全性设计。
1.用户权限控制
给每个用户角色限制权限,不同的角色拥有不同的权限,用户只能行使自己权限范围内的权限,如普通用户只能查看自己的借阅记录不能任意修改,而管理员和超级管理员则可以修改用户的借阅记录,通过角色,权限等的一系列授予和回收操作可以有效的进行用户的权限控制,从而防止用户恶意操作、篡改数据库信息。
3.限制操作系统存取权限
使用数据库系统是依存在操作系统之上的,如果操作系统被人侵入,那么通过修改配置文件等一系列方法,数据库的安全性也将荡然无存,所以对于安全性高的数据库,可以通过限制操作系统的存取权限来提高数据库的安全性。
使用MD5加密方法对用户账号密码进行加密。
MD5方法采用单项加密的加密方法,即只能对数据进行加密,而不能对加密后的数据进行解密,这样经过MD5算法处理的账号和秘密存储在数据库中即使被人恶意获取到,也不可能知道密码的具体数据,即做到了对账号密码的更强的保护。
确定每个角色对数据库表的操作权限,如创建、检索、更新、删除等。每个角色拥有刚好能够完成任务的权限,不多也不少。在应用时再为用户分配角色,则每个用户的权限等于他所兼角色的权限之和。
角色
可以访问的表与列
操作权限
用户
增改查
改查
查
在数据库的设计过程中经常要添加、删除数据库对象,这会使数据库内部留有许多碎片,不能有效地利用磁盘空间,文件会逐渐增大。这有点象文件系统经过多次的增删操作,会导致文件碎片,浪费磁盘空间,而且读写效率降低。可以用Access提供的工具来压缩数据库,它将重新安排数据库文件在磁盘中保存的位置,并释放磁盘空间,通常文件的容量会缩小成原来的几分。
分析并优化数据库的"时-空"效率,尽可能地"提高处理速度"并且"降低数据占用空间"。
(1)分析"时-空"效率的瓶颈,找出优化对象(目标),并确定优先级。
(2)当优化对象(目标)之间存在对抗时,给出折衷方案。
(3)给出优化的具体措施,例如优化数据库环境参数,对表格进行反规范化处理等。
优先级
优化对象(目标)
措施
高
数据库索引
根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量
数据库碎片
定期整理数据库产生的碎片,提高数据库的性能
数据库缓存
优化数据库缓存方案
数据库对象
优化数据库对象的放置策略,尽量让数据库对象均匀地把数据分布在系统的磁盘中,平衡I/O访问,避免I/O瓶颈。
DBA(即本系统的管理员)要针对不公的应用要求制定不同的转储计划,定期对数据库和日志文件进行备份,以保证数据库中数据在遭到破坏后能及时进行恢复。
DBA应采取有效的措施保护数据不受非法盗用和遭到任何破坏
DBA需要随时观察数据库的动态变化,并在数据库出现错误、故障或产生不适应情况时能够随时采取有效措施保护数据库
数据库备份方案
添加任务计划,定期定时运行备份批处理命令,实现自动备份。
设计一个物理备份和逻辑备份相结合的数据库备份方案,以保证数据的完整性和0损失恢复。
逻辑备份:
星期一完全备份在00:00时备份
星期二增量备份在00:00时备份
星期三增量备份在00:00时备份
星期四增量备份在00:00时备份
星期五累积备份在00:00时备份
星期六增量备份在00:00时备份
星期日增量备份在00:00时备份
分析:每天在00:00时备份是因为在这个时段的访问量相对很少,星期一完全备份可以将数据库中的信息全部备份,而之后的几天采用增量备份可以减少备份量,加快备份速度。在在星期五选择累计备份,是考虑到数据库出错时恢复的考虑,当数据库在某一周有错误时,可以直接恢复到星期五的数据,而不用一天一天的按增量备份的数据恢复。
物理备份:
备份方法
备份频率
备份目的
备注
本地热备
1次/天
00:00
保留最近一周的备份数据
本地冷备
1次/一月
每周星期五下午
保留数据库全部数据
异地导出备份
12:00
具体代码:
Unit1
1unitUnit1;23interface45uses6Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,7Dialogs,bsSkinCtrls,bsSkinData,BusinessSkinForm;89type10TForm1=class(TForm)11bsBusinessSkinForm1:TbsBusinessSkinForm;12bsSkinData1:TbsSkinData;13bsCompressedStoredSkin1:TbsCompressedStoredSkin;14bsSkinButton1:TbsSkinButton;15bsSkinButton2:TbsSkinButton;16bsSkinButton3:TbsSkinButton;17procedurebsSkinButton1Click(Sender:TObject);18procedurebsSkinButton2Click(Sender:TObject);19procedurebsSkinButton3Click(Sender:TObject);20private21{Privatedeclarations}22public23{Publicdeclarations}24end;2526var27Form1:TForm1;2829implementation3031usesUnit2,Unit3,Unit4;3233{$R*.dfm}3435procedureTForm1.bsSkinButton1Click(Sender:TObject);36begin37self.Hide;38form2.Show;39end;4041procedureTForm1.bsSkinButton2Click(Sender:TObject);42begin43self.Hide;44form3.Show;45end;4647procedureTForm1.bsSkinButton3Click(Sender:TObject);48begin49self.Hide;50form4.Show;51end;5253end.