Wie wählt man den Primärschlüssel in DynamoDB, wenn das Element nur durch drei oder mehr Attribute eindeutig identifiziert werden kann? Oder ist das nicht die richtige Art, NOSQL-Datenbank zu verwenden?Wie wählt man den Primärschlüssel in DynamoDB, wenn das Element nur durch drei oder mehr Attribute eindeutig identifiziert werden kann?
Antwort
Im Allgemeinen, wenn Ihre Artikel eindeutig durch drei oder mehr Attribute identifiziert werden, können Sie die Attributwerte verketten und einen zusammengesetzten String-Schlüssel bilden, den Sie als Hash-Schlüssel in Dynamo tbale verwenden können.
Sie können die Attribute aus dem Hash-Schlüssel in separate Attribute für das Element duplizieren, wenn Sie Indizes für sie erstellen müssen oder wenn Sie sie in bedingten Ausdrücken verwenden müssen.
Die Regeln für normale Form der relationalen Datenbanken gelten nicht unbedingt für NoSQL-Datenbanken und tatsächlich wird normalerweise ein denormalisiertes Schema bevorzugt.
Um das Konzept zu erweitern, ist es typisch (und in der Regel wünschenswert), relationale Datenbankschemas so zu gestalten, dass normalisierte Formulare verwendet werden. Eine der normalisierten Formen schreibt vor, dass Sie Daten, die das gleiche "Ding" in Ihrer Datenbank darstellen, nicht duplizieren sollten.
Ich werde ein Beispiel verwenden, das nur zwei Teile hat, aber Sie können es weiter ausbauen.
Angenommen, Sie entwerfen eine Tabelle, die geographische Informationen in den Vereinigten Staaten enthält. In den USA besteht eine Postleitzahl aus 5 Ziffern und weiteren 4 Ziffern, die die Region unterteilen können.
In einer relationalen Datenbank Sie das folgende Schema verwendet werden könnte: wird
Zip | Plus4 | CityName | Population
---------+-----------+---------------+---------------
CHAR(5) | CHAR(4) | NVARCHAR(100) | INTEGER
Mit einem Verbundprimärschlüssel Zip, Plus4
Dies ist ideal, weil die Kombination von Zip und Plus4 garantiert einzigartig und Sie werden kann jede Abfrage gegen diese Tabelle beantworten, unabhängig davon, ob Sie sowohl den Zip- als auch den zusätzlichen Plus4-Code oder nur den Zip haben. Und Sie können auch ganz einfach alle Plus4-Codes für eine Postleitzahl bekommen.
Wenn Sie dieselben Informationen in Dynamo speichern möchten, können Sie einen Hash-Schlüssel mit dem Namen "ZipPlus4" vom Typ String erstellen, der aus der mit dem Plus4-Code verketteten Postleitzahl (z. B. 60210-4598) besteht Außerdem werden zwei weitere Attribute auf dem Objekt gespeichert, von denen eines die Postleitzahl selbst und das andere Plus4 selbst ist. So ein Element in der Tabelle können die folgenden Attribute haben:
ZipPlus4 | Zip | Plus4 | CityName | Population
-----------+---------+----------+-------------+---------------
String | String | String | String | Number
Die ZipPlus4
über die Hash-Schlüssel für die Tabelle wäre.
Beachten Sie, dass Sie im obigen Beispiel mit einem Hash-Schlüssel "Zip" und einem Bereichsschlüssel "Plus4" kommen könnten, aber wie Sie gesehen haben, wenn Sie mehr als 2 Teile haben, brauchen Sie etwas anderes.
- 1. Wie kann ein benutzerdefinierter Typ in D eindeutig identifiziert werden?
- 2. Wie kann ein Betriebssystem auf einem Computer eindeutig identifiziert werden?
- 3. Wie man einen Prozess eindeutig identifiziert
- 4. Wie wählt man ein Element, das mehr als eine CSS-Klasse haben muss?
- 5. Wie wählt man das nächste passende Element?
- 6. .on ('change', '.class') wählt das falsche Element (nur das erste)
- 7. Wie kann UpdateItem nur für vorhandene DynamoDB-Ressourcen zugelassen werden?
- 8. Wie wählt man nur bestimmte Attribute aus einem Modell?
- 9. Wie wählt man das n-te Element in XPath 1.0?
- 10. Wie wählt man das letzte untergeordnete Element in jQuery aus?
- 11. Wie wählt man das erste Element jeder Klasse mit CSS
- 12. Wie identifiziert man den Client als Suchroboter?
- 13. d3js: Wie wählt man das n-te Element einer Gruppe?
- 14. Wie wählt man eindeutig Benutzer, die versuchen, sich mehr als 10 Mal im Internet anmelden
- 15. Wie identifiziert man UNIQUELY ein USB-Gerät?
- 16. Wenn eine Tabelle horizontal partitioniert ist, kann sie durch den Primärschlüssel abgefragt werden?
- 17. Wie wählt man eine Zeile nach Primärschlüssel in sqlite3?
- 18. DynamoDB - Platzieren Sie Element, wenn Hash (oder Hash-und Bereichskombination) nicht existiert
- 19. Wie man einen Benutzer eindeutig identifiziert, bevor er nur seine Informationen in der Datenbank aktualisiert - asp.net/jQuery
- 20. Wie identifiziert man das neue iPad
- 21. Wie wählt man Dinge in einem Element wie diesem aus?
- 22. Wie kann ein Attribut im XML-Schema eindeutig gemacht werden?
- 23. Wie überprüft man, ob Attribute mit RelaxNG eindeutig sind?
- 24. Wie jQuery Ajax mehr wählt
- 25. Wie wählt man nur den obersten Elementtext aus?
- 26. DynamoDB: Wie finden Sie eindeutige Hash-Schlüssel aus Primärschlüssel, wenn sein Hash-Bereich Schema?
- 27. Update-Array-Element in DynamoDB
- 28. Wie wählt man dynamische Knoten in Polymer?
- 29. Rails 4 Query eindeutig durch einzelnes Attribut
- 30. Liquibase: Wie identifiziert man nur die Change-Set-Basis-ID?
Danke, kannst du erklären "die Attribute duplizieren?"? – wz366
@ wz366 Ich habe einige weitere Details hinzugefügt - es ist ein Beispiel mit einem zweiteiligen Schlüssel, aber Sie können zu einem dreiteiligen Schlüssel erweitern –