mysql - 如何构建关系数据库?数据

标签 mysql database database-design relational

我需要跟踪得分以及他们是针对谁得分的。以前,我使用如下所示的平面文件数据库(那是一团糟)来完成此操作:

03611100025
00001000000
21011000000
00003000000
00021000000
10001050000
00001402000
00001000100
00001013050
00001000100
00001000000

每个团队都有一行和一列,我想整个事情变成了某种图表。现在我也可以在 MySQL 上做到这一点,但它会变得臃肿并且会迫使每一行都有荒谬的列数。

我觉得我一定是错过了一些其他更简单的方法来做到这一点。有人可以帮忙吗?

最佳答案

有 2 个表,Team 和 Game,其中 Team 有一个队名和一个队 ID,而 game 有两个队 ID(队 1 和队 2)和比赛的比分。然后,您在 Game 和 Team 表之间有外键(为了完整性)。这将以最小的模式和非常简单的结构反射(reflect)出谁演奏了谁以及乐谱是什么。

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

此数据表明 team 1 (Blue Devils) 与 team 2 (Cardinals) 的比分是 7 比 8。其余数据类似。

如果您不需要跟踪团队名称,则可以将该字段省略,但这通常是有用的信息。

因此,使用此架构,您可以通过如下查询获得特定团队的分数

SELECT * FROM Game g 
 INNER JOIN Team t on t.team1 = g.id

如果需要,您还可以添加其他信息,例如比赛发生的时间(日期),以及任何其他信息,例如有关比赛或球队的其他统计数据。

关于mysql - 如何构建关系数据库?数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2058876/

相关文章:

mysql : how to extract a part of field using regex?

mysql - 数据库表 - 足够规范化吗?

java - 使用 Hibernate 输出损坏的表 (PostgreSQL) 检索所有行

mysql - 当某些记录有月/日/年而其他记录只有年份时如何存储日期?

mysql - 数据库设计对象略有不同

java - 动态向数据库表添加列?

mysql - 在linux服务器上自动备份MySQL数据库

php - Laravel 将 2 个表单值放在一起并检查它们是否唯一

java - 如何在JAVA中将纪元转换为mySQL时间戳

android - GetReadableDatabase错误android