Database 将关系数据库转换为couchDB(noSQL)

Database 将关系数据库转换为couchDB(noSQL),database,node.js,couchdb,structure,Database,Node.js,Couchdb,Structure,我目前正在开发一个与NodeJS&socket.io的网络聊天。 我需要一些帮助来将一些关系数据库结构转换成NoSQL。我对NoSQL世界非常陌生,这就是为什么我在这里问这个问题 我的目标是存储用户及其注册的房间,以便我可以列出特定房间中的所有用户。 在SQL中,我会这样做: --Users John Jack James --Room Javascript PHP CSS --Relation Jack | PHP Jack | CSS

我目前正在开发一个与NodeJS&socket.io的网络聊天。 我需要一些帮助来将一些关系数据库结构转换成NoSQL。我对NoSQL世界非常陌生,这就是为什么我在这里问这个问题

我的目标是存储用户及其注册的房间,以便我可以列出特定房间中的所有用户。

在SQL中,我会这样做:

--Users
John        
Jack        
James       

--Room
Javascript
PHP
CSS

--Relation
Jack  |  PHP
Jack  |  CSS
John  |  PHP
James | Javascript
然后
从类似“PHP”的文件室的关系中选择用户

我如何使用couchDB实现这一点? 我需要存储、列出和删除。 用户也是唯一的,但一个用户可以在多个房间中。 当用户断开连接时,应将其移到任何位置。 如果用户离开房间,应将其从该房间中移除。
如何选择文件室“PHP”中的所有用户?

我认为您不应该将信息保存在数据库中。文件室应该是内存中包含用户id数组的密钥。当用户进入房间时,将项目推到阵列,并在离开时弹出。这里仍然要说明一些概念,这是使用couchdb可以做的事情

像这样创建文档

 {
     "user" : "scope77",
      "room" : "php"
}
现在,由于您希望按用户所在的房间获取所有用户,因此可以创建一个按房间索引用户的视图,如下所示

    function(doc){
   if(doc.room)
   emit(doc.room,doc)
}
现在对该视图的调用将返回特定文件室中的用户列表

curlhttp://localhost:5984/db_name/design_name/view_name?key=“php”

就这样。这里需要记住的一点是,在关系模型中,您可能会为房间和用户创建单独的表,并引用它们以使数据规范化。在couchdb中,虽然可以链接文档,但通常更容易,甚至更倾向于使用重复的非规范化数据


因此,即使您可以为文件室创建单独的文档,也最好将文件室名称与用户文档一起存储

嗨,谢谢你的回答。是的,我想先把它存到内存中,但我在索引键时遇到了一些麻烦。因为我需要搜索用户名和房间。。如果我使用房间作为密钥,我无法在用户断开连接时删除用户,因为我必须搜索所有房间的密钥。但也许我想错了