0

我是一所大学计算机科学专业的二年级学生。我正在用 php/mySQL 制作一个在线应用程序。这是我第一次使用 PHP 和 mySQL。无论如何,我正在制作一个跟踪棒球比赛的应用程序。用户创建一个球员团队并开始与另一支球队的比赛,用户输入结果,而应用程序对比赛进行评分并保留球员统计数据。我正在设计数据库,并希望有人可以为我澄清:

主键 - 我很确定我明白这是什么。基本上它是每一行的唯一标识符,用于区分每一行。

键 - 现在我有一个“玩家”表,我也有一个“玩家统计”表。如果我理解正确(我可能不理解),“Players”表有一个“playerStatsId”列,它是“PlayerStats”表的主键。这是有效的,因为每个玩家只有一个统计表。

没有钥匙???-好的,这就是我的例子。我的应用程序的每个用户都应该能够将任意数量的团队添加到数据库中。他们只能编辑他们“拥有”的球队的比赛。我在想我可以通过一个包含两列的表来实现这一点:“用户名”和“团队 ID”。然后我可以搜索表格并挑选出属于某个用户的团队。我觉得这不是答案,因为它似乎效率不高。有没有更好的办法?

我很感激任何帮助!谢谢!!

4

2 回答 2

1

外键

每个玩家的 PlayerStats 表中是否只有 1 条记录?如果是这样,那为什么不把统计数据放在玩家表中呢?

如果每个玩家有多个统计数据,通常我们会将统计数据分开到不同的表格中。

例子:

Players
PlayerID  Name
001       George

PlayerStats
PlayerID  StatType        Value
001       BattingAverage  0.300
001       RunsPerGame     2

在这种情况下,PlayerID 将是 PlayerStats 表上的外键。这种表有时被称为业务应用程序的“详细信息”表。

您的 No Key 示例很好,并且很常见。我不记得它叫什么,类似于“关系表”。

于 2012-11-01T00:08:16.303 回答
0

玩家表应该在 PlayersStats 表中将其 PK 作为 FK。你可以用任何一种方式来关联它,但是让玩家的一个方面成为关系的外键方面更有意义。

至于“无钥匙”,你应该尽量避免这种情况。在关系数据库中,如果存在关系,则应该明确说明。您可以通过这种方式避免出现孤立行。孤立行基本上是一段数据,通过没有关系,它可以永远坐在那里并弄乱你的数据库。在这种情况下,您的 User 表应该有一个 PK,并且该 PK 应该是将它链接到 Teams 表的内容。您可以有两列,但其中一列应该与用户表相关。您的团队表也应该在任何玩家的表中都有一个充当 FK 的 PK,因为这些玩家属于团队。

我也会键入 Team 表。你永远不应该假设一个数据库已经完成,即使它是你自己的。编写代码/数据库以扩展它们。

我敢肯定,这还有很多。但这些是帮助您入门的一些一般要点。

编辑:

看到您的问题中的评论:如果用户可以有多个团队,您可能希望在用户和团队表之间有一个表,其中 UserId 和 TeamId 作为 FK。这可能是您不必键入的表,因为删除用户或团队应该通过该链接表级联(或错误)。

所以:

Player(PK)->(FK)PlayerStats
--if multiple users can have multiple teams
User(PK)->(FK)LinkTable(FK)<-Team
--if 1-1 user-team
User(PK)->(FK)Team
Team(PK)->Player(FK)
于 2012-11-01T00:04:14.227 回答