# #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:
Но не уверен, что это хороший и «чистый» подход.
Это сильно зависит от ваших функциональных требований, прав доступа, частоты обновления и объема данных, которые не «включены в денормализацию».
Если:
- Все авторизованные читатели
UserList
могут прочитать соответствующиеProfiles
; - Между моментом, когда пользователь открывает
UserList
и моментом, когда он/она открывает одну изProfile
(нажмите на строкуUserList
, если я правильно понимаю) данных, которые не «включены в денормализацию», не изменится; - Эти данные, которые не «включены в денормализацию», на самом деле не являются тяжелыми (я полагаю, что
totalFollowers
иtotalFollowing
являются числами,status
могут быть кодом иpremium
логическим значением).;
Тогда вам, вероятно, следует включить «в денормализацию» данные, которые не включены: вы сохраните некоторые чтения, так как данные, которые будут отображаться при открытии Profile
, уже будут извлечены.
С другой стороны, если одно из вышеперечисленных условий не соответствует действительности, то вам, вероятно, следует оставаться на месте и извлекать данные, которые не «включены в денормализацию», когда пользователь открывает Profile