[英]How to structure database for relational? data
我需要跟踪得分和得分对象。 以前,我是使用一个看起来像这样的平面文件数据库(很乱)完成此操作的:
03611100025
00001000000
21011000000
00003000000
00021000000
10001050000
00001402000
00001000100
00001013050
00001000100
00001000000
每个团队都有一行一行,我想整个事情都变成了一张图表。 现在我也可以使用MySQL,但是它会显得过分膨胀,并会迫使每一行的列数都非常荒谬。
我觉得我一定会错过其他一些更简单的方法来执行此操作。 有人可以伸出援手吗?
有2个表,“团队”和“游戏”,“团队”有一个团队名称和一个团队ID,游戏有2个团队ID(团队1和团队2)和比赛得分。 然后,您在游戏和团队表之间具有外键(出于完整性)。 这将以最小的架构和非常简单的结构反映出谁扮演了谁以及得分是多少。
Team
|-------------------------|
| Primary (int)| id |
| (chr)| name |
|-------------------------|
Game
|-------------------------|
| Primary (int)| team1 |
| Primary (int)| team2 |
| (int)| score1 |
| (int)| score2 |
|-------------------------|
因此,一些示例数据如下所示:
Team
|------------------|
| id | name |
|------------------|
| 1 | Blue Devils |
| 2 | Cardinals |
| 3 | Fish |
| 4 | Lemmings |
|------------------|
Game
|---------------------------------|
| team1 | team2 | score1 | score2 |
|---------------------------------|
| 1 | 2 | 7 | 8 |
| 1 | 4 | 2 | 25 |
| 2 | 3 | 8 | 2 |
| 3 | 4 | 17 | 18 |
|---------------------------------|
此数据表明,第1队(蓝魔)和第2队(红雀队)的得分为7-8。其余数据相似。
如果您不需要跟踪团队名称,则可以不填写该字段,但这通常是有用的信息。
因此,使用这种架构,您可以通过查询获得特定团队的分数
SELECT * FROM Game g
INNER JOIN Team t on t.team1 = g.id
然后,您还可以根据需要添加其他信息,例如游戏进行的时间(日期),以及其他任何信息,例如有关游戏或团队的其他统计信息。
第一个答案是正确的。 如果将数据组织到关系中,并为每个关系创建一个表,则数据将更容易使用。 在关系数据库设计中需要进行的背景学习将教给您更多有关此的知识。
如果您使用响应中的“团队和游戏”结构,您仍然可以将该结构转换为您在问题中想象的结构。 此过程称为“交叉制表”或“透视”,并且在教程中有很好的记录。
从关系结构转移到交叉表结构很容易,但从另一方向走是非常困难的。 对于交叉表数据很难组合其他查询。 一个示例可能是找到对每个团队得分最高的分数。 如果将数据存储在数据库中,则迟早会想对它做更多的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.