Firebase数据结构想法

问题描述:

我正在POS系统中工作,并且我正在使用Firebase作为后端。我需要做的一个报告是“大多数/少销售的产品”。Firebase数据结构想法

我有我的结构是这样/sales/

"1234": { 
    "date": 1234567890, // timestamp 
    "products": { 
     "coca-cola-clasica-355-ml": { 
      "quantity": 3, 
      "salesPrice": 500, 
      "costPrice": 400 
     }, 
     "coca-cola-clasica-600-ml": { 
      "quantity": 6, 
      "salesPrice": 900, 
      "costPrice": 700 
     } 
    }, 
    "subtotal": 6400, 
    "total": 6400 
}, 
"5678": { 
    "date": 1234567890, // timestamp 
    "products": { 
     "taqueritos-chile-picante": { 
      "quantity": 2, 
      "salesPrice": 100, 
      "costPrice": 80 
     }, 
     "coca-cola-clasica-600-ml": { 
      "quantity": 4, 
      "salesPrice": 900, 
      "costPrice": 700 
     } 
    }, 
    "subtotal": 200, 
    "total": 200 
} 

而且/产品/:

{ 
    "coca-cola-clasica-355-ml": { 
     "costPrice": 350, 
     "name": "Coca Cola Clasica 355 ml", 
     "salesPrice": 500, 
     "stock": 99, 
     "supplier": "femsa-coca-cola", 
     "tax": false, 
    }, 
    "coca-cola-clasica-600-ml": { 
     "costPrice": 700, 
     "name": "Coca Cola Clasica 600 ml", 
     "salesPrice": 900, 
     "stock": 99, 
     "supplier": "femsa-coca-cola", 
     "tax": false, 
    }, 
    "taqueritos-chile-picante": { 
     "costPrice": 80, 
     "name": "Taqueritos Chile Picante", 
     "salesPrice": 100, 
     "stock": 500, 
     "supplier": "dinant", 
     "tax": true 
    } 
} 

所以,如果我要得到“最畅销的产品”现在我不得不遍历所有的销售和添加数量,每次我找到一个产品,然后订购结果,并得到最卖的产品,这很糟糕。

我有两个思路来解决这个:

  1. 一个属性添加到/products/像“soldTimes”和每一个产品销售的时间加量。
  2. 创建第三个实体电话,如soldProducts,并计算每次客户购买时每个产品的销售数量。

这2种方法有效吗?我在Firebase中丢失了什么?

感谢您的帮助。

在NoSQL中,通常最终会根据应用程序想要使用它的方式来建模数据。因此,如果您的应用需要列出销售量最高的产品,则应考虑将该列表存储在数据库中。

productLeaderboard: { 
    coca-cola-clasica-355-ml: { 
     totalQuantity: 3, 
     totalSalesPrice: 500, 
     totalCost: 400, 
     totalProfit: 100 
    }, 
    ... 
} 

现在找到最畅销的产品,你可以简单地做:

ref.child('productLeaderboard').orderByChild('totalQuantity').limitToFirst(3).on(... 
+0

谢谢!这绝对是更好,更快的阅读。 – fmontes