我正在创建一个体育统计数据库。有了它,我想为许多类型的运动编目游戏/比赛统计数据。例如,该数据库可以告诉您卡罗莱纳黑豹队在 09-10 赛季(橄榄球)的达阵次数,或者迈阿密热火队在上一场比赛(篮球)的罚球次数。
我在设计一个名为 Matches 的更基本的表时遇到了问题。 Matches 表包含以下列:
- ID(PK match_id)
- 比赛日期 (play_date)
- 在表 Performances 中引用团队表现的 ID(FK team_1_performance_id 和 team_2_performance_id)。
性能表包含:
- ID(PK perf_id)
- 团队 ID(FK team_id)
- 最重要的是,所有其他统计数据,例如:击球次数 (*)
- 平均每次冲球码数 (*)
- 三分球命中率 (*)
(*)问题是,如何使性能表与相应的运动相关?例如,棒球比赛有罢工,但足球和曲棍球没有(我能想到的任何其他运动也没有)。我不希望我的 Performance 表有一个罢工列,因为它只与部分记录相关。
或者我呢?也许我的设计应该完全不同?你会怎么做?
现在,我不知道这是否可行,但我的一个想法是在 Matches 中包含某种性能表 ID 列,它引用不同的性能表。这样当我查询一场比赛的表现时,它会查看特定的表格。这就是这个问题的标题(Can an attribute designate one table over another?)的来源。想象一下“SELECT team_1_performance.strikes FROM Matches INNER JOIN appropriate_performance_table AS team_1_performance WHERE Matches.performance_table_id = 'Baseball'”如果可能的话,我如何指定 appropriate_performance_table?
我的另一个想法是为所有运动创建比赛表,如 Rugby_Matches 或 Football_Matches,然后为这些运动创建各自的性能表,如 Rugby_Perfomances 或 Football_Performances。这看起来像是很多表,代表了一些相似的东西。
如果可以,请尽量让您的回答针对 MySQL。
谢谢!
最佳答案
创建向下的数据,而不是交叉。
所以你会有
性能表包含:
- ID(PK perf_id)
- 团队 ID(FK team_id)
- 性能统计类型
- 性能统计值
或者类似的东西。
然后您还必须创建一个规则表,它将特定的Performance Stat Types链接到特定的Sport Types。
这样一来,您还可以轻松添加新的性能统计类型,而不会严重影响您的数据库架构。
然后您还可以实现显示顺序,如果您愿意,甚至可以显示分组。
关于sql - 一个属性可以指定一个表而不是另一个表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1940327/