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 が必要になるという課題があります。
次のことができるようにデータを構造化するにはどうすればよいですか。
- カテゴリの名前を含むトランザクションのリストを表示します (現在のように)
- ユーザーがカテゴリの名前を変更し、すべてのトランザクション (過去および将来) に反映された変更を表示できるようにする
- 各カテゴリの下のトランザクションのリストを表示します (現在のアプローチはまだ有効だと思います)