The UID for a specific user will never change (although they changed the format a few months ago , the old format included a provider).
This is a good practice, necessary in many cases and perhaps recommended somewhere. You want to denormalize user information across multiple nodes for better performance and authorization, as you mentioned. It might look something like this in pseudo code / rules:
- 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