【问题标题】:VueJs + FirebaseVueJs + Firebase
【发布时间】:2018-01-09 17:29:41
【问题描述】:

我开始将 VueJS 与 Firebase(和 VueFire)一起使用,但我开始为如何构建数据而苦恼。

我的情况很简单。

我有一份供应商清单和一份产品清单。

一个产品只能关联一个供应商,一个供应商可以有多个产品。

我有不同的看法:

  • 所有供应商的所有产品列表
  • 一个供应商的产品列表
  • 供应商提供的一种产品的详细信息。

对于第一个和第二个视图,我对以下结构没有任何问题

products
    - productKey1
        - name : Product1
    - productKey2
        - name : Product2
supplier-products:
    - supplierKey1
        - productKey1
             - name : Product1
    - supplierKey2
        - productKey2
             - name : Product2
supplier:
    - supplierKey1
         - name : Supplier1
    - supplierKey2
         - name : Supplier2

我可以轻松地显示来自“/products”的所有产品列表以及来自“supplier-products/supplierKey”的每个供应商的列表

但是,产品详细信息 + 供应商详细信息的视图呢?

最好的方法是什么?

  • 将供应商信息添加到每个产品中?
  • 在产品中添加一种外键?
  • 另一种方法?

感谢您的帮助。

【问题讨论】:

    标签: firebase vue.js vuefire


    【解决方案1】:

    我在我的应用程序中遇到了类似的问题,其中企业和位置之间的关系类似。我发现最好的解决方案是为企业建立一个商店,为位置建立一个商店,并为它们之间的连接建立一个商店。

    在你的情况下:

    products: [
      { productKey: 1, name: 'Product1' },
      { productKey: 2, name: 'Product2' },
    ],
    suppliers: [
      { supplierKey: 1, name: 'Supplier1' },
      { supplierKey: 2, name: 'Supplier2' },
    ],
    supplierProducts: [
      { productKey: 1, supplierKey: 1 },
      { productKey: 2, supplierKey: 2 },
    ]
    

    现在,您可以通过当前选中的supplierKey 或当前选中的productKey 轻松过滤supplierProducts 列表,然后使用相反的键为您的视图拉出正确的列表。

    【讨论】:

      【解决方案2】:

      虽然我尊重您选择使用 Firebase,但我会为您的案例选择 SQL 数据库,因为您将拥有很多关系。

      aidangarza 的答案是一种方法,但从长远来看它也很昂贵。每次您从 supplierProducts 查询时,Firebase 都会计算您的读取次数,然后当您想要显示所有链接的 productssuppliers 数据时。

      假设供应商有 300 种产品,每次您要查询与该供应商关联的所有产品时,Firebase 都会计算 300 次读取。

      因此,我建议您将每个产品分配给供应商,然后将产品数据复制到供应商数据:

      "products": {
          "productKey1": {
            "name": "Product1",
            "supplierKey": "supplierKey1"
          }
      }
      
      
       "supplier-products":{
          "supplierKey1":[
            {"id":"productKey1", "name" : "Product1"}
          ],
          "supplierKey2":[
            {"id":"productKey4", "name" : "Product4"},
            {"id":"productKey10", "name" : "Product10"},
            {"id":"productKey15", "name" : "Product15"}
          ],
          "supplierKey3":[
            {"id":"productKey5", "name" : "Product5"}
          ]
      }
      

      现在,如果您想从 X 供应商获取所有产品,您只需从 (supplier-products/supplierKeyX) 获取数据。 Firebase 只会将此计为 1 次读取,而不是与供应商 X 关联的产品总数。

      如果您担心如何更新产品的所有参考信息,例如 for ex。名称改变。我建议您观看此 video 讨论多路径更新。

      毕竟,非规范化是 NoSQL 数据库的核心,如果集合之间的关系太多,维护你的 NoSQL 数据库会非常困难。

      【讨论】:

        猜你喜欢
        • 2020-10-21
        • 2017-11-05
        • 2019-01-13
        • 2017-02-04
        • 2019-01-28
        • 2021-01-25
        • 1970-01-01
        • 2020-06-10
        • 2020-02-01
        相关资源
        最近更新 更多