NoSQL& Firebase:存储&迭代多对多的关系

时间:2016-10-18 18:20:16

标签: firebase firebase-realtime-database nosql

我的数据库中有2个主要节点:用户项目

每个用户都可以分配到不同角色的多个项目。

在阅读了如何构建多对多关系后,我最终认为它应该是这样的:

users : {
  user1 : {
    name : blah,
    email : a@a.com,
    projects : {
      projects1key : true,
      projects2key : true
    }
  }
}

projects : {
  project1key : {
    name : blahserve,
    category : blahbers,
    providers : {
      user1 : true,
      user7 : true
    }
  }
}

我无法弄清楚的是我如何为每个用户分配一个角色。

  1. 如果我需要向项目中的每个用户添加role(字符串),新数据库结构应该是什么样的?

  2. 如果我错了,请纠正我:当我将用户分配给项目时,我需要创建2个新节点:我的用户节点中的projectkey节点和projectkeynode中的userkey节点。是吗?

  3. 更新

    由于这里给出的答案是正确的,但不确定它是否适合我的用例,这是我的用例:

    • (1)迭代所有项目用户的列表
    • (2)迭代所有成员项目的列表
    • (3)当用户访问项目并给予他许可时,检查项目角色取决于他的角色
    • (4)“项目 - >用户”页面允许您向现有项目添加新用户。用户角色与用户一起以相同的形式选择。用户必须具有项目中的角色。

1 个答案:

答案 0 :(得分:2)

或者只是简单地你可以一起添加一个不同的节点: -

  

如果我需要向项目中的每个用户添加角色(字符串),新数据库结构应该是什么样的?

users : {
 user1 : {
  name : blah,
  email : a@a.com,
    }
  },

projects : {
  projectKey1 : {
    name : blahserve,
    category : blahbers,
    }
},

projectsLists:{

  user1 :{
    projectKey1 : true,
    projectKey2 : true 
    }
}, 

projectsRoles :{

  projectKey1 : {
     user1 : provider,
     user2 : editor,
     ....
    }
  }
  

如果我错了,请纠正我:当我将用户分配给项目时,我需要创建2个新节点:我的用户节点中的projectkey节点和projectkeynode中的userkey节点。是吗?

始终更喜欢更扁平的数据库结构。因此,使用此结构,您只需添加或更新用户的角色一次。

相关问题