Database design 将Firebase用户UID用于相关数据库条目的键-好的做法还是坏的做法?

Database design 将Firebase用户UID用于相关数据库条目的键-好的做法还是坏的做法?,database-design,firebase,firebase-realtime-database,Database Design,Firebase,Firebase Realtime Database,使用用户的UID(由Firebase在用户通过Firebase Auth创建时生成)作为关联数据库条目的密钥是否存在任何问题 例如,这里: /config/user.uid/configObject …每个用户都有一个配置条目。由于Firebase的数据库规则(父节点上的设置适用于所有子节点),通常需要创建单独的配置树(以下示例中,/users树需要读写保护) 我认为这可能是不好的做法的唯一原因是,如果用户的UID发生变化。。。Firebase是否保证这种情况永远不会发生?我遗漏了什么?特定用

使用用户的UID(由Firebase在用户通过Firebase Auth创建时生成)作为关联数据库条目的密钥是否存在任何问题

例如,这里:

/config/user.uid/configObject
…每个用户都有一个配置条目。由于Firebase的数据库规则(父节点上的设置适用于所有子节点),通常需要创建单独的配置树(以下示例中,
/users
树需要读写保护)


我认为这可能是不好的做法的唯一原因是,如果用户的UID发生变化。。。Firebase是否保证这种情况永远不会发生?我遗漏了什么?

特定用户的UID将永远不会更改(尽管更改了;旧格式包括提供程序)

这是一个很好的实践,在许多情况下都是必要的,并且可能在某些地方被推荐。您将希望将用户信息反规范化为多个节点,以获得更好的性能和您提到的授权。在伪代码/规则中,它可能看起来像这样:

- users_private (.read: $uid == auth.uid)
  - $uid
    - email

- users_public (.read: true)
  - $uid
    - name
    - photo

- users_roles (.read: dependent on some other rules)
  - $uid
    - is_admin
    - is_editor

正是我要找的!特别感谢您包含伪代码/规则-非常有用的答案。