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

时间:2014-04-01 14:29:12

标签: database node.js couchdb structure

我目前正在与NodeJS& amp; socket.io。 我需要一些帮助来将一些关系数据库结构转换为NoSQL。我对NoSQL世界非常陌生,这就是我在这里提出这个问题的原因。

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

在SQL中我会做这样的事情:

--Users
John        
Jack        
James       

--Room
Javascript
PHP
CSS

--Relation
Jack  |  PHP
Jack  |  CSS
John  |  PHP
James | Javascript

然后select user from relation where room like 'PHP'

如何使用couchDB实际执行此操作? 我需要存储,列出和删除。 用户也是独一无二的,但用户可以在多个房间。 当用户断开连接时,应该将其移除。 如果用户离开了房间,他应该从那个房间搬走。 如何选择房间内的所有用户" PHP"?

1 个答案:

答案 0 :(得分:0)

我认为您不应该将信息保存在数据库中。房间应该是内存中包含一组用户ID的密钥。当用户进入房间时,将项目推送到阵列并在他离开时弹出。仍然要说明一些概念,你可以用couchdb做什么

像这样创建文档

 {
     "user" : "scope77",
      "room" : "php"
}

现在,既然你想让所有用户都在他们所在的房间里创建一个视图,按照房间对用户进行索引

    function(doc){
   if(doc.room)
   emit(doc.room,doc)
}

现在,对此视图的调用将返回特定房间中的用户列表。

curl http://localhost:5984/db_name/design_name/view_name?key="php"

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

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