2014-01-28 55 views
1

我剛纔讀標題Denormalizing Your Data Is Normal的火力地堡的博客文章,我必須澄清要求。澄清有關火力地堡非規範化博客文章

我一直在考慮,直到考慮段落。具體來說,以下內容:

「評論的修改很簡單:只需在新內容中設置/評論下的評論值。對於刪除,只需刪除/評論中的評論 - 每當您遇到評論ID時其他地方在你的代碼中不/註釋存在,則可以假設它已被刪除,正常進行」

對於修改,爲什麼不我要修改下/鏈接和/用戶存儲重複的意見嗎?

對於缺失,我在我的理解是,一旦我刪除一條評論我必須有邏輯在我所有的讀邏輯交叉檢查糾正/萬一評論已被刪除?

謝謝!

回答

5

博客文章中詳細說明的結構不存儲重複評論。我們將意見存儲在/comments下,然後將name存儲在/links/users下。這些函數作爲實際評論數據的指針。

考慮示例結構從帖子...

{ 
    users: { 
    user1: { 
     name: "Alice", 
     comments: { 
     comment1: true 
     } 
    }, 
    }, 
    comments: { 
    comment1: { 
     body: "This is awesome!", 
     author: "user1" 
    } 
    } 
} 

注意實際的評論數據只存儲一次。

如果我們修改/comments/comment1,我們並不需要,因爲我們只存儲註釋的name/links/users,而不是實際發言內容在更新任何東西。

如果我們去除/comments/comment1,將刪除註釋數據的唯一存在。但是,我們仍然在/users/user1/comments下提到comment1這些「懸掛」的參考。

想象一下,我們刪除/comments/comment1,當我們嘗試加載Alice的評論時,我們可以看到並看到comment1不再存在。然後,我們的應用程序可以通過a)刪除引用或b)忽略引用而不嘗試顯示已刪除的註釋來做出相應的反應。

+0

對不起.set(true)位。現在完美。非常感謝你爲我澄清這一點! – Michael

+0

如果我將「comment1」重命名爲「comment2」,我該怎麼辦? (在我的情況下,用戶名可以重命名) –

+0

這裏的訣竅是使用一個不是用戶名的唯一用戶標識符。你可以使用ref.push()。name()來獲得一個類似於GUID的字符串,你可以用它來代替「user1」,那麼如果用戶名改變了,就改變該對象的用戶名字段而不是GUID。 –