我开始在Firebase (和VueFire)中使用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“中的所有产品列表,以及”供应商-产品/供应商键“中的每个供应商的列表。
但是关于产品细节+供应商细节的视图呢?
做这件事的最好方法是什么?
谢谢你的帮助。
发布于 2017-11-02 22:10:33
我在我的应用程序中也有类似的问题,我在商业和地点之间有着相似的关系。我发现最好的解决方案是有一个商店为企业,一个商店的位置,和一个商店之间的连接。
就你而言:
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或当前选择的productKey筛选supplierKey列表,然后使用相反的键为您的视图提取正确的列表。
发布于 2021-04-18 22:19:10
虽然我尊重您使用Firebase的选择,但我会为您的情况选择SQL数据库,因为您将有很多关系。
艾登达尔扎的回答是一种方法,但从长远来看,这也是一种昂贵的方法。当您每次从supplierProducts查询时,当您想要显示链接的所有products和suppliers数据时,Firebase都会计算您的读取量。
假设一个供应商有300个产品,每次您想查询与该供应商相关的所有产品时,Firebase都会计算300条数据。
因此,我建议您将每个产品分配给供应商et,然后将产品数据复制到供应商数据:
"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供应商获取所有产品,您只需从(supplierKeyX/supplierKeyX)获取数据。Firebase将只将其计算为1读,而不是与供应商X连接的产品总数。
如果你担心你需要如何更新产品的所有参考资料,如果是前任的话。名字变了。我建议您观看这个讨论多路径更新的视频。
毕竟,去正规化是NoSQL数据库的核心,如果集合之间有很大的关系,那么维护NoSQL DB将非常困难。
https://stackoverflow.com/questions/45461681
复制相似问题