Правильный дизайн в базе данных Cloud Firestore Document - PullRequest
0 голосов
/ 08 июня 2018

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

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

[Collection] Users
  - [Doc] usr10343
     name: Bob
     age: 27
  - [Doc] usr19282
     name: Jenny
     age: 32

[Collection] Activities
  - [Doc] act19203
     name: Warmup Jog
     description: {...}
     duration: 10m
  - [Doc] act28301
     name: Burpies
     description: {...}
     duration: 8m

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

   - [Doc] instance39201
     name: Warmup Jog
     description: {...}
     duration: 10m
     numberOfTimes: 8
     lastCompleted: 10/18/2017

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

   - [Doc] instance39201
     activity: act19203
     numberOfTimes: 8
     lastCompleted: 10/18/2017

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

1 Ответ

0 голосов
/ 08 июня 2018

Не существует «единственно верного способа» для моделирования всех данных за все время в базе данных nosql.Ваше моделирование должно соответствовать запросам, которые вы намереваетесь задать.Если вы не знаете свои запросы, то не обязательно знаете эффективное моделирование.Все дело в эффективности.Модель не является «правильной», если она не соответствует потребностям вашего приложения.

...