競馬データベースプログラミング

EveryDBのデータ形式を知ろう

 EveryDBはData Lab.からダウンロードしたデータを、SQL Server等のリレーショナルデータベースに格納します。この時、Data Lab.のデータ形式ではなく、EveryDBのデータ形式に置き換えられます。とはいえ、基本的にはData Lab.のデータ形式とEveryDBのデータ形式は同じものだと思って構いません。Data Lab.では、ラップタイムなど同質のデータはくり返し○個といった表現があり、これがリレーショナルデータベースにそぐわないため、くり返し表現をやめたものがEveryDBのデータ形式です。EveryDBのデータは、Data Lab.のデータを全て保持していると言えます。

データベースを理解する上で重要な単位

 データベースをイメージするには、Excelのスプレッドシートをイメージすると理解しやすいと思います。

データベースの単位

  • ひとつのセルが「フィールド」と呼ばれるデータ単位に相当
  • フィールドが集まって行を形成し、「レコード」になる
  • レコード内のフィールドの数、データ型はあらかじめ定義しておく必要がある
  • データはフィールドに保持される
  • データにアクセスするには、フィールドを指定する必要がある


データベースの型を理解しておくと、EveryDBのデータ形式を理解する手助けになります。EveryDBはあくまでもデータベースのフォーマットにあわせているからです。

EveryDBのデータ形式

 EveryDBは、Data Lab.のすべてのデータ形式をサポートしています。従って、ここで全てを紹介できるわけではありません。ここでは、よく使われると思う「レース詳細(RACE)」と、「馬毎レース情報(UMA_RACE)」について簡単に説明します。より詳細なデータ形式は、EveryDBのヘルプファイルにある「データフォーマット」を参照してください。

(1)レース詳細(RACE)

レース詳細(RACE)データ形式

  • レース詳細は、指定開催日、指定レース番号のレースに関する情報を格納している
  • レース名や競走条件、天候、ラップタイムなどを含む
  • 出走馬に関する情報は一切含まない
  • 赤で囲ったフィールド名で、各データにアクセスする
  • 1レース分のデータが1レコードに格納される
(2)馬毎レース情報(UMA_RACE)

馬毎レース情報(UMA_RACE)

  • 馬毎レース情報は、あるレースに出走した競走馬に関する情報を格納している
  • 開催日、コース、レース番号など、レースを特定するための情報以外、レース情報は保持しない(レース名やクラス条件などはレース詳細を見る)
  • そのレース出走時の騎手や馬体重、斤量などのデータを格納
  • 着順、コーナー通貨順位、タイム、着差など結果情報も格納(レース確定後)
  • 通常はレース詳細とセットで扱う
  • 1レコードで、1頭分のデータを格納
  • 1レコードは、競馬新聞の戦績1コマに相当
(3)レース詳細と馬毎レース情報の使い方

 レース詳細と馬毎レース情報は、非常に相関関係の強いデータです。ほとんどの局面で、セットで使うことになります。例えば、今回のレースの出走馬一覧を表示するには、レース詳細からレース名やクラス、トラック、施行距離などを取得し、出走馬は馬毎レース情報から取得する必要があります。
 Data Lab.サービス開始当初、この部分の変化が大きくとまどう人が多かったのも事実ですが、リレーショナルデータベースを利用すれば、割と簡単に処理できます。

 競走馬には血統番号という固有IDが振られていますので、これを検索すれば、その馬の障害戦績を取得することも可能です。この時に戦績データとして利用できるのが「馬毎レース情報」です。ただし、馬毎レース情報には、トラック情報や距離情報が欠けていますので、競馬新聞の馬柱を作ろうと思ったら「レース情報」と併用する必要があります。個人的にはこの処理が2度手間なので、残念に思っている部分です。

 ところで、各データ形式には、<コード表 2204 馬記号コード>参照などと書かれている箇所があります。これはデータベースに格納するときに、文字ではなく数字など、管理しやすいコードに置き換えられていることを意味します。コード表を参考に、その数字や文字列が意味するものに置き換えてやります。

 これでEveryDBのデータ形式の概要は理解できたと思います。あとは、EveryDBのヘルプに書かれた情報を元に、自分が必要なデータ形式についての理解を深めてください。