Database design 条令2游戏扑救模式

Database design 条令2游戏扑救模式,database-design,doctrine-orm,Database Design,Doctrine Orm,我正在寻找一种合理的对象关系设计,用于在单人游戏中存储给定玩家的默认数据变化(在线保存为所有玩家存储的数据) 我正在开发一个网络游戏,其中有一个“节点”树,表示房间和其中的对象 玩家可以移动这些对象,所以我需要保存特定于该玩家的节点状态 一个常见的游戏操作是获取节点的子节点。(例如:房间中的所有对象) 在过去,我使用了两个表并合并 节点: 身份证,家长身份证。。。特定于节点的数据。。。(默认设置和父级) 节点状态: id、玩家id、节点id、父id(父覆盖) 这将存储默认树和播放器之间的差异,并

我正在寻找一种合理的对象关系设计,用于在单人游戏中存储给定玩家的默认数据变化(在线保存为所有玩家存储的数据)

我正在开发一个网络游戏,其中有一个“节点”树,表示房间和其中的对象

玩家可以移动这些对象,所以我需要保存特定于该玩家的节点状态

一个常见的游戏操作是获取节点的子节点。(例如:房间中的所有对象)

在过去,我使用了两个表并合并

节点: 身份证,家长身份证。。。特定于节点的数据。。。(默认设置和父级)

节点状态: id、玩家id、节点id、父id(父覆盖)

这将存储默认树和播放器之间的差异,并使用Coalesce为该播放器提取差异

使用Doctrine2,我可以通过存储库方法、本机SQL和结果集映射来实现这一点,但肯定有更好的方法吗

其他人如何为多个玩家保存游戏状态?为每个玩家克隆整棵树是否更有意义?(当然,这将使使用第2条原则更加容易)

SELECT * FROM node LEFT JOIN node_state ON (node_state.player_id = $player_id
AND node.id = node_state.node_id)
WHERE COALESCE(node_state.parent_id, node.parent_id) = {$node_id}
OR COALESCE(node_state.parent_id, node.parent_id) = 0