我有一个非常简单的想法:保留用户“成就”的表。就这么简单:
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个是主键,因为这是逻辑...对我来说,但是对数据库来说,逻辑呢?
答案 0 :(得分:2)
在n-n关系,多值属性和弱实体的情况下,这些类型的表很常见。它与建模有很大不同,但是是的,在某些情况下这是一个很好的解决方案。主键通常是列的关系。在您的情况下,它将是user_id和Achievement_id。
答案 1 :(得分:1)
是的,因为这样的一组n键的规则是:“我只想要一种具有该组(a,b)键的记录”。 ->因此,您将无法添加两次“ Mario,Achievement1”。
主键将是(PlayerID,AchievementID)。
如果您想添加有关此成就的一些信息(例如,当玩家获得成就时),只需执行以下操作:(玩家ID,成就ID ,日期)和玩家ID,成就ID 作为主键。
我希望这会对您有所帮助。