本博客所有文章分類的總目錄:http://www.cnblogs.com/asxinyu/p/4288836.html
開源C#彩票數據資料庫系列文章總目錄:http://www.cnblogs.com/asxinyu/p/4329642.html
本篇文章開始將逐步介紹使用C#搭建足球賽事資料庫與預測平台的相關細節。還是先從數據庫開始,從本文開始將逐步對每個核心實體類和數據庫設計相關的內容進行講解,並公布源代碼,至於能不能跑起來,看的看個人努力。數據庫很龐大,且采用了XCode非常牛逼的分庫技術,秒殺千萬級乃至上億的數據需求。而只需要最基本的C#技術,對我這種數據庫文盲來說,真的幫助非常大。
由於數據表和業務是直接相關的,沒有時間將所有相關業務都簡述清楚,所以也只好將需求和表設計一起進行。相輔相成吧,如果思路有問題,大家可以交流提出自己的想法,當然必須要對足球賽事資料庫有一定的了解和接觸才行,本人也是走了很多彎路的。考慮到系統數據表很多,按照功能不同,分為基礎數據表,比賽相關表,賠率相關表,以及特殊數據表4個部分分別進行講解,請大家關注博客。
本文原文地址:http://www.cnblogs.com/asxinyu/p/4445324.html
1.基礎數據表的范圍
基礎數據表雖然不重要,但是必不可少的部分,主要包括以下幾個表及其作用:
1.賽事資料表:表明某一項賽事屬於哪個國家,哪個洲,以及對應的賽事級別,賽事類型等信息,不同的級別在分析預測時篩選場次有用。
2.賽季資料表:賽季是一個重要的東西,每一場比賽(除了友誼賽之外)都屬於某個賽季,而賽季又屬於某個聯賽的,賽季名稱以及編號是查詢中經常要用到的東西,歷史賽季可以用於數據檢驗和統計,當前賽季才是我們要預測和掌握的,都是非常重要的。
3.球隊資料表:主要存儲球隊的名稱,以及縮寫,球隊編號等信息,主要目的是標識球隊的唯一性,在混合數據源采集的時候,需要對名稱進行統一,本平台只是考慮到以后的對接,可能用得上,先規划好,實際上前2個版本也有過類似的情況,非常復雜,所以最好還是要穩定一個數據源。
4.賽季輪次表:每個賽季,不管是聯賽還是杯賽,都是按照輪進行的,每一輪不僅有輪號,最好是划分一個編號,這樣便於操作。這種數據量比較小,沒必要分庫。
5.賠率公司信息表:賠率公司信息表主要存儲常規的的賠率公司的信息,以及是否采集相關的賠率類型,數據庫初始化的時候就已經固定好了,除非特殊要求可以自己添加,一般不需要管。已經默認包括了很多權威的賠率公司,足夠使用。
下面將對上述5個基礎的數據庫的結構進行分析。
2.賽事資料表
根據聯賽的重要程度、權威性,我們手動對聯賽的等級進行了分類,1-7,1最高,像歐洲五大聯賽就屬於第1級別的。其他二級聯賽或者歐洲其他一些聯賽都分為2,3級別。賽事資料的國家和洲際名稱,可以根據實際情況進行更新,由於我的數據源中已經規划得比較好,采集的時候,流程控制一下,所以也沒有特殊處理。賽事類型暫時只有2種:聯賽和杯賽,分布是1和2,詳細的結構如下,本項目的所有數據表設計都遵循了XCode推薦的用法。
編號 |
字段名 |
類型 |
長度 |
描述 |
備注 |
1 |
Id |
int |
10 |
編號 |
自增主鍵 |
2 |
EventId |
int |
10 |
賽事編號 |
索引 |
3 |
EventName |
nvarchar(50) |
50 |
賽事名稱 |
索引 |
4 |
Country |
nvarchar(20) |
20 |
國家 |
|
5 |
Levels |
int |
10 |
賽事級別 |
|
6 |
TeamCount |
int |
10 |
球隊數 |
|
7 |
InternalName |
nvarchar(50) |
50 |
洲名稱 |
|
8 |
EventType |
int |
10 |
賽事類型 |
|
9 |
IsUse |
bit |
1 |
使用有效 |
3.賽季資料表
1個賽事,分為多個賽季,一般是1年1個賽季,賽季編號也是一個重要的信息,在很多地方都有用。賽季資料表,基本在第一次更新后,其他很少更新,一年一次。亞洲一般是1年1個賽季,3-11月,像歐洲一般是每年的8月到第二年的5左右,每個國家不一樣,但更新頻率很低。本項目在設計的時候,對一些簡單的字段都進行了冗余,比如賽季表中也要包括賽事編號,名稱等信息,是因為這些信息的使用非常頻繁,如果頻繁通過擴展屬性去獲取,哪怕絲毫緩存也不適當,所以基礎信息表以至於實際的場次表中,對這些常規信息字段都進行了冗余。如下圖所示:
編號 |
字段名 |
類型 |
長度 |
描述 |
備注 |
1 |
Id |
int |
4 |
編號 |
自增主鍵 |
2 |
EventId |
int |
4 |
賽事編號 |
索引 |
3 |
EventName |
nvarchar(50) |
50 |
賽事名稱 |
|
4 |
SeasonId |
int |
4 |
賽季編號 |
索引 |
5 |
SeasonName |
nvarchar(50) |
100 |
賽季名稱 |
|
6 |
IsHistory |
bit |
1 |
是否歷史 |
4.球隊資料表
作為一個備用資料,可以比較簡單的看一看,主要是球隊的名稱和編號,以及當前的賽季信息:
編號 |
字段名 |
類型 |
長度 |
描述 |
備注 |
1 |
Id |
int |
4 |
編號 |
自增主鍵 |
2 |
TeamId |
int |
4 |
球隊編號 |
索引 |
3 |
Name |
nvarchar(30) |
60 |
球隊名稱 |
索引 |
4 |
OnceName |
nvarchar(60) |
60 |
曾用名 |
|
5 |
EventName |
nvarchar(30) |
60 |
賽事 |
|
6 |
SeasonId |
int |
4 |
賽季編號 |
索引 |
7 |
SeasonName |
nvarchar(30) |
60 |
賽季名稱 |
5.賽季輪次表
賽季輪次表將每個賽季每一輪的信息保存下來,每一場比賽都屬於1個輪次,同時考慮到杯賽的輪,是晉級形式,如小組賽,半決賽,決賽等等,就不保存輪次號,而是保存輪名稱(RoundName),是聯賽的時候,RoundName等於字符串的RoundId。
編號 |
字段名 |
類型 |
長度 |
描述 |
備注 |
1 |
Id |
int |
4 |
編號 |
|
2 |
SeasonID |
int |
4 |
賽季編號 |
|
3 |
RoundId |
int |
4 |
輪編號 |
|
4 |
RoundName |
nvarchar(30) |
60 |
輪名稱 |
杯賽 |
5 |
EventName |
nvarchar(30) |
60 |
賽事名稱 |
|
6 |
EventId |
int |
4 |
賽事編號 |
|
7 |
EventType |
int |
10 |
賽事類型 |
6.賠率公司信息表
這里的賠率公司主要是采集歐賠和亞盤及大小盤的動態賠率用的。其他半全場,比分的指數基本都只采集幾個固定的公司,如澳門,威廉。
編號 |
字段名 |
類型 |
長度 |
描述 |
備注 |
1 |
Id |
int |
4 |
編號 |
自增主鍵 |
2 |
Name |
nvarchar(30) |
60 |
名稱 |
索引 |
3 |
OnceName |
nvarchar(30) |
60 |
曾用名 |
|
4 |
ComanyID |
int |
4 |
公司編號 |
索引 |
5 |
IsTrading |
bit |
1 |
是否交易平台 |
|
6 |
IsAuthority |
bit |
1 |
是否權威 |
|
7 |
IsEurope |
bit |
1 |
是否歐盤 |
|
8 |
IsAsia |
bit |
1 |
是否亞盤 |
|
9 |
IsBigSmall |
bit |
1 |
是否大小盤 |
|
10 |
IsGolas |
bit |
1 |
是否進球盤 |
今天的基礎數據庫設計就到此為止,由於全部采用XCode進行設計和開發,所以數據庫的設計直接使用的XML文件,然后用XCoder生成實體類即可,如下圖所示:
是不是很爽,我這里直接提供了XML文件,懂XCode的朋友可以先睹為快,至於不懂X組件的,接着往下看,這些數據庫的實體操作類都會逐步公開的。
下載:基礎信息實體.xml