tha*_*elp 1 mysql database database-design relational
我需要跟踪得分和他们得分的对象.以前,我使用平面文件数据库(这是一个烂摊子)这样做,看起来像这样:
03611100025
00001000000
21011000000
00003000000
00021000000
10001050000
00001402000
00001000100
00001013050
00001000100
00001000000
Run Code Online (Sandbox Code Playgroud)
每个团队都有一行和一列,我猜整个事情变成了一种图形.现在我可以做到这一点也是MySQL,但是它会变得臃肿并且会迫使每一行都有一个荒谬的列数.
我觉得我必须错过其他一些非常简单的方法来做到这一点.任何人都能伸出援助之手吗?
有2个表,团队和游戏,团队拥有团队名称和团队ID,游戏有2个团队ID(团队1和团队2)和游戏分数.然后,您在Game和Team表之间有外键(用于完整性).这将反映谁使用最小架构和非常简单的结构播放谁和什么得分.
Team
|-------------------------|
| Primary (int)| id |
| (chr)| name |
|-------------------------|
Game
|-------------------------|
| Primary (int)| team1 |
| Primary (int)| team2 |
| (int)| score1 |
| (int)| score2 |
|-------------------------|
Run Code Online (Sandbox Code Playgroud)
因此,一些示例数据看起来像:
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 |
|---------------------------------|
Run Code Online (Sandbox Code Playgroud)
这个数据表明球队1(蓝魔队)打了2队(红雀队),得分为7到8.其余数据相似.
如果您不需要跟踪团队名称,可以将该字段保留,但这通常是有用的信息.
因此,使用此架构,您将获得具有查询的特定团队的分数
SELECT * FROM Game g
INNER JOIN Team t on t.team1 = g.id
Run Code Online (Sandbox Code Playgroud)
如果需要,您还可以添加其他信息,例如游戏发生时(日期),以及任何其他信息,例如有关游戏或团队的其他统计信息.