我需要记录得分情况和他们的对手。之前,我使用的是一个平面文件数据库(这是一个混乱的数据库),看起来像这样:
03611100025
00001000000
21011000000
00003000000
00021000000
10001050000
00001402000
00001000100
00001013050
00001000100
00001000000
每个小组都有一行一列,我想整个事情都变成了一个图表。现在我也可以使用mysql了,但是它会变得臃肿,并且会迫使每一行拥有荒谬的列数。
我觉得我一定是错过了其他更简单的方法。有人能帮忙吗?
最佳答案
有两个表,team和game,其中team有一个团队名称和一个团队id,game有两个团队id(team 1和team 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
然后,如果需要,您还可以添加其他信息,比如游戏发生的时间(日期),以及任何其他信息,比如关于游戏或团队的其他统计信息。