2016-04-24 5 views
1

Ich arbeite in einem POS-System und ich verwende Firebase für das Back-End. Einer der Berichte, die ich machen muss, ist "meistverkaufte Produkte".Firebase Datenstruktur Ideen

Ich habe meine Strukturen wie diese /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 
} 

und/products /:

{ 
    "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 
    } 
} 

Also, wenn ich die "am meisten verkauften Produkte" erhalten haben jetzt muss ich über iterieren alle Verkäufe und addieren Quantität jedes Mal, das ich ein Produkt fand, nach dieser Bestellung die Resultate und die meisten verkauften Produkte erhalten und das saugt.

Ich habe zwei Ideen dieses Problem zu beheben:

  1. hinzufügen Unterkunft um diese der /products/ wie „soldTimes“ und fügen Menge jedes Mal, das Produkt verkauft wird.
  2. Erstellen Sie einen dritten Entitätsanruf wie soldProducts und zählen Sie die Menge der verkauften Produkte für jedes Mal, wenn ein Kunde einen kauft.

Ist einer dieser 2 Ansatz gültig? Ich vermisse etwas in Firebase?

Danke für die Hilfe.

Antwort

0

In NoSQL modellieren Sie normalerweise Ihre Daten für die Art und Weise, wie Ihre Anwendung sie verwenden möchte. Wenn Ihre App also eine Liste der meistverkauften Produkte haben soll, sollten Sie diese Liste in der Datenbank speichern.

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

nun die am meisten verkauften Produkte zu finden, können Sie einfach tun:

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

Dank! Das ist definitiv besser und schneller zu lesen. – fmontes