【问题标题】:Modeling data in firebase using joins - many-to-many relationship使用连接在firebase中建模数据 - 多对多关系
【发布时间】:2014-01-01 16:13:06
【问题描述】:

我对新的 firebase.util 包感兴趣,它允许您加入数据(路径),以及我如何能够继续使用 UML 建模,因为我已经习惯了多年.我可以看到以这种方式建立一对多关系是多么容易。由于 firebase 是分层的,因此组件关系非常自然。

聚合关系可以避免,因为我们都习惯于在 javascript 中这样做 - 在我看来,强制聚合关系似乎不会成为使用 firebase 对成功项目进行建模的障碍...

我的问题是是否有人尝试过 |成功了|可以展示如何表示多对多关系的示例,可能通过加入连接路径本身。

如果我对这个问题没有太大兴趣,我可能会发布我自己的试错结果...

谢谢

【问题讨论】:

  • 这个问题是非常开放的,也许如果你有一个具体的例子,你想为多对多关系建模,我们可以提供帮助吗?
  • 多对多关系的一个例子是组和成员。例如。一个人可以是多个群组的成员,而一个群组可能有多个成员。
  • Sorry Anant,进一步的研究让我相信,虽然联接是 firebase 的一项强大的新功能并且有许多很棒的新用途,但 firebase 中的数据无法实现多对多关系这次没有复制数据(如果要求是双向的)。我的想法是我可以将关系分离成一个单独的对象并使用连接遍历这些关系。是的,您可以通过连接来做到这一点,但它是单向的。为了使它成为双向的,我们需要某种形式的引用类型(除了原语、数组和对象),它不是对象字面量。
  • 而且,我们需要拥有多个键的能力...
  • 是的,你是对的 - 多对多关系需要对数据进行非规范化,这些博文中有更多信息:firebase.com/blog/2013-04-12-denormalizing-is-normal.htmlfirebase.com/blog/2013-10-01-queries-part-one.htmlfirebase.com/blog/2014-01-02-queries-part-two.html

标签: oop firebase


【解决方案1】:

我尝试使用复合键。例如,用户可以是许多房间的成员。我们需要两个查询:房间成员列表和用户房间列表。所以我们只能有一个收藏室-用户,其中密钥是这样构建的:

id = [roomId, userId].join()

事实上,我不确定这是否是一个好的模式。它似乎可以阻止安全规则设置https://stackoverflow.com/a/17431390/233902,甚至可能会影响性能。

所以可能需要两个甚至更多的集合。两个用于多对多,第三个用于关系元数据。正如我所考虑的,集合应该针对查询进行优化,因此复合键是 Firebase 的反模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2021-05-03
    • 2012-06-16
    • 1970-01-01
    • 2018-05-17
    相关资源
    最近更新 更多