1

我正在设计一个数据库来存储高尔夫得分和其他关于每个洞或回合的统计数据,但我很难知道哪种方法最有效。我的问题集中在为课程和回合构建表格。这里有两个选项,虽然我不确定是否有更好的第三个选项。我正在使用 mySQL 5.1.63 和 PHP 5.2.17。CAPS 中的表格以提高可读性。

  1. 有一个存储所有课程信息的大表,因为这些信息只会在数据库中列出一次(~100 列...18 个洞 * 每个洞有 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,还是我将这些属性中的每一个分解到自己的表中?这个问题及其答案倾向于将其分解为表格。这是否意味着这样的结构:

  • SCORE:hole_num, course_id, round_id, score, hit_fairway, num_putts, ...

重复查询(使用 PHP)将主要针对该人的击球是否高于或低于标准杆、击球道、推杆数等。

希望我的问题足够清楚。我知道那里有半相似的问题,就像上面提到的那样,但我无法将这些答案完全转移到我正在寻找的东西上。

谢谢!

4

1 回答 1

6

不知道“坡度”是什么,但一开始是这样的:

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 回答