Лучший способ структурирования документов в Cloud Firestore (базы данных NoSQL)? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь реализовать БД Firestore Cloud, но я новичок в базах данных NoSQL.

Я хочу знать, как лучше всего организовать эти наборы в коллекции / документы:

Iесть ресторанов , которые имеют различные продукты и бронирования .Каков наилучший подход для структурирования этих наборов данных в Firestore DB?

Это правильный подход:

Restaurant1 (Collection)
----> Foods (document) 
----> Reservations (document)

Ответы [ 3 ]

1 голос
/ 20 сентября 2019

Я думаю, что хранение Foods и Reservation в качестве коллекций высшего уровня в конечном итоге даст вам больше гибкости.

Достаточно просто взять restaurantID и вставить его в каждый документ в этих коллекциях, поэтому я не будуЯ не думаю, что вы должны вкладывать их в коллекцию Restaurants.Это личное предпочтение работать с большим количеством вложенных коллекций.

Я думаю, что оптимальная структура:

Restaurants (collection)
--- Name: Chipotle
--- ID: restaurant1
--- Foods: [{ Name: foodItem1 }, { Name: foodItem2 }]

Foods (collection)
--- Name: foodItem1
--- Ingredients: abc
--- Nutrition Facts: xyz

Reservations (collection)
--- User: user1
--- Restaurant: { id: restaurant1, name: Chipotle }
--- Time: 3pm

Users (collection)
--- ID: user1

Что вы заметите, так это наличие некоторой избыточной информации.Это хорошо, так что если вы запросите все предварительные заказы, вы получите название ресторана, удостоверение личности и т. Д., Что вам, скорее всего, нужно.Вы обнаружите, что хотите хранить данные несколько раз, и для меня это выглядит как хорошая структура.

С этой структурой вы можете очень легко просто позвонить:

All reservations by user X илиAll foods meeting nutrition limits of Y

Вместо запроса collectionGroup, который вызвал бы список резервирований для всех коллекций ресторанов.Вам не всегда захочется запрашивать ваши бронирования по ресторанам, может быть, вы хотите получить данные по пользователю или времени и т. Д.

1 голос
/ 21 сентября 2019

Согласно вашему комментарию:

руководство ресторана должно иметь возможность видеть свое бронирование вместе с другими бронированиями от других клиентов в списке.И каждый клиент также должен видеть свою историю бронирования.

Я постараюсь предоставить вам схему, которая поможет вам очень легко получить эти данные.

Firestore-rrot
   |
   --- users (collection)
   |    |
   |    --- uid (document)
   |    |    |
   |    |    --- type: "manager"
   |    |
   |    --- uid (document)
   |         |
   |         --- type: "client"
   |
   --- reservations (collection)
        |
        --- reservationIdOne (document)
        |       |
        |       --- reservedBy: "uid"
        |       |
        |       --- date: September 21, 2019 at 1:15:02 PM UTC+3
        |
        --- reservationIdTwo (document)
                |
                --- reservedBy: "uid"
                |
                --- date: September 21, 2019 at 1:18:42 PM UTC+3

Используя эту схему, вы можете просто запросить базу данных, чтобы получить всех пользователей или конкретных пользователей (менеджер или клиенты).Вы также можете получить все бронирования, добавив ссылку на коллекцию reservations.Если вы хотите получить резервирование только одного типа (менеджер или клиент), вам следует использовать запрос, который может выглядеть следующим образом:

db.collection("reservations").whereEqual("type", "manager");

Как видите, я также добавил date свойство, так что вы можете легко сортировать их по убыванию (последнее бронирование в первую очередь).

1 голос
/ 20 сентября 2019

Это действительно зависит от варианта использования, который вы пытаетесь решить, так как вы должны оптимизировать для конкретных запросов на этих моделях.

Я рекомендую посмотреть эти видео, чтобы получить лучшее представление:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...