如何为关系构建数据库?数据

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,但是它会变得臃肿并且会迫使每一行都有一个荒谬的列数.

我觉得我必须错过其他一些非常简单的方法来做到这一点.任何人都能伸出援助之手吗?

cde*_*zaq 5

有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)

如果需要,您还可以添加其他信息,例如游戏发生时(日期),以及任何其他信息,例如有关游戏或团队的其他统计信息.