【问题标题】:How do I store information about a many-to-many relationship without the concept of a join table in Firebase?如何在 Firebase 中没有连接表概念的情况下存储有关多对多关系的信息?
【发布时间】:2016-02-08 13:16:22
【问题描述】:

我的 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
        }
      }
    }
  }
}

【问题讨论】:

    标签: firebase


    【解决方案1】:

    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'
      }
    }
    

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

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

    【讨论】:

    • 这种结构是不是很难查询到属于特定组的所有用户?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2023-03-08
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多