首页 > 解决方案 > React + Firebase - 处理非规范化数据

问题描述

我正在从我的数据库中读取文档,其中包含非规范化数据。我使用这些数据来呈现一个可点击的 GUI 组件“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
   }
}, []);

但不确定这是否是一个好的和“干净”的方法。

还有,这种情况有名字吗?阅读更多关于它的信息。

标签: javascriptreactjsfirebasenosqldenormalization

解决方案


但不确定这是否是一个好的和“干净”的方法。

这在很大程度上取决于您的功能要求、访问权限、更新频率以及未“包含在非规范化中”的数据量。

如果:

  1. 的所有授权读者都UserList可以阅读相应的Profiles
  2. 从用户打开到UserList他/她打开未“包含在非规范化中”的数据Profile之一(如果我正确理解,请单击一行UserList)之间不会改变;
  3. 这些未“包含在非规范化中”的数据并不是很重(我想它是数字,可能是代码和totalFollowers 布尔值);totalFollowingstatuspremium

然后您可能应该在“非规范化”中包含未包含的数据:您将保存一些读取,因为打开 a 时要显示的数据Profile已经被获取。

另一方面,如果上述条件之一不成立,那么您可能应该保持原样并在用户打开时获取未“包含在非规范化中”的数据Profile


推荐阅读