VueJs + Firebase

时间:2017-08-02 13:04:01

标签: firebase vue.js vuefire

我开始在Firebase(和VueFire)中使用VueJS,但我开始对如何构建数据感到困惑。

我的情况非常简单。

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

产品只能链接到一个供应商,供应商可以拥有多个产品。

我有不同的看法:

  • 所有供应商的所有产品清单
  • 一个供应商的产品清单
  • 与供应商合作的一种产品。

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

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”中每个供应商的列表

但是关于产品细节和供应商细节的视图呢。

最好的方法是什么?

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我的应用程序中存在类似的问题,我在企业和地点之间有类似的关系。我发现最好的解决方案是为商家提供商店,为地点提供商店,为他们之间的连接提供商店。

在你的情况下:

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 },
]

现在,您可以轻松过滤当前所选supplierProducts或当前所选supplierKey的{​​{1}}列表,然后使用相反的键为您提取正确的列表图。

答案 1 :(得分:0)

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

aidangarza 的答案是一种方法,但从长远来看,它也很昂贵。 Firebase 会在您每次从 supplierProducts 查询时以及当您想要显示链接的所有 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 关联的产品总数。

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

毕竟,非规范化是 NoSQL 数据库的核心,如果集合之间的关系太多,将很难维护您的 NoSQL DB。