【Access】データベース構築の計画からクエリの作成まで

データベースを使いこなしたいのでSQLの勉強をしようと思ったのですが、まずはAccessでデータベースの基本を学んでからすることにしました。

Accessは学生時代に受けた講義で少し触った程度で、業務ではほとんど使っていません。職場ではFileMakerというソフトを使っていますが、これについても大掛かりな構築はしたことがありません。

どうせ作るなら自分の興味があること、ということで競馬の種牡馬の重賞成績をまとめたデータベースを作ることにしました。

Accessで簡単に運用ができるぐらいにまで作り込んで、それをMySQLとPHPで似たようなシステムを作るという考えです。

まずはクエリ作成までをやりました。

用意するテーブル

とりあえずデータを格納するテーブルを作成します。

複数のテーブルを作成し、それらを組み合わせていろんなことをします。

ゆえにテーブル間でデータが重複すると無駄だし入力ミスの原因にもなります。ここが1番の考えどころです。

必要なのは各レースの基本的な情報に、優勝馬とその父・父父・母父です。これで種牡馬の傾向を探れるデータベースを作ろうというものです。

別に予想に使おうとかそういうわけではないのであしからず。最終的にいろんな集計を取れればいいなと考えたらこのテーマに行きついただけです。

M01_競馬場マスタ

JRAで開催される競馬場を入れていきます。

競馬場をキーにして、それ以外に入れるのはどっち回りかだけです。

あとテーブル名についてですが、僕が学生時代に勉強したのだと確かこんな感じの命名規則だった気がするのでこれで。わかれば何でもいいです。

M02_競走馬マスタ

ここに出てくる競走馬は必然的に重賞勝ち馬の一覧になります。

そして父と母父が格納されています。

例えばキタサンブラックでいえば、G1だけでも7勝しており何回も父と母父を入力するハメになるところが、このテーブルに入れる1回の手間で済むというわけです。

M03_種牡馬マスタ

種牡馬マスタも競走馬マスタと同じような感じです。

このテーブルがないとサンデーサイレンスを大量に入力するハメになります。

M04_レースマスタ

そしてレースマスタ。これが最も情報量が多いです。

せっかくだから枠番とか騎手とかも入れたくなりましたが、作業量を考慮して割愛です。

どっち回りとか種牡馬については後ほどの作業で別テーブルから引っ張ってきます。

できれば東京優駿は東京の芝2400というレース名ごとの情報を入れたテーブルを用意すれば入力が楽になったのですが、開催年によってコースが変わることもしばしばあるので、レコードごとにこれは手入力です。

あと迷ったのが京都や阪神にある内回り外回り。内外で分かれていないコースもあるので、集計する時に邪魔になりそうでしたが、内外で坂のきつさや直線の長さが変わることを考えると入れざるを得ない。

キー列について

テーブルを新規作成すると、ID列が自動的に追加され、これはレコード追加のたびに自動的に数字が振られていきます。

順番がわかりやすくていいのですが、今回作成するデータベースはその必要性がないのでキー列は別に設けます。

デザインモードに切り替えて、任意のフィールドをキー列にします。

キー列の内容は一意でなければなりません。つまり重複するレコードがあってはいけません。

レースマスタでいえば、「2015年10月23日京都競馬場11レース」を意味する「20151023京都11」といったデータを入れる開催列をキー列にしています。これならば他のレコードを重複することはありません。

リレーションシップ

これらのテーブルはまだ独立した状態です。リレーションシップで連動させます。

メニューのデータベース ツールからリレーションシップ。

デザインタブに切り替わるので、テーブルの追加をクリックすると右側にテーブルが出てくるので、使うテーブルをダブルクリックします。

テーブルと格納されているフィールドの一覧が並ぶので、関連付けたいもの同士を結びます。

レースマスタを中心として、競馬場からどっち回りか、馬名から父と母父、その父から父父を引っ張るようにします。

クエリの作成

クエリは複数のテーブルから必要なデータだけを取り出してまとめるもので、リレーションシップが活躍します。

  • レースマスタから「開催」
  • レースマスタから「レース名」
  • レースマスタから「グレード」
  • レースマスタから「競馬場」
  • 競馬場マスタから「回り」
  • レースマスタから「コース」
  • レースマスタから「内外」
  • レースマスタから「距離」
  • レースマスタから「馬名」
  • 競走馬マスタから「父」
  • 種牡馬マスタから「父父」
  • 競走馬マスタから「母父」

を1つのクエリとして表示させます。リレーションシップがうまくいっているので、テーブルにさえ入れていれば自動的に全部出てきますね。

そんな感じです。とりあえずいくつかレコードを入力していきます。

次はフォームを作成して、入力補助のツールを作りたいところです(予定は変わるかも)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です