2016-04-24 23 views
1

私はPOSシステムで作業しており、私はバックエンドにFirebaseを使用しています。私が作成しなければならない報告書の1つは、「ほとんどの/少ない販売製品」です。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 
    } 
} 

を私が製品を見つけたときはいつも、すべての販売と数量を追加して、その結果を注文して、最も売れた商品を買ってしまいます。

私はこの問題を解決するには、2つのアイデアを持っている:

  1. は「soldTimes」のよう/products/にプロパティを追加し、数量に製品が販売されるたびに追加します。
  2. soldProductsのような第3のエンティティコールを作成し、クライアントが購入するたびに1つ1つにつき販売数量を数えます。

この2つのアプローチは有効ですか?私はFirebaseで何かを逃していますか?

ありがとうございました。

答えて

0

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