php与数据库的关系,php – 与NoSQL数据库的关系

博客讨论了在MongoDB中如何有效地建模多对多关系,对比了三种不同的设计选项:1) 用户文档内包含完整行,2) 用户文档仅包含外键,3) 其他表包含用户ID。作者关注于扩展性、更新效率和登录时获取完整用户对象的需求,寻求在游戏开发场景下最佳的NoSQL模型建议。
摘要由CSDN通过智能技术生成

这个问题适用于所有NoSQL和特别是mongoDB专家.我开始为项目设计关系数据库,但客户希望我们使用可以轻松扩展的数据库.为此,我们决定使用mongoDB.这些天我无法映射我的NoSQL关系模型.我有一个用户表,它与许多其他表有多对多的关系,如下图所示:

转换为mongoDB时我有几个选项:

选项1(用户中有完整的行):

users:{

_id:,

battles:{[battle1, battle2, ...]},

items:{[item1, item2, ...]},

locations:{[location1, location2, ...]},

units:{[unit1, unit2, ...]},

}

battles:{

}

locations:{

}

units:{

}

items:{

}

Option2(用户只有外键):

users:{

_id:,

battles:{[battle1_id, battle2_id, ...]},

items:{[item1_id, item2_id, ...]},

locations:{[location1_id, location2_id, ...]},

units:{[unit1_id, unit2_id, ...]},

}

battles:{

}

locations:{

}

units:{

}

items:{

}

选项3(其他表中的用户ID):

users:{

_id:,

}

battles:{

,

user:{[user1_id, user2_id, ...]}

}

locations:{

,

user:{[user1_id, user2_id, ...]}

}

units:{

,

user:{[user1_id, user2_id, ...]}

}

items:{

,

user:{[user1_id, user2_id, ...]}

}

选项1有很多重复,因为我们正在添加其他表的完整行.我在其中看到的一个问题是,如果某个项目或战斗更新,我们将不得不在用户表中找到它的所有出现并更新它们.但是这给了我们一个优势,即始终拥有一个完整的用户对象,可以在登录时将其传递给客户端应用程序.

选项2更具关系性,我们在users表中只有mongoIds的其他表.此选项的优点是更新战斗或项目没有太多成本,因为引用的行未被复制.另一方面,当用户登录时,我们必须找到所有引用的单位,战斗,项目和位置以响应完整的用户对象.

选项3与选项2相反,其中用户表的mongoIds保存在其他表中.这个选项对我没什么吸引力.

我真的很感激有人可以指导我或想出一个更好的模型.

编辑:

基本上这是一个mmorpg游戏,其中多个客户端应用程序将通过Web服务连接到服务器.我们在客户端有一个本地数据库来存储数据.我想要一个模型,服务器可以通过该模型响应完整的用户对象,然后更新或插入客户端应用程序上更改的数据.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值