更新非规范化Firebase数据

时间:2014-09-25 00:32:33

标签: firebase denormalization

一些背景:

我的问题与this clarification question about denormalization非常相似,但我想稍微改变一下情况。

this blog post on denormalization注意事项部分中,Firebase用户会说以下有关更新数据的内容。

  
    

让我们讨论[非规范化数据结构]的一些后果。您需要确保每次创建一些数据(在本例中为注释)时,它都会放在正确的位置。

  

该示例包括三个路径,一个用于存储注释的数据,另一个用于存储指向该注释的指针。

  
    

...

         

评论的修改很简单:只需将/ comments下的评论值设置为新内容即可。要删除,只需删除/ comments中的注释 - 当您在代码中的其他地方遇到注释ID时,/ comments中不存在注释ID,您可以认为它已被删除并正常进行:

  

但这只有效,因为正如另一个问题的答案所说,

  
    

博客文章中详述的结构不存储重复的注释。我们会在/comments下存储一次评论,然后将这些评论的名称存储在/links/users下。这些函数用作指向实际注释数据的指针。

  

基本上,内容只存储在一个位置。

问题:

如果情况需要存储重复数据怎么办?在这种情况下,推荐的更新数据的方法是什么?

我尝试回答:

An answer to this question exists,但它是针对MongoDB的,我不确定它是否解决了Firebase中的问题。

我能想到的最明智的方法,仅供参考,如下。

我有一个帮助器类,我在Firebase中提供了一个路径目录,这有点类似于一个模式。此类具有包装Firebase方法的方法,以便我可以在我的模式指定的所有路径下执行写入和更新。辅助类迭代每个存在对象引用的路径,并在每个位置执行写入,更新或删除。在我的情况下,对于任何单独的操作,存在不超过4个路径,并且大多数具有2个。

实施例

想象一下,我有三个顶级键,用户,事件和事件 - 元数据。用户将图像发布到事件,事件和用户都拥有所有图像的嵌套记录。事件 - 元数据是我自己想要在页面上显示一堆事件的情况下的顶级键,但我不想随意删除数百个图像记录。

图片可以有字幕,因此,在更新图片的标题时,我应该更新这些路径:

new Firebase("path/to/eventID/images/imageID/caption"), 和
new Firebase("path/to/userID/images/imageID/caption")

我给我的助手类这些路径和一个包装器方法,所以无论何时更新标题,我都可以调用helperclass.updateCaption(imageObj,newCaptionData),并迭代地更新每条路径上的数据。

图像与包含eventID,userID和imageID的属性一起存储,以便可以正确填充这些路径的骨架。

这是解决此问题的推荐和/或适当方式吗?我做错了吗?

0 个答案:

没有答案