Структура модели Nosql - PullRequest
       13

Структура модели Nosql

0 голосов
/ 03 июля 2019

Как бы вы структурировали свою базу данных Cloud Firestore.

У меня есть коллекции команд, арен и игр:

public class Team {
    public String name;
    public String homeCourtId;
}

public class Game{

    public String matchId;
    public String date;
    public Arena arena;
    public Team homeTeam;
    public Team awayTeam;
}


public class Arena {

    public String name;
    public String phone;
    public String email;
    public String address;
    public String postalCode;
    public String city;
    public String district;
    public String cordLat;
    public String cordLong;

}

Команда может быть домашней или выездной командой в Играх иУ игры всегда есть арена.

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

Должны ли я иметь ссылки на команды по идентификатору, сгенерированному Firestore, или мне нужно указывать названия команд?Любые указатели, где я могу прочитать больше об этом?

Являются ли они лучшим способом структурировать мои данные в Firestore?(или любой nosql db)

1 Ответ

1 голос
/ 03 июля 2019

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

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

Cloud Firestore не поддерживает следующие типы запросов:

  • Логические ИЛИ запросы. В этом случае вы должны создать отдельный запрос для каждого условия ИЛИ и объединить результаты запроса в вашем приложении.

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

Я бы хотел дважды запросить вашу базу данных и объединить результаты этих запросов на стороне клиента. Это не идеально, так как вам нужно сделать запрос дважды, но я думаю, что это поможет.

Для Android вы можете объединить два запроса локально:

Но, согласно ответу Фрэнка ван Пуффелена на ту же тему:

ИЛИ запросы, поскольку они потребуют пропуска по индексу, что сделает невозможным гарантировать производительность. Обратите внимание, что в настоящее время ведется работа по поддержке подмножества возможных запросов IN, чтобы вы могли запросить что-то вроде «дайте мне все рестораны, где подают блюда тайской или итальянской кухни».

Вы можете подождать, пока эта функция станет доступной, или использовать моё решение выше.

Должны ли у меня быть ссылки на команды, сгенерированные там пожарным магазином, или я должен искать названия команд?

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

P.S. Если вы вместо "OR" запрашиваете запрос "AND", обратите внимание, что допускается объединение в цепочку нескольких вызовов whereTo().

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