Какова идеальная архитектура данных Cloud Firestore для вложенных списков маркеров?
Я запускаю сторонний проект по созданию небольшого приложения с «списком маркеров», аналогичного базовой функциональности Рабочий процесс . Основой c является то, что вы можете создавать вложенные текстовые списки маркеров произвольной глубины.
- У любого конкретного элемента пули может быть много дочерних элементов пули
- Вы можете свернуть / развернуть дочерние элементы определенного элемента пули
- Вы можете удалить любой конкретный элемент пули и все его дочерние элементы
- Было бы также хорошо, если бы вы могли перетащить любой элемент пули (и его дочерние элементы) в другое место в списке
Я хотел бы использовать Firebase и реагировать, чтобы построить это. Учитывая описанную выше базовую функциональность c, какой будет оптимальная архитектура данных в Cloud Firestore? Каков наилучший способ зафиксировать отношения родитель / ребенок между пулями? Что обеспечит хороший баланс операций чтения (отображения всех маркеров) и записи (удаления всех дочерних элементов определенной марки)?
Должен ли я просто хранить все свои «маркированные» документы в «пулях» уровня root »Собирать и отслеживать детей этой пули с помощью поля« дети », которое представляет собой массив идентификаторов или ссылки на дочерние пули? Пример:
bullets
bullet_1
text: "I am the bullet text."
parent: null
children: [bullet_2]
bullet_2
text: "I am also text."
parent: bullet_1
children: [bullet_3, bullet_4, bullet_5]
bullet_6
text: "I am also text."
parent: null
children: []
Или вместо того, чтобы хранить массив идентификаторов или ссылок на детей, я должен вместо этого хранить маркеры для детей во вспомогательных коллекциях своих родителей? Пример:
bullets
bullet_1
text: "I am the bullet text."
parent: null
children_subcollection
bullet_2
text: "I am also bullet text."
parent: bullet_1
children_subcollection_2 (are nested subcollections even possible?)
bullet_3
text: "I am but lowly bullet text."
parent: bullet_2
bullet_4
text: "I am just more bullet text."
parent: bullet_2
...