高尔夫分数的mySQL数据库架构

时间:2012-07-23 15:24:47

标签: mysql sql

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

  1. 有一个存储所有课程信息的大表,因为这些信息只会在数据库中列出一次(~100列...每个洞有18个洞* 4个属性,除了course_name,位置,电话,等等。)
    • 课程: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,address,phone ...
  3. 可以询问关于记录该回合的类似问题。我是否有round_1,round_2,...,hit_fairway_1,hit_fairway_2,num_putts_1,num_putts_2,或者我是否将这些属性分解为自己的表格? This问题及其答案倾向于将其分解为表格。这是否意味着像:

    这样的结构
    • SCORE:hole_num,course_id,round_id,score,hit_fairway,num_putts,...

    重复查询(使用PHP)主要取决于击中高于或低于标准杆的人,击中球道,推杆数等等。

    希望我的问题很清楚。我知道那里有半类似的问题,就像上面引用的问题一样,但我无法将这些答案转移到我想要的地方。

    谢谢!

1 个答案:

答案 0 :(得分:4)

不确定'斜率'是什么,但这是怎么回事:

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语句可能会有点复杂,但如果你现在得到它,它将是值得的。