Когда дублировать данные в noSQL? - PullRequest
0 голосов
/ 31 мая 2019

Я работаю над проектом, в котором будет использоваться Firebase Firestore. У меня не было опыта работы с noSQL, поэтому я работаю над пониманием этой технологии.

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

Категория и фильм не будут изменены пользователями и будут исправлены или изменены владельцем. Думайте, что это как каталог Netflix, где пользователь может смотреть только фильмы

Существует несколько категорий, но на данный момент в категории есть только один фильм (может быть, позже). Каждый фильм имеет связанные метаданные.

В будущем: - объект пользователя будет использоваться для ранжирования каждого пользователя по его оценке (информация, связанная с приложением). - некоторые фильмы будут доступны с ограничением локализации, т.е. фильмы будут доступны только для пользователей из США.

В моей первой мысли структура данных будет выглядеть так:

// Collection
Category: {
    name: "drama" // Could be action, or other
}

// Collection
Movie: {
    name: "Matrix"
    description: "Best movie ever"
    duration: 1321312
    url: "https://www....."
    allowedCountry: "us" // is it the right place for this field?
    category: "drama" // is it ok to duplicate data here?
}

//Collection
user: {
    ranking: 3
    withMovie: "Matrix" // is it ok to duplicate data here?
}

Я не уверен, что это правильная структура данных для этой проблемы.

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

Затем, когда пользователь выбирает категорию, отображаются возможные фильмы, а приложение загружает выбранную.

Можно ли перебирать все возможные фильмы, чтобы показать фильмы, относящиеся к категории? Или я должен поместить фильмы как подколлекцию коллекции категорий?

1 Ответ

0 голосов
/ 31 мая 2019

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

firebase.firestore().collection("movies").where("category", "==", "drama")

На самом деле, подумайте, действительно ли ваши фильмы могут иметь только одну категорию (как вы ее смоделировали сейчас), или могут ли они иметь несколько категорий в будущем (как это делает Netflix, насколько я знаю). Вы бы смоделировали последний как массив категорий:

categories: ["drama", "sci-fi"]

А затем запросить его с помощью:

firebase.firestore().collection("movies").where("categories", "array-contains", "drama")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...