我开始在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”中每个供应商的列表
但是关于产品细节和供应商细节的视图呢。
最好的方法是什么?
感谢您的帮助。
答案 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
查询时以及当您想要显示链接的所有 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 关联的产品总数。
如果您担心如何更新产品的所有参考资料,例如。名称更改。我建议您观看讨论多路径更新的video。
毕竟,非规范化是 NoSQL 数据库的核心,如果集合之间的关系太多,将很难维护您的 NoSQL DB。