Правильный способ хранения связанной информации в Firestore - PullRequest
0 голосов
/ 30 мая 2019

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

Например, скажем, у меня есть объект пользователя и бизнес-объект. Пользователи могут следить за бизнесом, а пользователи - за собственным бизнесом. Итак, вот основная структура:

user
|-id
|-name
|-following
||-businessID1
||-businessID2
|-owns
||-businessID3
||-businessID4

business
|-id
|-name
|-followers
||-userID1
||-userID2
|-owners
||-userID3
||-userID4

Теперь, если я хочу показать список предприятий, которыми владеет или следует тот или иной пользователь, я могу легко использовать .whereArrayContains и bingo. Но если я изменю его так, чтобы я мог отображать больше, чем ID, например, так:

user
|-id
|-name
|-following
||-business1
|||-businessID1
|||-businessname1
|||-businesspicURL1
||-business2
|||-businessID2
|||-businessname2
|||-businesspicURL2
|-owns
||-businessID3
||-businessID4

Я больше не могу использовать .whereArrayContains. Так что мой вопрос больше относится к передовому опыту ... Должен ли я хранить список бизнес-идентификаторов в виде одного массива, а затем использовать индекс этого бизнеса, чтобы найти бизнес-информацию в другом поле? Вот так:

|-followingID
||-businessID1
||-businessID2
||-businessID3

, а затем

|-followinginfo
||-business1
|||-businessID1
|||-businessname1
|||-businesspicURL1
||-business2
|||-businessID2
|||-businessname2
|||-businesspicURL2

Или есть лучший способ, который позволил бы мне такую ​​же гибкость и функциональность? Спасибо!

...