我想我已经规范了我的数据库超出了我的 SQL 知识。:) 这是我在斯诺克联赛网络应用程序中遇到的一个问题。它计算了一支球队所有赛季的高休息时间的总体统计数据。在示例中,团队 ID 为 3。
选择 max(break_score) maxBreak,avg(break_score) avgBreak, 计数(break_score)休息 从休息 在 match_id=break_match 上加入比赛 其中break_player在( 选择不同的 player_id 来自玩家 在 player=player_id 和 team=3 上加入 team_members) 和(match_hometeam=3 或 match_awayteam=3)
表:
- 火柴 :
match_id int(11) 自动增量 match_hometeam int(11) match_awayteam int(11) match_date 日期 match_void tinyint(4) match_status tinyint(4) match_homescore tinyint(4) match_awayscore tinyint(4) match_league int(11)
- 休息:
break_id int(11) 自动增量 break_match int(11) match_id 的外键 break_player int(11) break_score tinyint(4) break_clearance tinyint(4) break_year int(11)
- team_members :多对多表。
团队 int(11) 团队表的外键 player int(11) 玩家表的外键 year int(11) 球员为球队效力的年份
除了一个问题之外,上面的查询几乎可以按预期工作。如果一名球员为多支球队效力,那么他为所有球队所拥有的休息时间将包含在这些统计数据中。
如果 Breaks 表有一个额外的字段“break_team”,则查询将是微不足道的。所以我的问题是双重的,任何人都可以协助进行正确的查询,还是我应该稍微减少标准化以帮助这些统计数据?什么时候去规范化?