【问题标题】:mySQL database scheme for golf scores高尔夫比分的 mySQL 数据库架构
【发布时间】:2012-07-23 15:24:46
【问题描述】:

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

  1. 有一个存储所有课程信息的大表,因为这些信息只会在数据库中列出一次(~100 列...18 个洞 * 每个洞有 4 个属性,除了 course_name、位置、电话、 ETC。)
    • 课程: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:课程 ID、课程名称、地址、电话...

类似的问题可能会被问到有关记录回合的问题。我有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)将主要针对该人的击球是否高于或低于标准杆、击中球道、推杆次数等。

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

谢谢!

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

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

    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
    

    【讨论】:

    • 我整天都在搞这个,但我正在努力寻找更好的解决方案。如果我想显示一个包含每个洞及其标准杆的表格,我最好的选择是SELECT Par FROM Hole WHERE CourseID = '$CourseID' ORDER BY HoleNum ASC,然后只做一个while循环,每次都将结果作为数组获取吗?似乎有很多查询只是为了抓住一件事。一个洞的每个面值都是它自己的记录,所以我看不出有什么不同的方法。
    • 您建议如何存储与它们相关的发球台颜色/名称和球洞距离? COURSE 和 HOLE 表中的 JSON 数组是否有效? COURSE.Tees: [Black, White, Blue] HOLE.Distance: [457, 431, 418]
    • @quentinxs 编辑答案以支持多个 T 恤。
    • @Brady 直到现在才注意到这个问题。此单个查询获取所需的所有数据:SELECT Holenum, Par FROM HOLE WHERE CourseID = '$CourseID' ORDER BY HoleNum。
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 2011-06-18
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2010-09-17
    • 2019-01-29
    • 1970-01-01
    相关资源
    最近更新 更多