MySQL的两列的表作为主键

问题描述 投票:0回答:2

我有一个非常简单的想法:表中保留用户“成就”。它是如此简单:

user_id | achievement_id
    1   |    1
    1   |    2
    1   |    5
    2   |    2
    2   |    3

所有我需要的是用户ID和成就的ID,如果他已经得到了它。所有我需要选择是SELECT achievement_id WHERE user_id=x。因此,没有必要,我永远不会使用或知道它含有人工自动增量列。但是,设置一个主键是必需的,所以这个问题是 - 它是好主意,以这样的2列的表格,并设置两列的多列主键?我已经有一组3列的表,其中2主键,因为它是逻辑...唉,逻辑对我来说,但对于数据库?

mysql primary-key
2个回答
1
投票

是的,因为这样一组正键的规则是:“我只想要一个类型的记录拥有这组(A,B)键”。 - >你会因此无法添加两次“马里奥,achievement1”。

主键会则(PlayerID,AchievementID)。

如果你想加入这个成就一些信息(例如,当玩家拿到成绩),简单地做如:(PlayerID,AchievementID,日期)与PlayerID,AchievementID作为主键。

我希望这能帮到您。


2
投票

这些类型的表是常见的N-N关系的情况下,多值属性,弱实体。它改变了很多从它的造型,但是,是的,它是某些情况下,一个很好的解决方案。主键通常是列的关系。在你的情况下,将user_id说明和achievement_id。

© www.soinside.com 2019 - 2024. All rights reserved.