【问题标题】:React + Firebase - Handle denormalized dataReact + Firebase - 处理非规范化数据
【发布时间】:2021-09-28 22:54:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript reactjs firebase nosql denormalization


    【解决方案1】:

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

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

    如果:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多