2016-04-24 1 views
1

Я работаю в 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?

Спасибо за помощь.

ответ

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