Модель БД Firestore, Атрибут в документе или вложенной коллекции - PullRequest
0 голосов
/ 02 июля 2018

Я часто сталкиваюсь с этим расколом при моделировании Firebase / Firestore, возможно, вы можете пролить свет на это.

Если у меня есть несколько администраторов, которые могут каждый клиенты (100 с) под своим именем. Администратор не может видеть других клиентов администратора (рассматривайте их как отдельные компании). Что было бы лучше?

1) Добавьте корневую коллекцию клиентов и под ней добавьте документ с идентификатором администратора электронной почты, а под ним подколлекцию с документами клиентов:

Firestore-root
   |
   --- Clients(collection)
         |
         --- Admin ID/Email(Collection)
              |
              ----------Clients Info (documents)

2) ИЛИ Добавьте корневую коллекцию клиентов с документами клиентов под ней, но атрибутом в каждом документе будет адрес электронной почты администратора:

Firestore-root
   |
   --- Clients(collection)
         |
         --- Clients Info (documents)
             |
              --- AdminId: (email)

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

Как правильно подойти к этому? Спасибо

1 Ответ

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

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

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

Но, если вы хотите добиться того же, используя второй вариант, это может быть возможно только в том случае, если вы будете использовать запрос, основанный на одном свойстве (свойство uid), например:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference clientsRef = rootRef.collection("Clients");
Query query = clientsRef.whereEqualTo("uid", uid);

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

Query query = clientsRef.whereEqualTo("uid", uid).orderBy("aProperty", Query.Direction.ASCENDING);

Вам нужно знать, что вы не можете этого достичь. Это невозможно, потому что в этом случае вам нужно создать index , и вы не можете вручную создать индекс для каждого uid.

Еще одна вещь, я рекомендую вам использовать uid вместо email address в качестве ключа документа.

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