由于資料表和業務是直接相關的,沒有時間将所有相關業務都簡述清楚,是以也隻好将需求和表設計一起進行。相輔相成吧,如果思路有問題,大家可以交流提出自己的想法,當然必須要對足球賽事資料庫有一定的了解和接觸才行,本人也是走了很多彎路的。考慮到系統資料表很多,按照功能不同,分為基礎資料表,比賽相關表,賠率相關表,以及特殊資料表4個部分分别進行講解,請大家關注部落格。
本部落格所有文章分類的總目錄: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 | 賽事編号 | 索引 | ||
3 | EventName | nvarchar(50) | 50 | 賽事名稱 | |
4 | Country | nvarchar(20) | 20 | 國家 | |
5 | Levels | 賽事級别 | |||
6 | TeamCount | 球隊數 | |||
7 | InternalName | 洲名稱 | |||
8 | EventType | 賽事類型 | |||
9 | IsUse | bit | 使用有效 |
3.賽季資料表
1個賽事,分為多個賽季,一般是1年1個賽季,賽季編号也是一個重要的資訊,在很多地方都有用。賽季資料表,基本在第一次更新後,其他很少更新,一年一次。亞洲一般是1年1個賽季,3-11月,像歐洲一般是每年的8月到第二年的5左右,每個國家不一樣,但更新頻率很低。本項目在設計的時候,對一些簡單的字段都進行了備援,比如賽季表中也要包括賽事編号,名稱等資訊,是因為這些資訊的使用非常頻繁,如果頻繁通過擴充屬性去擷取,哪怕絲毫緩存也不适當,是以基礎資訊表以至于實際的場次表中,對這些正常資訊字段都進行了備援。如下圖所示:
SeasonId | 賽季編号 | ||||
SeasonName | 100 | 賽季名稱 | |||
IsHistory | 是否曆史 |
4.球隊資料表
作為一個備用資料,可以比較簡單的看一看,主要是球隊的名稱和編号,以及目前的賽季資訊:
TeamId | 球隊編号 | ||||
Name | nvarchar(30) | 60 | 球隊名稱 | ||
OnceName | nvarchar(60) | 曾用名 | |||
賽事 | |||||
5.賽季輪次表
賽季輪次表将每個賽季每一輪的資訊儲存下來,每一場比賽都屬于1個輪次,同時考慮到杯賽的輪,是晉級形式,如小組賽,半決賽,決賽等等,就不儲存輪次号,而是儲存輪名稱(RoundName),是聯賽的時候,RoundName等于字元串的RoundId。
SeasonID | |||||
RoundId | 輪編号 | ||||
RoundName | 輪名稱 | 杯賽 | |||
6.賠率公司資訊表
這裡的賠率公司主要是采集歐賠和亞盤及大小盤的動态賠率用的。其他半全場,比分的指數基本都隻采集幾個固定的公司,如澳門,威廉。
名稱 | |||||
ComanyID | 公司編号 | ||||
IsTrading | 是否交易平台 | ||||
IsAuthority | 是否權威 | ||||
IsEurope | 是否歐盤 | ||||
IsAsia | 是否亞盤 | ||||
IsBigSmall | 是否大小盤 | ||||
IsGolas | 是否進球盤 |
今天的基礎資料庫設計就到此為止,由于全部采用XCode進行設計和開發,是以資料庫的設計直接使用的XML檔案,然後用XCoder生成實體類即可,如下圖所示:
是不是很爽,我這裡直接提供了XML檔案,懂XCode的朋友可以先睹為快,至于不懂X元件的,接着往下看,這些資料庫的實體操作類都會逐漸公開的。
下載下傳:基礎資訊實體.xml
.NET資料挖掘與機器學習,作者部落格:
http://www.cnblogs.com/asxinyu
E-mail:[email protected]