MySQL两栏表作为主键

时间:2019-02-07 17:02:03

标签: mysql primary-key

我有一个非常简单的想法:保留用户“成就”的表。就这么简单:

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个是主键,因为这是逻辑...对我来说,但是对数据库来说,逻辑呢?

2 个答案:

答案 0 :(得分:2)

在n-n关系,多值属性和弱实体的情况下,这些类型的表很常见。它与建模有很大不同,但是是的,在某些情况下这是一个很好的解决方案。主键通常是列的关系。在您的情况下,它将是user_id和Achievement_id。

答案 1 :(得分:1)

是的,因为这样的一组n键的规则是:“我只想要一种具有该组(a,b)键的记录”。 ->因此,您将无法添加两次“ Mario,Achievement1”。

主键将是(PlayerID,AchievementID)。

如果您想添加有关此成就的一些信息(例如,当玩家获得成就时),只需执行以下操作:(玩家ID,成就ID ,日期)和玩家ID,成就ID 作为主键。

我希望这会对您有所帮助。