Как сделать лучшую схему для моего магазина? - PullRequest
0 голосов
/ 11 января 2019

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

  • карта
  • CardList
  • Пользователь
  • Настройки

Идея заключается в том, что у пользователя есть свои настройки (например, язык и т. Д.). Он также может создать список карт, в который он может добавить столько карт, сколько он хочет. Я хочу иметь возможность запрашивать все карты по списку карт, все списки карт по пользователю, все настройки по пользователю ...

Есть ли предложения?

1 Ответ

0 голосов
/ 11 января 2019

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

Firestore-root
   |
   --- users (collection)
   |    |
   |    --- uid (document)
   |         |
   |         --- userName: "NameOfUser"
   |         |
   |         --- settings (map)
   |         |    |
   |         |    --- language: "en"
   |         |    |
   |         |    --- //Other settings properties
   |         |
   |         --- //Other user properties
   |
   --- cards (collection)
   |    |
   |    --- cardId (document)
   |         |
   |         --- uid: "uid"
   |         |
   |         --- //Other card properties
   |
   --- decks (collection)
        |
        --- uid (document)
             |
             --- userDecks (collection)
                    |
                    --- deckId (document)
                          |
                          --- deckName: "NameOfTheDeck"
                          |
                          --- //Other deck properties
                          |
                          --- userDeckCards (collection)
                                 |
                                 --- cardId (document)
                                       |
                                       --- uid: "uid"
                                       |
                                       --- //Other card properties

Идея в том, что у пользователя есть свои настройки (например, язык и т. Д.). Он также может создать список карт, в который он может добавить столько карт, сколько он хочет. Я хочу иметь возможность запрашивать все карты по списку карт, все списки карт по пользователю, все настройки по пользователю

Используя эту схему базы данных, вы можете просто:

  • Получить всех пользователей, подключив прослушиватель к users справочнику коллекции:

    db.collection("users").get().then(/* ... */);
    
  • Получите все настройки, которые соответствуют определенному пользователю, используя следующую ссылку, и выполните итерации по карте settings:

    db.collection("users").doc(uid).get().then(/* ... */);
    
  • Получить все карточки от всех пользователей, подключив прослушиватель к cards справочнику коллекции:

    db.collection("cards").get().then(/* ... */);
    
  • Получить все карты, которые соответствуют определенному пользователю, используя query:

    db.collection("cards").where("uid", "==", uid).get().then(/* ... */);
    

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

Edit:

Согласно вашим комментариям, да, вам следует создать еще одну коллекцию с именем decks, чтобы вы могли получить все колоды, которые соответствуют конкретному пользователю. Для этого требуется следующая ссылка на коллекцию:

db.collection("decks").doc(uid).collection("userDecks").get().then(/* ... */);

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

db.collection("decks").doc(uid)
    .collection("userDecks").doc(deckId)
    .collection("userDeckCards")
    .get().then(/* ... */);

В этом случае вам нужно использовать denormalization. Это обычная практика, когда дело доходит до Firebase. Если вы новичок в базах данных NoQSL, я рекомендую вам посмотреть это видео, Денормализация нормальна с базой данных Firebase для лучшего понимания. Это для базы данных реального времени Firebase, но те же правила применяются к Cloud Firestore.

Кроме того, когда вы дублируете данные, следует помнить одну вещь. Точно так же, как вы добавляете данные, вы должны поддерживать их. Другими словами, если вы хотите обновить / обнаружить элемент, вы должны делать это в каждом месте, где он существует.

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