在Firebase

时间:2016-02-29 21:58:41

标签: json database firebase

我是Firebase的新手,并且不熟悉数据建模的最佳方式。我是一名网页设计师,他喜欢Web开发,并选择Firebase作为服务,因为它易于使用。

现在我将我的数据建模为:

[Firebase Root]
    |
    +--userId  (Firebase unique UID)
        |
        +--Projects
               |
               + ProjectId (Firebase unique key)
                      |
                      +--Images
                           |
                           +--ImageId  (Firebase unique key)
                                 |
                                 +--Comments
                                      |
                                      +--CommentId  (Firebase unique key)

我想知道这是不是很好的做法?它的可扩展性/性能如何?

看起来很臃肿,但我对如何解决这个问题几乎没有什么经验,我想在设计我的应用时考虑到最佳实践。

1 个答案:

答案 0 :(得分:5)

方式大问题。这实际上取决于您想要对数据做些什么。

虽然这个结构没有任何技术上的错误,但它的嵌套非常深,因此,从中获取数据可能会受到限制。

你真的想尽可能地平整你的数据 - 越平坦越好。

一种想法是让您的数据可重复使用。不确定这是否是你设置的一部分,但是这样:

import java.util.Scanner;
public class HW0604 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("How many types of salsa were sold: ");
        int x = input.nextInt();
        String salsa[] = salsa(x);
        int jars[] = (jars(salsa));
        int most = most(jars);
        int least = least(jars);
        int total = total(jars);
        print(salsa,jars,most,least,total);
    }
    public static String[] salsa(int x){
        Scanner input = new Scanner(System.in);
        String y[] = new String[x];
        for(int i=0;i<x;i++){
            int j=i+1;
        System.out.print("What is the name of Salsa number " + j +" : ");
        String salsa = input.nextLine();
            y[i]= salsa;
        }
        return y;
    }
    public static int[] jars(String x[]){
        Scanner input = new Scanner(System.in);
        int y[] = new int[x.length];
        for(int i=0;i<x.length;i++){
            System.out.print("How many jars of " + x[i] + " salsa were sold: "); 
            y[i] = input.nextInt();     
            }
        return y;
    }
    public static int total(int x[]){
        int y = 0;
        for(int i=0;i<x.length;i++){
            y = y + x[i];
        }
        return y;
    }
    public static int most(int x[]){
        int y = 0;
        int z = x[0];
        int j = 0;
        for(int i = 1;i<x.length;i++){
            if(x[i]>z){
                x[i]=z;
                y = j;
                j++;
            }   
        }
        return y;   
    }
    public static int least(int x[]){
        int y = 0;
        int z = x[0];
        int j = 0;
        for(int i = 1;i<x.length;i++){
            if(x[i]<z){
                x[i]=z;
                y = j;
                j++;
            }   
        }
        return y;   
    }
    public static void print(String salsa[],int jars[],int most,int least, int total){
        System.out.println("Salsa Sales Report");
        System.out.println();
        for(int i = 0; i<salsa.length;i++){
            System.out.println(salsa[i] + " sold: " + jars[i]);     
        }
        System.out.println();
        System.out.println("Total Jars sold: " + total);
        System.out.println("Most jars sold: " + salsa[most]);
        System.out.println("Least jars sold: " + salsa[least]);
    }
}

通过这种结构,您的项目可以通过引用将用户,图像和注释绑定到它上面,而且非常浅 - 易于获取数据。

您甚至可以将其扩展一下,并将多个用户分配到单个项目中。

如果您注意到,我将评论与项目和项目交叉链接到评论。这样,您可以轻松地查询注释节点关于特定项目(或由某个用户创建)以及在项目节点中加载时(在代码中),您可以直接访问有关该项目的注释。

这使您可以在多个项目中使用相同的图像。