Как структурировать товары / заказы в модели пожарного депо? - PullRequest
0 голосов
/ 15 апреля 2020

Итак, я создаю приложение vue. js и использую Firebase в качестве внутреннего сервиса. Теперь я получил некоторые знания о том, как можно хранить данные в пожарном депо, но я спрашиваю, какой способ лучше всего подойдет для моего случая. В определенный момент в приложении пользователи могут выполнять заказы, где у каждого заказа есть определенные продукты. Каждый заказ будет иметь в среднем, скажем, 5/6 товаров, которые являются объектами. Какой из следующих способов структурирования этих данных вы бы предложили?

  1. упорядоченный продукт в качестве коллекции верхнего уровня: здесь каждый документ в этой коллекции будет иметь ссылку на заказ. Поскольку мне нужны только продукты, относящиеся к одному заказу, я считаю, что это был бы плохой выбор. Отношение несколько исчезло?

  2. Подколлекция: здесь продукты могут быть подколлекцией заказов. Хорошая иерархия / структура, но увеличивает чтение документа по сравнению со встроенным массивом.

  3. массив: продукты встроены в массив в документ заказа. Это то, что я имею сейчас, и это самый простой подход к созданию.

Я думал, что поскольку количество продуктов в заказе будет довольно небольшим, я просто использую множество продуктов в своем документе заказа. Но, конечно, я могу ошибаться или пропустить некоторые важные вещи. Я был бы признателен за любую помощь / ссылки на этот пример из реальной жизни о том, как структурировать эти продукты для заказа.

Спасибо!

1 Ответ

2 голосов
/ 15 апреля 2020

Возможная схема для сценария использования вашего приложения:

Firestore-root
   |
   --- merchants (collection)
   |     |
   |     --- merchantId (document)
   |           |
   |           --- //merchant details
   |
   --- orders (collection)
         |
         --- orderId (document)
               |
               --- merchantId: "LongMerchantId"
               |
               --- products (array)
                     |
                     --- 0
                     |   |
                     |   --- productName: "Bacon"
                     |   |
                     |   --- productPrice: 5
                     |
                     --- 1
                         |
                         --- productName: "Eggs"
                         |
                         --- productPrice: 12

Используя эту структуру, вы можете легко запросить все заказы одного продавца:

db.collection("orders").whereEqualTo("merchantId", "LongMerchantId");

Чтобы получить все товары определенного заказа, просто используйте следующую ссылку:

DocumentReference orderIdRef = db.collection("orders").document("orderId");

Теперь вы можете присоединить слушателя к этой ссылке, получить документ и использовать список товаров. Вы не указали используемый язык программирования, поэтому я привел вам примеры в Android. Преобразовать их на языке, который вы используете, очень просто. Для Android, чтобы получить список пользовательских объектов, пожалуйста, проверьте следующую статью:

Еще один момент, на который следует обратить внимание: приведенное выше решение будет работать только , если вы уверены, что продукты в заказе уместятся в 1 МБ (1 048 576 байт). . Если вы не уверены, вместо массива вы должны использовать вложенную коллекцию. Если вы хотите быть на 100% безопасным, вы всегда можете проверить максимальную квоту, используя FirestoreDocument- Android library .

...