如何正确创建包含两名玩家字段的Games数据表?
解决Games表玩家关联的正确姿势
你的思路走偏了——用两个外键关联Users表完全合理,反而存玩家姓名是错误做法,问题出在这几点:
- 姓名不是唯一标识,重名会直接导致数据混乱;
- 用户修改姓名后,Games里的旧姓名不会同步更新,造成数据不一致;
- 靠姓名关联用户表查询效率低,还容易出现匹配错误。
给你两种靠谱的解决方案:
方案一:双外键直接关联(适合固定2人对局)
在Games表中设置player1_id和player2_id两个字段,都设为外键指向Users表的主键(比如user_id)。这种方式最贴合两人对局的业务逻辑,查询时能快速关联Users表获取玩家信息,还能通过外键约束保证数据的一致性和完整性(比如删除用户时可设置约束,避免出现无对应玩家的孤立对局记录)。
方案二:新增关联表(适合未来扩展多人对局)
如果以后可能支持3人及以上对局,可以新增一张Game_Players关联表,字段包括:
game_id(外键关联Games表主键)user_id(外键关联Users表主键)player_role(枚举类型,比如'player1'、'player2'、'spectator'等,标记玩家在对局中的角色)
这种方式扩展性更强,不用修改原Games表结构就能支持多种对局人数,但对于当前固定2人的场景,方案一的查询效率更高。
内容的提问来源于stack exchange,提问作者Andor Gunczer
相关产品推荐
相关产品推荐

