我正在设计一个包含三个表的数据库:用户,游戏和(可能)注册。我想表示用户可以在零个或多个游戏中注册。
我使用表格寄存器在游戏中注册用户。
我还需要将用户的分数存储在游戏中。
我的问题是:
我可以在表格寄存器中添加一个名为score的列吗?这是一个好的设计吗?
感谢。
答案 0 :(得分:3)
是的,这是一个好的设计。但你应该改变命名。
user:
userid
username
game:
gameid
name
usergame:
userid
gameid
score
答案 1 :(得分:2)
您所描述的是多对多关系,使用REGISTER作为交叉引用表:
USER
UserID
GAME
GameID
REGISTER
UserID
GameID
Score
[+ registration info]
听起来不错,但如果游戏相关信息或注册相关信息变得更复杂,你最终可能会将它分成两部分。
编辑添加:通常,您最终会想要保存游戏历史记录(“平均得分”,“最后5场比赛”,“最快时间”等等)。然后,您在REGISTER
和GAME_HISTORY
表之间建立了一对多的关系。
此外,我同意这样的答案:如果它包含非注册信息,称其为“注册”表将会引起混淆。
答案 2 :(得分:1)
您可以将用户ID和游戏ID放入注册表以及分数。这将允许您为许多游戏注册用户,每个游戏都有一个分数。如果我理解你的问题,我认为这可能会做你想要的。
答案 3 :(得分:0)
我想,您将使用注册表来避免游戏和用户之间的多对多关系。如果你想在特定游戏中保持特定用户的得分,我认为这是一个很好的解决方案。
答案 4 :(得分:0)
如果是一张能够跟踪不同游戏中用户得分的表:当然,您可以拥有该列。但也许称之为“得分”呢? (除非你在那里需要其他信息,否则你应该使用第四张表)
答案 5 :(得分:0)
我认为你应该考虑创建一个“关系”表。
UserId | GameId | Score
UserId
和GameId
将成为主键,并且每个表分别对User
和Game
表是陌生的。
答案 6 :(得分:0)
这可能是一个合适的设计,只要每个寄存器最多只能有一个分数。如果寄存器可能没有分数,那么这将对应于NULL
的值。如果这可能是表中行的很大一部分,那么另一个保持分数的表可能是合适的。
在我制作的应用程序中,我遇到了类似的情况,并且因为我想添加“高分表”功能(这需要在分数列上进行ORDER BY
查询),我最终得到了很多我的“注册”表上的索引(不止一个只是为了这个目的,因为我必须为不同类型的游戏有不同的索引)。最后,我为得分创建了一个新表,尽管大多数寄存器都有相关的分数,以便使这些索引的维护成为一个问题。
答案 7 :(得分:0)
如果您的数据库的目标是分析,那么您也会考虑这一点:
请记住,除非您在游戏桌中为“没有注册游戏”添加一行,否则您将进行外部加入,并将其作为默认值放在usergame表中。您可以使用第一次注册删除“非注册”...如果最后一次注册被删除,则将其添加回来。
这将使您的报告内部联接并找到没有注册的所有用户简单明了。