本博客所有文章分類的總目錄:【總目錄】本博客博文總目錄-實時更新
開源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