Firebase, загрузить связанные данные?

Я использую плоский макет базы данных с продуктами, у которых есть пользователи, макет базы данных выглядит следующим образом. Это широко используемый «плоский» способ работы с данными Firebase.

Now I have a route, the user can visit: /products/1, which should load the users for that product

Так что в основном мне нужно попросить Firebase предоставить мне информацию о пользователях для пользователей этого продукта. (так для 1 и 2 в моем примере)

Каков хороший способ сделать это?

products: [
    {
        id: 1,
        name: 'Product One',
        users: [
            1: true,
            2: true

        ]
    } 
],
users: [
    {
        id: 1,
        name: Tom
    }
]
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть два основных варианта

  1. Загрузите данные для каждого отдельного пользователя по мере необходимости. Это известно как соединение на стороне клиента и является довольно распространенным решением. Производительность далеко не так плоха, как думают многие разработчики, поскольку запросы для пользователей передаются по одному существующему соединению. И вы, конечно, можете дедуплицировать запросы, сохраняя кеш недавно запрошенных пользователей.
  2. Дублируйте основные данные для каждого пользователя под каждым продуктом. Например: если вам нужно отобразить имя пользователя для каждого пользователя с продуктом, вы можете сохранить имя каждого пользователя под каждым продуктом:

    products: [
        {
            id: 1,
            name: 'Product One',
            users: [
                1: "Tom",
                2: "Notflip"
            ]
        } 
    ],
    

    С этой структурой данных вам просто нужно загрузить узел продукта, никаких соединений (ни на стороне сервера, ни на стороне клиента) не требуется. Если вы имеете опыт работы с реляционными базами данных, это, вероятно, вызовет все ваши «сигналы нормализации», но в базах данных NoSQL этот тип дублирования данных довольно распространен. Хотя это делает операции записи более сложными (из-за необходимости разветвления данных), это делает операции чтения действительно простыми и чрезвычайно масштабируемыми.

    Дополнительные сведения об обновлении дублированных данных см. в статье Как записать денормализованные данные в Firebase.

Я бы также рекомендовал:

Другие вопросы по теме