Desnormalizando estruturas de dados para acesso privado a dados no Firebase?

Eu gostaria decriar dados que escalam (para rastrear dados particulares de um usuário).

A documentação do Firebase recomenda aninhar os objetos filhos sob o pai desta maneira:

{
  "users": {
    "google:1234567890": {
      "displayName" : "Username A",
      "provider" : "google",
      "provider_id" : "1234567890",
      "todos": {
          "rec_id1": "Walk the dog",
          "rec_id2": "Buy milk",
          "rec_id3": "Win a gold medal in the Olympics",
          ...
      }
    }, ...
  }
}

(Onde rec_id é uma chave exclusiva gerada pelo Firebase.push ().)

Mas como mencionado emDesnormalizar seus dados é normal Eu acho que seria melhor estruturá-lo desta maneira:

{
  "users" : {
    "google:1234567890" : {
      "displayName" : "Username A",
      "provider" : "google",
      "provider_id" : "1234567890"
    }, ...
  },
  "todos" : {
    "google:1234567890" : {
      "rec_id1" : {
        "todo" : "Walk the dog"
      },
      "rec_id2" : {
        "todo" : "Buy milk"
      },
      "rec_id3" : {
        "todo" : "Win a gold medal in the Olympics"
      }, ...
    }, ...
  }
}

E, para permitir apenas que o usuário escreva / leia seus próprios dados, aplique as seguintes regras de segurança:

{
  "rules": {
    "users": {
      "$uid": {
        // grants write and read access to the owner of this user account whose uid must exactly match the key ($uid)
        ".write": "auth !== null && auth.uid === $uid",
        ".read": "auth !== null && auth.uid === $uid"
      }
    },
    "todos": {
      "$uid": {
        // grants write and read access to the owner of this user account whose uid must exactly match the key ($uid)
        ".write": "auth !== null && auth.uid === $uid",
        ".read": "auth !== null && auth.uid === $uid"
      }
    }
  }
}

Como sou novo nesse tipo de banco de dados, pergunto-me se há alguma desvantagem na maneira como gostaria de estruturá-lo.

Seria melhor aninhar todos todos diretamente sob o usuário, conforme recomendado no primeiro exemplo?

questionAnswers(1)

yourAnswerToTheQuestion