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