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?