成绩系统数据库设计

Sum*_*812 0 database sql-server

我刚刚开始学习数据库,因此我需要一些设计数据库的帮助。我正在尝试制作一个成就系统,但我有点卡住,主要是因为我担心我的设计不是\xc2\xb4t 那么好。我想出了 2 个解决方案,第一个在这里显示:链接 1

\n\n

所以基本上我得到了一个拥有一些 ingameData 的用户。他玩过的每场比赛都会有记录,因此我不需要像total[xyz]这样的数据,其中xyz可以是任何统计数据,因为我可以通过查询获取那些数据。我的问题出在另一边。我有很多用户获得了很多成就。

\n\n

到目前为止我学到的是,您应该始终在许多关系表中拥有 forigen 密钥,因此我需要添加另一个表,如我的 2 解决方案中所示:Link 2。这里我有,许多用户有一个成就表,并且许多成就属于一个成就表。我这里的连接有问题吗?和/或我的设计真的有缺陷吗?这是我的第一个真正的数据库设计,所以我有点无能为力

\n

小智 6

建立多对多模型的标准方法是引入链接表。您在用户和成就之间创建链接。

通常称为 UserAchievement,它包含两列 UserId 和 AchievementId,两者都位于各自的表中。

获得成就后,您只需添加另一个条目即可。

  • @Sumsar1812,你必须决定,一个成就是否可以多次获得......如果这是一个“每人一次”的问题,你可以使用两个FK - 但我不会......只要你这样做不要向此关系表添加更多信息(例如,赚取日期、特殊情况...),不需要 PK(但要在 FK 上创建索引!)。我会添加一个身份列作为 PK。你将来可能会需要它...... (2认同)
  • @Sumsar1812,属于这对夫妇(用户/成就)的信息必须放置在链接表中(或其下方)。“赚取日期”不能成为您的成就表的一部分。这是一种目录...索引的要点很简单:在查询数据时,您的“基”表和链接表之间会有很多很多连接。索引会加速这个过程...... (2认同)