如何在Firebase中没有连接表的概念的情况下存储有关多对多关系的信息?

时间:2016-02-08 04:48:43

标签: firebase

我的Firebase应用包含群组和用户之间的多对多关系。我想在用户加入群组时存储有关的信息 - 如果没有联接表的概念,我该怎么做?

我使用此Firebase示例作为参考: https://examples-k9xbyc0bhfwtlkdgfhs.firebaseio-demo.com/

你建议做这样的事吗?

app: {
  groups: {
    group1: {
      members: {
        user1: {
          joinDate: '2016-01-22T02:43:27.817Z',
          isCreator: true
        },
        user2: {
          joinDate: '2016-01-23T02:43:27.817Z',
          isCreator: false
        }
      }
    }
  },
  users: {
    user1: {
      firstName: 'Adam',
      lastName: 'Soffer',
      groups: {
        group1: {
          joinDate: '2016-01-22T02:43:27.817Z',
          isCreator: true
        }
      }
    },
    user2: {
      firstName: 'Joe',
      lastName: 'Shmoe',
      groups: {
        group1: {
          joinDate: '2016-01-23T02:43:27.817Z',
          isCreator: false
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:3)

官方structuring data指南是帮助进行此类概念设计的绝佳资源。

  

一般情况下,最好谨慎使用嵌套数据并尽可能平整数据。

您可以用更平坦的结构表示相同的特征。

membership: {
  user1: {
    group1: { joined: '2016-01-23T02:43:27.817Z' },
    group2: { joined: '2016-01-23T02:43:27.817Z' }
  }
},

groups: {
  group1: {
    creator: user1
  },
  group2: {
    creator: user1
  }
},

users: {
  user1: {
    firstName: 'Adam',
    lastName: 'Soffer'
  }
}

我们使用会员对象来管理用户和组的多对多关系,允许我们删除组和用户字段中的大量嵌套。

假设每个组只有一个创建者,也可以将其移动到组对象中,这样我们就可以保证只能有一个创建者并从用户对象中删除一些非规范化数据。