Как структурировать базу данных firestore?

# #firebase #flutter #web #google-cloud-firestore #nosql

Вопрос:

Я создаю приложение flutter с firestore ,застрявшее на сценарии структуры данных. Таким образом, сценарий заключается в том, что пользователь может посетить несколько городов, у меня 3000 городов и 100000 пользователей, и я хочу иметь возможность добавлять и запрашивать, какие пользователи посетили конкретный город. моя текущая реализация заключается users/userId/userDetails в том, что и cities/cityName/cityDetails

Ответ №1:

Учитывая то немногое, что я узнал из видеогидов, предоставленных Firebase; это зависит от того, хотите ли вы просто перечислить пользователей (т. Е. Просто некоторую базовую информацию о них), которые посетили город; или, если вы хотите, чтобы пользователи были перечислены по городу/городам, которые они посетили.

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

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

Тем не менее, я советую это в предположении, что в инструкциях по реализации, которые вы указали, заключительная запись должна быть документом (данные города и данные пользователя), как я считаю, имеет наибольший смысл (наличие идентификатора пользователя и имени города в качестве коллекции).
Если я неправильно понял вашу структуру, и на самом деле это «города» как документ, «Название города» как коллекция и «Данные города» как документ; пожалуйста, дайте мне знать, чтобы я мог исправить свой ответ.