尝试创建一个包含多个表但找不到创建有效主键的解决方案的 NFL 数据库

Trying to create an NFL database that has multiple tables but can't find a solution to creating an effective primary key

我目前拥有的三个table是游戏、记录和团队。团队 table 正是您所想的 - table 包含所有 32 个团队,并带有与之关联的 ID。比赛 table 包含 games_id,哪支球队是主场和客场,比赛周等。记录 table 包含 record_id、主队和客队,以及获胜者列。

我 运行 一直关注的问题是找到一个解决方案,让每支球队都可以多次参加比赛 table 以及如何 link 另一支球队参加比赛table秒。例如,爱国者队在 table 队中的 id 为 21。如果我把 27 作为比赛的 id table,我只能让爱国者队在他们打了 16 场比赛的时候...

非常感谢任何建议,并提前致谢!

查看主键和外键的区别。

在 table 队中,爱国者队的主键为 21。其他球队都没有这个键。在游戏 table 中,给定的游戏将有自己的主键(例如 27),但在 'home' 和 'away' 字段中将是两支球队的键。在游戏 table 的上下文中,这些是外键,因为它们不是此 table(游戏)的键,而是另一个 table 团队的键。并且在任意数量的游戏记录中使用相同的团队密钥是没有问题的。

我可能还会结合您的 'record' 和 'games' table。将 score/result 个字段放入游戏 table 并在游戏结束后更新它们。

扩展 Justsalt 答案:

你的tablegames需要自己PK,我建议game_id用auto numeric。一场比赛是独一无二的,因为它是在特定日期在特定体育场进行的。在该游戏中,您将拥有 away_team_idhome_team_id 两者都是 table 团队的外键。

为了扩展其他答案,集合关系是关系数据库的基础。一个 团队 可以拥有 one-to-many 场比赛 。因此,一组唯一的团队(团队 ID 作为主键)应该与许多游戏相关(团队 ID 作为外键,允许为每个唯一的游戏实例重复)。而且因为每场比赛只有两支球队,所以您将维护两个指向相同主键的外键。

用一个diagram来说明:

同样,你可以把它看成parent-child关系。游戏不能没有团队(即child),因此它们依赖于外部(或外国)关系,但团队可以没有游戏存在(即parent ) 所以依赖内部 (pr primary) 关系。