gpt4 book ai didi

sql - 创建用于存储高尔夫分数的可扩展数据库模式

转载 作者:可可西里 更新时间:2023-11-01 07:57:29 25 4
gpt4 key购买 nike

我正在尝试设计一个数据库来存储我所有的 friend 和我的高尔夫成绩。您可能知道,高尔夫成绩由 18 洞个人成绩组成。我可以想到两种设计模式的方法:

  1. 创建一个表,每个洞有一列(例如 h1 到 h18),该表具有引用其他表的 FK player_id、round_id 和 course_id。它有一个总计列,它是列 h1 到 h18 的总和。如果我改变了一个洞的分数,我将需要手动更新总计列。

  2. 创建一个表,其中包含一列用于球洞得分、一列用于球洞索引、一列用于 player_id、course_id 和 round_id。要获得一轮的总分,我需要对 round_id、player_id 执行 SUM 查询。

目前,数据库可能会存储不到 20 人的分数,因此任何一种方法都应该没问题。但是,如果我想存储 20,000 人的分数,哪种方法更具可扩展性呢?

我正在使用 MySQL 5 和 PHP5。谢谢。

更新>查询示例:1. 读取一轮所有玩家的 9/18 分数并建立记分卡。2. 基本统计数据,例如找出一名球员最近 X 轮的最低/平均/最高总分。3. 更高级的统计数据,例如最后 X 轮任何洞的平均杆数。

最佳答案

我的平均分、最高分和最低分是多少?

场景 1.

select (h1+h2+h3+h4+h5+h6+h7+h8+h9+h10+h11+h13+h14+h15+h16+h17+h18) / 18 as avg_score
,greatest(h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) as highest
,least(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) as lowest
from scores
where player_id = 1;

对比

select avg(score) as avg_score
,max(score) as highest
,min(score) as lowest
from scores
where player_id = 1;

哪个洞是我最糟糕的?

场景 2.

select case when h1 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18)  then 'H1'
when h2 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H2'
when h3 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H3'
when h4 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H4'
when h5 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H5'
when h6 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H6'
when h7 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H7'
when h8 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H8'
when h9 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H9'
when h10 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H10'
when h11 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H11'
when h12 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H12'
when h13 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H13'
when h14 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H14'
when h15 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H15'
when h16 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H16'
when h17 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H17'
when h18 = greatest(h1,h2,h3,h4,h5,h6,h8,h8,h9,h10,h11,h12,h13,h14,h16,h17,h18) then 'H18'
end as hole_highest_score
from scores
where player_id = 1;

对比

select hole, score
from scores s1
where player_id = 1
and score = (select max(score)
from scores s2
where s2.player_id = s1.player_id)

我会在任何一天选择场景 2 :)

关于sql - 创建用于存储高尔夫分数的可扩展数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4844593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com