我知道Firebase不支持節點之間的JOIN(比如表之間的SQL Server),但這正是我需要完成的。這裏是我的情況:如何在Firebase中實現這種多對多關係?
我有一個交易節點在火力地堡就像這樣(我在哪裏,包括每筆交易的類別名稱):
"transactions":
{
"-Jruazf35b9a_gAVmZBe":
{
payee: "McDonalds", amount: "2.35", category: "Eating Out"
}
"-JruadR11b4a_aTVmZFi":
{
payee: "Walmart", amount: "78.12", category: "Household"
}
"-Jruazf35b9a_AgvNWCq":
{
payee: "CapitalOne", amount: "150.00", category: "Debt"
}
"-JryJF2c33ijbjbBc24p":
{
payee: "FootLocker", amount: "107.54", category: "Personal Blow"
}
"-Jrz0T-aL61Vuw4SOqRb":
{
payee: "Starbucks", amount: "2.88", category: "Eating Out"
}
}
而且我有這樣一個分類節點(我在哪裏,包括每個類別下的交易):
"categories":
{
"-Jruazf35b2a_gAVmZRy":
{
categoryname: "Eating Out",
categorytype: "Expense"
}
"transactions": {
"-Jruazf35b9a_AgvNWCq": {
payee: "McDonalds", amount: "2.35"
}
.
.
.
}
}
}
到目前爲止這麼好。我的數據是平坦的。我可以顯示具有類別名稱的交易列表(下面的屏幕截圖),我可以在每個類別的費用(截圖在此未顯示)中顯示每個類別下的交易列表。
我的問題是,如果我重新命名類別的變化不僅僅體現在日後的交易。過去的交易顯示舊的類別名稱。
這很明顯是由於我保存數據的方式。所以我的第一個邏輯反應是將類別唯一ID保存在事務節點中而不是類別名稱中。然而,這提出了一個挑戰,在我的SQL Server小腦袋裏,我需要一個JOIN,這樣我就可以得到事務列表,並且還包括每個事務的類別名稱。
我怎樣組織我的數據,這樣我可以:
- 顯示交易的列表,包括該類別的名稱(如它今天)
- 允許用戶重命名類別和演出變化反映了所有交易(過去和未來)
- 顯示每個類別下的交易清單(我覺得目前的辦法仍然是有效的)
可能重複? http://stackoverflow.com/questions/25712083/how-to-do-joins-on-firebase-tables是的,我認爲你最好的選擇是將類別分成它自己的類型。交易應與類別ID關聯,而不是類別名稱。然後,您不必保留類別中的交易清單。只是類別元數據,如ID,姓名等 – bbill
@bbill感謝您的快速回復,並且我同意類別ID應與交易相關聯。閱讀「Queries Part 1:...」博客文章,我仍不清楚如何通過解決方案來實現類似以下功能:_「Select tran.payee,tran.amount,cat.categoryname from交易tran 左加入類別cat.categoryid = tran。categoryid「_ –
從兩個列表中加入數據本質上是一個緩慢的操作,特別是在NoSQL數據庫上。我建議保留'categoryName'和**添加一個'categoryId'。這樣你就可以顯示當前的屏幕閱讀,但也*鏈接到類別。如何處理更新每個事務中的'categoryName',請參閱http://stackoverflow.com/questions/30693785/how-to-write-denormalized-data-in- firebase/30699277#30699277和https://medium.com/@collardeau/es6-promises-with-firebase-76606f36c80c –