【问题标题】:How to maintain join node in Firebase db如何在 Firebase db 中维护连接节点
【发布时间】:2018-03-02 18:36:29
【问题描述】:

对不起,这个神秘的标题。 我是 Firebase 数据库的新手。我将它与 AngularFire (ng4) 一起使用。 我正在一个关于种马(马)的网站上工作。每匹种马都有一个主人,一个主人可以拥有多匹种马。每匹种马还注册有一个或多个血统登记簿,一个血统登记簿有多个种马。 我现在有 3 个顶级节点:种马、所有者和 studbooks。

我有一个表格可以添加或编辑种马。此表格具有选择框,其中包含所有可能的所有者和所有可能的谱系。当我保存种马时,整个所有者节点和 studbook 节点都保存在种马节点中。这部分工作正常。

一个新页面将显示血统簿及其所有种马的详细信息。在这部分,我很挣扎。我读了很多书,我认为我需要一个连接节点 (studbook_stallions),我在其中放入了 studbook 密钥和属于该 studbook 一部分的所有种马密钥(或整个项目?)。到目前为止,我是对的?

添加种马时,我也可以在连接节点中添加一个条目,但是修改种马时呢?我是否首先需要检查种马是否已经在连接节点中?这不会影响性能吗?

这是我添加种马的方法:

addStallion(alias: string, formValues: Stallion): any {
  formValues.updated = firebase.database["ServerValue"]["TIMESTAMP"];
  return this.af.database.ref().child("stallions/" + alias).set(formValues);
}

这是我的更新种马方法:

updateStallion(alias: string, formValues: Stallion) {
  formValues.updated = firebase.database["ServerValue"]["TIMESTAMP"];
  this.af.object("stallions/" + alias).update(formValues);
}

如何更改这些方法以同时修改连接节点(studbook_stallions)?

还有一个类似的问题。我现在在我的种马节点中拥有整个所有者节点。更新所有者时如何更新此所有者节点? 这是我的更新所有者方法:

updateOwner(alias: string, formValues: Owner) {
  formValues.updated = firebase.database["ServerValue"]["TIMESTAMP"];
  this.af.object("stallions/" + alias).update(formValues);
  // Also update in stallion node:
  // ?????????????
}

[编辑]

这是我的种马节点:

这是我的所有者节点:

此时,种马节点拥有完整的所有者数据,但所有者节点还没有完整的种马数据。我很快就会改变。

我还没有为 studbook 建模,因为我不确定最好的工作流程是什么。我的血统书会有多匹种马。当我更新我的种马时,我还需要更新 studbook 节点中的相同种马。但是我怎么知道 studbook 节点中的哪匹种马呢?反过来也是一样。我更新了我的 studbook,现在我需要更新几个 Stallion 节点中的 studbook。

【问题讨论】:

    标签: firebase firebase-realtime-database angularfire2 nosql


    【解决方案1】:

    在此处发布您的数据库结构将有助于可视化您的数据库,但我认为您在这里寻找的是同时更新多个子节点,这就是您将如何做到的:

    var childUpdates = [];
    
    childUpdates[ '/stallions/' + yourStallionID ] = someDataHere;
    
    childUpdates[ '/stallionOwners/stallions/' + yourStallionID ] = someOtherDataHere;
    
    firebase.database().ref().update(childUdates);
    

    这将确保两个子节点同时更新。

    【讨论】:

    • 感谢您的回答。一次更新多个子节点将是我的下一个问题;)我的主要问题是如何知道要更新哪些节点。当我更新我的血统簿或所有者时,我需要更新哪匹种马?我编辑了我的问题并添加了数据库结构。
    • 没问题!要做到这一点,您只需要跟踪您想要更新的种马 ID。你如何定义你的 Stallion 对象?
    猜你喜欢
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多