少し前、競馬にはまって、OpenOffice Calcで過去のデータを表形式にして的中率やら回収率を研究していたのですが、200レースを超えるとさすがに速度的にも厳しくなって限界を感じてきました。
ならデータベースを使ってみようかなと思い立ち、OpenOffice標準のBaseを利用してみることにしました。
OpenOfficeの解説サイトは充実してきていますが、目的ありきでの解説は少ないように思います。ここでは競馬データの管理を目的に、データベース初心者が挑戦した形跡を残してみたいと思います。
私は仕事で基本的なSQL文を触った程度の知識しかありません。効率化とかテーブル設計の経験は皆無ですので、ここの記述したことが最適の一手では無いかも知れない前提で読んでくださいね。
文書は下記の構成になってます。
目次
概要
- 環境
- OpenOffice2.2を使用します。これを書いている時点で最新版です。
- 目標
- 過去の開催データ・着順・配当などの情報の記録します。
- 妄想
- 実際にいくつかデータを入力し、予想に役立てます(笑)
データベースを作る
OpenOffice.org Baseを起動するとデータベースウィザードが始まります。今回はBaseに内蔵されているオープンソースなデータベース、HSQLDBを利用することにします。Javaで動くのでJavaランタイムがインストールされている必要があります。
テーブルはウィザードを使わずに自分で編集する、を選びます。
ここら辺は詳しい説明サイトに任せて省略します。
テーブル作成
テーブルの設計をします。
競馬ファンには申し訳ないのですが、私は馬の名前とか騎手には興味ないです。最初なので
- いつ
- どこの何レース
- 天候や馬場状態
- 着順と配当
- 備考
これくらいの情報にしぼって、完成させることを優先することにします。
レース基本Table
ひとつのレースの基本情報を格納します。開催場所や天候などはマスタを用意してそこへの外部キーでリレーションを張ることにします。
着順や配当は、同着などの存在を考えるとカラムとして持つより結果テーブルとして別に持つことにしました。
場所マスタ
開催場所のマスタです。
馬場マスタ
馬場状態のマスタです。「芝・良」とか書いてあるアレのつもりです。詳細は良くわかりませんがとりあえず何かの条件に使えるかもしれないのでデータとして記録できるようにしてみました。
天候マスタ
天気です。よく、悪天候でレースが荒れるとか言われますが、実際にデータで検証するためにも用意しました。
結果データ
レース結果を格納するテーブルです。1〜3着の順番と配当だけならレースデータに含めてもいいのですが、稀に同着という事象が発生しますので別テーブルとしています。
例えば、10番、11番、12番、13番という馬が走り、11番と12番が同着の場合は、1着10番、2着11番・12番、3着13番となります。単勝式は1着を当てるので1パターンだけですが、馬連などでは2パターンの勝馬投票券が発生します。
こうゆう場合も踏まえてレース基本データと結果データを、1:nの関係で結合します。
この例であれば、10番→11番→13番というレコードと、10番→12番→13番という結果のレコードを作製し、同一のレースへ紐付けます。また、発生しないパターンの配当についてはNULL値を書いておくことで対応します。
リレーションの登録
最低限のテーブルを作成したので、リレーションを登録します。ツール(T)→リレーションシップ(A)、で作成画面が開きます。
リレーションを登録しておくと後々ウィザードを使うときに自動的にリレーションを認識してくれたりして便利です。
マスタの準備
マスタ系のテーブルだけは大した登録量も無いので直接入力してしまいます。メインのデータを入力するときに必要になりますし。
テーブルに関するメニューで、テーブル名で右クリックし「開く」を選択すると簡易入力画面が開くので順に入力していきます。
IDは直接画面に出すことは無いので並び順などを気にする必要はありません。
場所マスタ、馬場マスタ、天候マスタについて値を入力していきます。
下図は場所マスタを入力している途中のところです。
参考リンク