Firebase数据库结构审核

时间:2017-09-22 10:48:48

标签: firebase firebase-realtime-database ionic3

我设计了我的firebase数据库,如下所示。需要建议。并指导我哪个是离子2的最佳数据库...我对firebase完全是新的...提前谢谢..

我有月份,类别,实际预算金额和支出金额

[
    {
        "months": {
            "month_1":"january",
            "month_2":"Februrary",
            "month_3":"March",
            "month_4":"April"
        },
        "acutal": {
            "acutal_amount_1":"2000",
            "acutal_amount_2":"4000",
            "acutal_amount_3":"4000"
        }
        "spent": {
            "spent_amount_1":"1000",
            "spent_amount_2":"2000",
            "spent_amount_3":"3000"
        }
        "categories": {
            "category_1": {
                "categoryname":"Food",
                "amounts": {
                    "acutal_amount_2":true,
                    "spent_amount_3":true
                },
                "months": {
                    "month_1":true,
                    "month_3":true,
                    "month_4":true
                }
            }
        }
    }
]

2 个答案:

答案 0 :(得分:0)

处理firebase的关键是了解您需要在一个对象中保留哪些信息,以便在另一个树中查找有关它的更多信息。

虽然你可以这样做:

person:{
    name: "rob",
    gender: "male",
    children: {
       person: {
         name:"maria",
         gender:"female"
       },
       person: {
         name:"maria",
         gender:"female"
       }
   }
}

它可能不是最好的选择。你应该保持你的树像:

people: {

   person:{
      name: "rob",
      gender: "male",
      children: {
         name:"maria",
         name:"dasy"
      }
   },
   person: {
      name:"maria",
      gender:"female"
   },
   person: {
      name:"daisy",
      gender:"female"
   }
}

当您想知道孩子的性别时,请继续按照其名称进行过滤。

我想你应该读到这个:

https://firebase.google.com/docs/database/web/structure-data

他们在Firebase的文档中做得很好!

答案 1 :(得分:0)

因此,您需要了解Firebase的一件事是,您可以(并且必须)始终将所有内容保存在不同的节点中

因此,将所有数据放在一个用户节点中是一种不好的方法,如下所示:

userID
|_ months
   |_ feb_2017
      |_ expense_1
         |_ expense data...

因为在检索用户数据时,例如,您将检索其节点下的所有内容,并且在使用它几个月后,用户可能需要加载一次。

所以,我们知道我认为它是您运行Firebase结构的最佳方式。

用户节点:     用户     | _ user_uid        | _姓名:乔恩        | _ document:123456789        | _另一个数据......

用户节点只需要拥有用户数据,只需要您应用中的用户所需要的只是他的UID。他的UID,名称和其他所有内容都可以存储在本地,因此您不需要每次都在数据库中获取它。

user_months节点:

User_months
|_user_uid
   |_ month_uid
      |_ amount: 2000
      |_ spent: 1800
      |_ month: sep_2017
      |_ other important things in general for the month expenses

user_months会将用户预算花费的所有月份分组,并保存当月的所有其他重要数据,例如他的金额,花费的金额,有关月份以及您需要的任何其他内容。

检索数据以填充月份列表时,您可以custom pipes分隔并返回要在标题中使用的完整月份名称。您将使用month_uid和expense_uid(我将接下来显示)Firebase中push() method返回的uid。您还可以通过查询firebase.database().ref('User_months/' + user.id).orderByChild('month').equalTo('sep_2017')...

来检索一个月

expense_month节点:

Expenses_month
|_ user_uid
   |_ month_uid (same from the user month)
      |_ expense_uid (a new push())
         |_ category: 'food'
         |_ value: 34.55
         |_ date: 2017/09/27 - 11:30AM
         |_ description: ''

因此,在推新月时,您将获得关于push()回调的密钥并使用它来推送您当月的每笔费用。

如果您的类别节点类似于"用户或公司花在食物上的费用"我会惹你生气,但却要求那些食物是“食物”的孩子。并且他们在总计中添加值。

由于我不确切知道您的应用程序将如何运作,这是我能做的最好的事情,但总的来说,我认为这对您的应用程序非常有用。

希望这有帮助。