Denormalisierung von Datenstrukturen für den privaten Datenzugriff in Firebase?

Ich würde gerne Daten erstellen, die skalieren (um private Daten eines Benutzers zu verfolgen).

Die Firebase-Dokumentation empfiehlt, die untergeordneten Objekte wie folgt unter dem übergeordneten Objekt zu verschachteln:

{
  "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",
          ...
      }
    }, ...
  }
}

(Dabei ist rec_id ein eindeutiger Schlüssel, der von Firebase.push () generiert wird.)

Aber wie in @ erwähDenormalisierung Ihrer Daten ist normal Ich denke, es wäre besser, es so zu strukturieren:

{
  "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"
      }, ...
    }, ...
  }
}

Und damit der Benutzer nur seine eigenen Daten schreiben / lesen kann, gelten die folgenden Sicherheitsregeln:

{
  "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"
      }
    }
  }
}

Als ich neu in dieser Art von Datenbanken bin, frage ich mich, ob es Nachteile gibt, wie ich sie strukturieren möchte.

Wäre es besser, alle Aufgaben direkt unter dem Benutzer zu verschachteln, wie im ersten Beispiel empfohlen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage