sql - 一个属性可以指定一个表而不是另一个表吗?

标签 sql mysql database database-design rdbms

我正在创建一个体育统计数据库。有了它,我想为许多类型的运动编目游戏/比赛统计数据。例如,该数据库可以告诉您卡罗莱纳黑豹队在 09-10 赛季(橄榄球)的达阵次数,或者迈阿密热火队在上一场比赛(篮球)的罚球次数。

我在设计一个名为 Matches 的更基本的表时遇到了问题。 Matches 表包含以下列:

  • ID(PK match_id)
  • 比赛日期 (play_date)
  • 在表 Performances 中引用团队表现的 ID(FK team_1_performance_idteam_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/

相关文章:

mysql - 连接 3 个包含空值的表

mysql - 如何根据列更改主键以具有不同的 Auto_Increment

javascript - 点击javascript按钮添加好友

sql - 很多外键 - Django Admin

php - 如何用PHP复制太多记录?

java - apache derby 与 mysql 之间有什么区别

MySQL 表消失

mysql - 如何使用 Sequelize 查询虚拟列?

MySQL 格式数字,小数位数未知

sql - varchar 是否会因数据碎片而导致性能下降?