1

各ホールまたはラウンドに関するゴルフのスコアやその他の統計を格納するデータベースを設計していますが、どの方法が最も効率的かを判断するのに苦労しています。私の質問は、コースとラウンドのテーブルの構造に関するものです。ここに 2 つの選択肢がありますが、3 番目の選択肢があるかどうかはわかりません。mySQL 5.1.63 と PHP 5.2.17 を使用しています。読みやすいように CAPS の表。

  1. この情報はデータベースに一度だけリストされるため、すべてのコース情報を格納する 1 つの大きなテーブルを用意します (~100 列...18 ホール * course_name、場所、電話などに加えて、各ホールに 4 つの属性)。
    • コース: course_id、par_1、par_2、...par_18、distance_1、distance_2、...distance_18 など。
  2. コース情報をテーブルに分割し、特定のテーブルを適切なタイミングで course_id に接続します
    • COURSE_PAR: course_id、par_1、par_2、...par_18
    • COURSE_DISTANCE: course_id、distance_1、distance_2、...distance_18
    • COURSE_INFO: course_id、course_name、住所、電話番号...

ラウンドの記録についても同様の質問をすることができます。round_1、round_2、...、hit_fairway_1、hit_fairway_2、num_putts_1、num_putts_2 を持っていますか? それとも、これらの属性をそれぞれ独自のテーブルに分割しますか? この質問とその回答は、これを表に分割する方向に傾いています。それは次のような構造を意味しますか?

  • スコア: ホール番号、コース ID、ラウンド ID、スコア、フェアウェイ ヒット、パット数、...

定期的なクエリ (PHP を使用) は、その人がパーより上または下にヒットしたか、フェアウェイにヒットしたか、パットの数などでほとんどオンになります。

うまくいけば、私の質問は十分に明確でした。上記のような似たような質問があることは知っていますが、それらの回答を私が探していたものに完全に移すことはできませんでした.

ありがとうございました!

4

1 に答える 1

6

'slope'が何であるかはわかりませんが、最初はどうでしょうか。

COURSE - one record per course
CourseID
AddressInfo
NumHoles - usually 9 or 18

HOLE - one set of these per course
CourseID
HoleNum
Par
Slope - you can add more here if you want (water, sand, etc.)

MATCH
CourseID
MatchID
MatchName
StartDate

ROUND
RoundID
MatchID
PlayerID
RoundNum
StartDate

SCORE - every time a player plays a hole, add one of these
CourseID
MatchID
RoundID
HoleID
PlayerID
NumPutts
NumStrokes - you can add more specifics if you want (fairway, rough)

PLAYER
PlayerID

これは「完全に正規化された」と呼ばれるものであり、テーブル間でのデータの重複は最小限に抑えられます。結果のSQLステートメントは、初心者にとっては少し複雑になる可能性がありますが、今すぐ入手できれば価値があります。

編集(2020):(ちょうど尋ねられたように)ホールごとに複数のティーをサポートする必要がある場合は、これを追加します:

HOLE_LENGTH - distance from tee to cup
CourseID
HoleNum
TeeIdentifier - Black, White, Blue, etc
Distance
于 2012-07-23T15:31:40.987 に答える