【发布时间】:2015-04-25 23:41:30
【问题描述】:
我在做一个游戏,玩家一个一个地移动。我有以下表格:
╔═════════╗
║ players ║
╠═════════╣
║ id ║
║ name ║
╚═════════╝
╔════════════╗
║ games ║
╠════════════╣
║ id ║
║ started_at ║
╚════════════╝
╔═════════════╗
║ game_player ║
╠═════════════╣
║ id ║
║ game_id ║
║ player_id ║
║ turn ║
╚═════════════╝
现在,我想添加moves 表来跟踪游戏的历史。我不确定哪种方式更好:
1) 像这样将moves 与数据透视表game_player 连接起来:
╔════════════════╗
║ moves ║
╠════════════════╣
║ id ║
║ game_player_id ║
║ made_at ║
╚════════════════╝
2) 像这样复制 game_id 和 player_id 对:
╔═══════════╗
║ moves ║
╠═══════════╣
║ id ║
║ game_id ║
║ player_id ║
║ made_at ║
╚═══════════╝
第一个解决方案使我的数据更简洁,如果我使用外键,则无法放置不存在的游戏玩家对。
第二种解决方案使用 ORM 更容易处理。
这个问题应该如何解决?有什么方法可以轻松地使用 ORM 的第一个想法,也许是通过为游戏玩家对创建另一个实体,例如 Participation?你们会怎么做呢?
【问题讨论】:
-
两种方案都没有太多的关系完整性。请确认:这是一个两人(不是多人)游戏,玩家之间的动作交替。
-
@PerformanceDBA 这是多人游戏,1 人最多 4 人,但我不想限制为 4 人,因为我将来可能会有新的想法。
-
请查看答案并发表评论。
标签: database orm foreign-keys relational-database foreign-key-relationship