3

我开始将 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”的每个供应商的列表

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

最好的方法是什么?

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

谢谢你的帮助。

4

2 回答 2

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的或当前选定的筛选列表productKey,然后使用相反的键为您的视图拉出正确的列表。

于 2017-11-02T22:10:33.027 回答
0

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

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

假设一个供应商有 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 的产品总数。

如果您担心如何更新产品的所有参考信息,例如前。名称改变。我建议您观看有关多路径更新的视频。

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

于 2021-04-18T22:19:10.587 回答