React Firebase — Обработка денормализованных данных

# #javascript #reactjs #firebase #nosql #denormalization

Вопрос:

Я читаю документы из своей базы данных, в которой есть денормализованные данные внутри них. Я использую эти данные для визуализации компонента графического интерфейса «UserListItem», который доступен для кликабельности.

Когда пользователь нажимает на этот компонент, он переходит к экрану «Профиль».

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

 {
    userData: { // Denormalized data
        id,
        avatar,
        name,
        username,
        isCelebrity
    },
    ... other stuff
}
 

и экран «Профиль», на который пользователь переходит при нажатии, требует следующих пользовательских полей:

 userData = {
     /* Included in denormalization */
     id,
     avatar,
     name,
     username,
     isCelebrity,

     /* Not included in denormalization */
     totalFollowers,
     totalFollowing,
     status,
     premium,
}
 

Как я могу справиться с этой ситуацией? Я имею в виду, какова типичная стратегия?

Я думал об этом на экране профиля:

 useEffect(() => {
   if(!isUserDataComplete(userData)) { // Check that the userData object contains all the required fields
      const newUserData = getUserData(userData.id); // DB Fetch
      users.updateData(newUserData); // Updating the user data in our context
   }
}, []);
 

Но не уверен, что это хороший и «чистый» подход.

И еще, есть ли у этой ситуации название? Чтобы узнать об этом больше.

Ответ №1:

Но не уверен, что это хороший и «чистый» подход.

Это сильно зависит от ваших функциональных требований, прав доступа, частоты обновления и объема данных, которые не «включены в денормализацию».

Если:

  1. Все авторизованные читатели UserList могут прочитать соответствующие Profiles ;
  2. Между моментом, когда пользователь открывает UserList и моментом, когда он/она открывает одну из Profile (нажмите на строку UserList , если я правильно понимаю) данных, которые не «включены в денормализацию», не изменится;
  3. Эти данные, которые не «включены в денормализацию», на самом деле не являются тяжелыми (я полагаю, что totalFollowers и totalFollowing являются числами, status могут быть кодом и premium логическим значением).;

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

С другой стороны, если одно из вышеперечисленных условий не соответствует действительности, то вам, вероятно, следует оставаться на месте и извлекать данные, которые не «включены в денормализацию», когда пользователь открывает Profile