【问题标题】:Map object hierarchy in swift to firebase将对象层次结构快速映射到 Firebase
【发布时间】:2018-04-02 11:54:03
【问题描述】:

我想将我的对象层次结构快速映射到 firebase,并且我正在尝试找出执行此操作的最佳模式。

我有一个父类 Parent 具有属性 propParent 和两个子类:Child1 具有属性 propChild1Child2 具有属性 propChild2

将其映射到 Firebase 架构的最有效和可维护的方法是什么。

class Parent {
    var propParent: String
}
class Child1: Parent {
    var propChild1: String
}
class Child2: Parent {
    var propChild2: String
}

【问题讨论】:

  • 问题中的术语有点模棱两可,不适用于 Swift 到 Firebase。在示例中,有一个 Parent 类和一个 SubClass Child1 和 Child2。父类没有有两个孩子。这是一个类到子类的关系,其中子类继承父属性(这是子类化功能的一部分)。在 Firebase 中,情况并非如此。没有类和子类,只有父节点和子节点,唯一的关系是路径.. /parent_node/child1 和 /parent_node/child2;没有属性的继承(因为没有)。

标签: swift firebase inheritance firebase-realtime-database nosql


【解决方案1】:

在 NoSQL 数据库中,几乎没有一个模型对所有用例都最有效。这是因为在 NoSQL 中,您经常需要为您想要在应用程序中实现的每个用例修改和扩展您的数据模型。为了更好地介绍该主题,我建议阅读NoSQL data modeling 并观看Firebase for SQL developers

也就是说,在最基本的情况下,您有一个双向的多对多关系,可以建模为:

users
  parent: {...}
  child1: {...}
  child2: {...}
parents: /* contains the parent for each user */
  child1: "parent",
  child2: "parent"
children: /* contains the children for each user */
  parent:
    child1: true,
    child2: true

用户只能有一个父节点这一事实在此建模为parents 下的每个节点都有一个值。每个用户可能有多个孩子被建模为children 下每个节点的集合。该集合被建模为所谓的索引:String: true 对的集合,其中值 (true) 是无意义的标记。

这使用了其他一些答案中的概念,因此我将在此处链接您以获取更多信息:

【讨论】:

  • 感谢您的回答。我不确定您在这里所说的“用户”是什么意思。另外,你如何存储继承的属性?在孩子或父母?这是这里的主要问题。这很令人困惑,特别是如果您在父级中有一个由子级继承的 id 属性。
  • 很抱歉误解了您的问题。您能否编辑您的问题以包含读取/写入数据的代码、您正在考虑的 JSON 以及您看到的问题?
  • 为了澄清更多,我正在寻找一种在 firebase 中为继承建模的模式,该模式与这种模式的关系数据库 martinfowler.com/eaaCatalog/singleTableInheritance.html 的目标相同
  • 我还没有设计 firebase 数据库,因为我遇到了这个问题:在 firebase 中用 OOP 语言建模继承的最佳方法是什么
  • 虽然我还没有得到完整的答案,但是您在答案中分享的 NoSQL 数据建模文章确实很棒。谢谢你
猜你喜欢
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 2016-11-25
相关资源
最近更新 更多