как структурировать базу данных firebase для получения результатов, подобных реляционным базам данных - PullRequest
0 голосов
/ 26 мая 2020

Я использую firebase Cloud Firestore для своих приложений Android и iOS. Я застрял в том, как структурировать свою базу данных.

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

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

, поэтому я попробовал следующее: внутри пользователя у меня будет коллекция «посещаемости», тогда каждый документ будет Unix меткой времени этого дня (чтобы убедиться, что он уникален). затем сохраните поля, такие как Attention_time и leave_time ... et c. путь такой: "/ organization / android / users / 3PRs42gRFzZQhLKcUhpf4wPMRV43 / посещаемость / 1590271200"

тогда мне нужно было получить посещаемость на один день для всех пользователей, поэтому я сделал это: теперь у меня есть другой путь » / организация / android / посещаемость », а внутри посещаемости я сохраняю отметку времени Unix дня, затем идентификатор пользователя, а затем его посещаемость. и теперь я дважды экономлю посещаемость.

но я по-прежнему не могу получить посещаемость на все дни для всех пользователей! это было бы просто в реляционной базе данных, например SQL. есть идеи, как это сделать в firebase?

1 Ответ

1 голос
/ 26 мая 2020

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

Поскольку запрос в Firestore может видеть данные только в запрашиваемой коллекции (ах), вам может потребоваться дублировать некоторые данные из родительских коллекций (ваши users и organizations) в каждый документ посещаемости, чтобы разрешить запрос. Этот тип дублирования данных вполне нормален и для баз данных No SQL.

Наконец: если вам нужно выполнить много специальных запросов c, вы можете рассмотреть возможность использования базы данных для тех, которые больше подходит для этого варианта использования. Например, довольно часто Firestore используется для обработки прямых взаимодействий с клиентом, требующих масштабирования до огромного числа пользователей, а затем используется BigQuery для специальных c запросов к этим данным. Есть даже расширение Firebase Extension, которое автоматически экспортирует в BigQuery , чтобы упростить задачу.

...