我需要跟踪得分,以及他们是谁得分。以前,我使用的是一个平面文件数据库(那是一堆乱七八糟的),如下所示:
03611100025
00001000000
21011000000
00003000000
00021000000
10001050000
00001402000
00001000100
00001013050
00001000100
00001000000每个团队都有一行和一列,我猜整个事情变成了一种图表。现在我也可以使用MySQL,但是它会变得臃肿,并且会迫使每一行都有一个荒谬的列数。
我觉得我一定是错过了一些其他更简单的方法来做这件事。有人能帮上忙吗?
发布于 2010-01-14 01:35:43
有两个表,Team和Game,其中Team有一个团队名称和一个团队ID,而game有两个团队ID (team 1和team 2)和游戏的得分。然后,在Game和Team表之间有外键(为了完整性)。这将通过一个最小的模式和一个非常简单的结构来反映谁玩了谁,比分是多少。
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然后,如果需要,您还可以添加其他信息,如比赛发生的时间(日期),以及任何其他信息,如有关比赛或球队的其他统计数据。
发布于 2010-01-14 21:28:06
第一个回答是正确的。如果您将数据组织到关系中,并为每个关系创建一个表,则处理数据将容易得多。你需要在关系数据库设计方面做的背景知识将教你更多关于这方面的知识。
如果您使用响应中的团队和游戏结构,您仍然可以将该结构转换为您在问题中想象的那种结构。这个过程被称为“交叉表”或“旋转”,它在教程中有很好的记录。
虽然从关系结构转移到交叉表结构很容易,但要从另一种结构转移到另一种结构却非常困难。针对交叉表数据编写其他查询也很困难。一个例子可能是找出每支球队的最高分。如果你把你的数据放在数据库里,迟早你会想要用它做不止一件事。
https://stackoverflow.com/questions/2058876
复制相似问题