本篇文章开始将逐步介绍使用C#搭建足球赛事资料库与预测平台的相关细节。还是先从数据库开始,从本文开始将逐步对每个核心实体类和数据库设计相关的内容进行讲解,并公布源代码,至于能不能跑起来,看的看个人努力。由于没有时间将所有相关业务都简述清楚,所以也只好将需求和表设计一起进行。本人也是走了很多弯路的。考虑到系统数据表很多,按照功能不同,分为基础数据表,比赛相关表,赔率相关表,以及特殊数据表4个部分分别进行讲解,请大家关注博客。
今天要关注就是比赛信息相关的数据表设计。比赛信息表是核心数据,核心是指其数据都是直接用于预测的,是预测的主体和最重要的信息要素。这是系统的核心,比赛场次的信息是预测,模型研究的基础。而且也是本系统最复杂的部分之一,业务查询复杂。同时考虑到系统复杂程度,数据量大,以及为了以后的查询方便,该部分大量使用了分数据库操作,主要是按照赛事数据分开存储。主要包括以下表:
存储每一场比赛的比赛 本身的信息,如比赛时间,主客队球队名称与编号,轮次,赛季,以及主客进球和平均赔率信息。该表按赛事名称进行分库。也就是每一项赛事的所有赛季都放在一起,便于查询。10年的数据,单库也就几千条记录,技术再差也不至于效率很差吧。其表结构如下:
编号
字段名
类型
长度
描述
备注
Id
int
编号
自增主键
SeasonId
int
赛季编号
索引
SeasonName
nvarchar(50)
100
赛季名称
EventId
int
赛事编号
索引
EventName
nvarchar(50)
50
赛事名称
RoundId
int
轮号
索引
RoundName
nvarchar(30)
30
轮名称
HomeId
int
主队编号
索引
VisiteId
int
客队编号
索引
10
HomeName
nvarchar(30)
30
主队名称
11
VisitName
nvarchar(30)
30
客队名称
12
MatchID
int
比赛编号
唯一索引
13
HalfHomeGoals
int
主队半场进球
14
HalfVisitGoals
int
客队半场进球
15
HomeGoals
int
主队全场进球
16
VisitGoals
int
客队全场进球
17
Result
int
全场结果
18
HalfResult
int
半场结果
19
GameTime
datetime
20
IsHistory
bit
是否历史
21
IsSue
datetime
期号
索引
22
Odds3
float
53
主胜平均赔率
23
Odds1
float
53
主平平均赔率
24
Odds0
float
53
主负平均赔率
25
Handicap
nvarchar(15)
15
亚盘盘口
26
HomeLevel
float
53
亚盘主水
27
VisitLevel
float
53
亚盘客水
28
HandResult
nvarchar(15)
15
亚盘结果
29
BigSmallResult
nvarchar(15)
15
大小盘结果
是本次新增的主要表,球队场次涉及到球队历史场次的查询,需要很快的速度要求,所以单独按照球队进行分库保存,合理的冗余和分库,同时只保存场次的主要信息,其他信息暂时不保存,去对应的联赛表找。在以前的版本中,场次历史表不仅存储了双方对战场次的信息,同时也存储主客双方最近比赛的信息,简单的包括了胜平负欧赔和亚盘的数据。本次更新的最大问题也是在这里的改进,由于每一场比赛历史数据的冗余非常严重(30-50倍),因此引入了球队场次表,每次动态的对主客比赛进行查询。因此改进后的场次历史表,就只存储双方对战场次的信息。表结构和场次信息表大致类似,增加了欧赔和亚盘的数据。因此,相对来说,球队场次表更加节省空间,并提高了效率,这是实际做过后得到的总结和教训。
编号
字段名
类型
长度
描述
备注
Id
int
编号
自增主键
TeamId
int
球队编号
TeamName
nvarchar(20)
20
球队名称
SeasonId
int
赛季编号
索引
SeasonName
nvarchar(50)
100
赛季名称
EventId
int
赛事编号
索引
EventName
nvarchar(50)
50
赛事名称
分库用
MatchID
int
比赛编号
唯一索引
GameTime
datetime
排序用
10
IsHome
bit
是否主场
查询用
11
UpdateTime
datetime
联赛排名不是从外部获取的,是要根据实际的联赛场次动态来计算的,要与实际的排名相符合,每一轮进行计算保存。也是按照联赛进行分库的,同时也可以为以后开发出自己的基于PageRank的排序算法进行排名。具体排名算法将在后续中介绍,这里先介绍表的基本结构。
编号
字段名
类型
长度
描述
备注
Id
int
编号
自增主键
EventName
nvarchar(10)
20
赛事名称
EventId
int
赛事编号
SeasonId
int
赛季编号
索引
RoundId
int
轮编号
索引
TeamId
int
球队编号
索引
TeamName
nvarchar(10)
20
球队名称
TotalRank
int
总排名
HomeRank
int
主场排名
10
VisitRank
int
客场排名
11
TotalScore
int
总积分
12
HomeScore
int
主场积分
13
VisitScore
int
客场积分
14
TotalCount
int
总场次
15
HomeCount
int
主场场次
16
VisitCount
int
客场场次
17
TotalCount3
int
总胜场次
18
HomeCount3
int
主胜场次
19
VisitCount3
int
客胜场次
20
TotalCount1
int
总平场次
21
HomeCount1
int
主平场次
22
VisitCount1
int
客平场次
23
TotalCount0
int
总负场次
24
HomeCount0
int
主负场次
25
VisitCount0
int
客负场次
26
TotalGoal
int
总进球
27
HomeGoal
int
主场进球
28
VisitGoal
int
客场进球
29
TotalLossGoal
int
总失球
30
HomeLossGoal
int
主场失球
31
VisitLossGoal
int
客场失球
32
UpdateTime
datetime
自从使用XCode和XCoder之后,设计数据库只需要在XML文件中进行就可以了,本节中的设计文件如下图所示,后面提供了下载。