Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase-一对多关系&;询问_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase-一对多关系&;询问

Javascript Firebase-一对多关系&;询问,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,听说Firebase已经有一段时间了,上周我决定开始一个小项目 我阅读了许多关于数据库结构的文章,并为我的数据库提出了两种解决方案: 案例1 表B通过所有者ID引用了表A { "A" : { "user-id-1" : { "name": "James", "number": "11111" }, "user-id-2" : { "name": "Rob",

听说Firebase已经有一段时间了,上周我决定开始一个小项目

我阅读了许多关于数据库结构的文章,并为我的数据库提出了两种解决方案:

案例1

B通过所有者ID引用了表A

{
    "A" : {
        "user-id-1" : {
            "name": "James",
            "number": "11111"
        },
        "user-id-2" : {
            "name": "Rob",
            "number": "11111"
        },
        ...
    },

    "B" : {
        "id-b-1" : {
            "something": "value1",
            "ownerId" : {
                "user-id-1": true 
            }
        },
        "id-b-2" : {
            "something": "value2",
            "ownerId" : {
                "user-id-2": true 
            }
        },
        "id-b-3" : {
            "something": "value3",
            "ownerId" : {
                "user-id-2": true 
            }
        },
        "id-b-4" : {
            "something": "value4",
            "ownerId" : {
                "user-id-1": true 
            }
        },
        ...
    }
}
案例2

A通过Bs数组对表B中的记录进行了引用

{
    "A" : {
        "user-id-1" : {
            "name": "James",
            "number": "11111"
            "Bs": {
                "id-b-1": true,
                "id-b-4": true,
                "id-b-7": true,
            }
        },
        "user-id-2" : {
            "name": "Rob",
            "number": "11111"
            "Bs": {
                "id-b-2": true,
                "id-b-3": true,
                "id-b-6": true,
            }
        },
        ...
    },

    "B" : {
        "id-b-1" : {
            "something": "value1",
        },
        "id-b-2" : {
            "something": "value2",
        },
        "id-b-3" : {
            "something": "value3",
        },
        "id-b-4" : {
            "something": "value4",
        },
        ...
    }
}
在表A中,记录的id与分配给登录用户user-id-1的id相同,因为我无法向firebase提供的用户对象添加更多属性

我想说的是,A和B之间的相关记录可以增长到数千条

因此,aB之间存在一对多关系

假设我想检索与用户id-1相关的所有Bs

  • 根据您的经验,在这种情况下,哪种数据库结构更好
  • 如何通过仅在数据库上运行一个查询来检索所有Bs对象
  • 我可以使用一种where子句,它允许我通过查看ownerId值来过滤Bs

  • 提前感谢您的回答。

    您的结构似乎描述了一种“多对多”的关系,但有不同的方面。因为在“案例1”中,所有者id可以包含多个id:

    "ownerId": 
    {
        "user-id-1": true, 
        "user-id-1": true 
    }
    
    在“情况2”中,两个“B”可以包含相同的Id:

    "user-id-1" : {
           "name": "James",
           "Bs": {
               "id-b-1": true
           }
       },
       "user-id-2" : {
           "name": "Rob",
           "Bs": {
               "id-b-1": true
           }
       }
    
    在这两种情况下,一个“A”拥有多个“B”,一个“B”拥有多个“As”

    为了使这个一对多,我建议使用“case1”并将对象更改为

    "id-b-4" : {
        "something": "value4",
        "ownerId" :  "user-id-1"
    }
    
    这将只允许项目的一个所有者。 在“情况2”中,没有任何东西可以强制每个“A”具有唯一的“b”。这也将使查询变得困难

    综上所述,在我看来,这两种情况都是可行的,这取决于您如何使用这些对象,因为Firebase的卖点是实时数据,您应该选择与您的用例更相关的数据。如果您正在观察“As”,请选择案例2。如果您正在观察“Bs”,请选择“案例1”。或者你可以两者兼用,只要能让你的生活更轻松