Проблемы с пожарной логикой - PullRequest
0 голосов
/ 03 января 2019

У меня проблемы, и я уверен, что люди здесь могут мне помочь.

Я новичок в кодировании (только 1 или 2 месяца), и мне сложно понять, как работает логика.

Вот мои проблемы:

У меня есть 3 коллекции в базе данных:

  1. Tournament

  2. Tour

  3. Примечания

-> У меня есть несколько турниров, каждый из которых содержит 5 разных туров, и каждый турнир содержит заметки, сделанные пользователем.

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

Турнир A -> Тур: A, B, C, D, E -> Примечания пользователя для каждого турнира?

Мне просто нужна помощь о том, как мне нужно думать, чтобы сгруппировать все.

1 Ответ

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

Не существует единой правильной модели данных, так как (со всеми решениями NoSQL) лучшая модель данных зависит от вариантов использования вашего приложения.

Но, насколько я понимаю, у вас есть два основных варианта:

  1. Гнездо детской коллекции
  2. Подключение документов путем встраивания родительских идентификаторов

Гнездо детской коллекции

Firestore - это база данных, которая содержит коллекции документов. Каждый документ может содержать подколлекции под ним. Учитывая, что ваша модель данных является иерархической, это означает, что вы можете вкладывать их следующим образом:

Tournaments (collection)
  Tournament1 (document)
    Tours (collection)
      Tour1_1 (document)
        Notes (collection)
          Notes1_1_1 (document)

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

Подключение документов путем встраивания родительских идентификаторов

Альтернативой является создание трех коллекций верхнего уровня и подключение каждого дочернего документа к его родительскому элементу путем встраивания в него родительского идентификатора, например:

Tournaments (collection)
  Tournament1 (document)
Tours (collection)
  Tour1_1 (document)
    TournamentID: Tournament1
Notes (collection)
  Notes1_1_1 (document)
    TourID: Tour1_1

С этой моделью вы можете получить все Туры на Турнир, запросив ref.collection("Tours").where("TournamentID", "==", "Tournament1").

Преимущество второй модели состоит в том, что вы можете получить доступ к турам по всем турнирам, тогда как в первой модели вы можете получить доступ к турам только для одного турнира за раз (по крайней мере, пока Firestore не выполнит запросы групп сбора).

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

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