Wie modellieren/repräsentieren wir Nachschlage-/Referenztabellen in Graphdatenbanken?
Ein spezieller Fall: Master-Übersetzungstabelle (enthält Nachschlagedaten für viele der Kerntabellen).
Sollten wir sie in Kerntabellen zusammenführen? RDBMS representationNachschlage-/Referenztabellen in Graphdatenbanken
Antwort
Sie könnten dies mit nur Knoten modellieren. Etwas wie:
CREATE (:Translation{code:'SLD', description:'some lengthy description'})
CREATE (:Translation{code:'NY', description:'New York'})
CREATE (:Translation{code:'USA', description:'United States'})
CREATE (:Address{address:'123 Street St', state:'NY', country:'USA'})
Und für die Nutzung vielleicht so etwas wie:
MATCH (p:Person)-[:LIVES_AT]->(a:Address)
WHERE id(p) = 101
OPTIONAL MATCH (state:Translation{code:a.state})
OPTIONAL MATCH (country:Translation{code:a.country})
RETURN a.address as address, state.description as state, country.description as country
Das heißt, ich glaube, eine Graphdatenbank die Notwendigkeit für diese etwas veraltet macht. Es scheint mir, dass der Grund, diese zu verwenden, darin besteht, Speicherplatz zu sparen, da die gleichen Werte wiederholt verwendet werden, so dass es in RDBMS sinnvoll ist, nur die längere Beschreibung an einem Ort zu behalten.
Mit einer Grafik, die Sie vorschlagen, scheint sollte den Wert seiner eigenen Knoten extrahieren und erstellen Sie Beziehungen, um es, wie folgt aus:
CREATE (ny:State{code:'NY', name:'New York'})
CREATE (usa:Country{code:'USA', name:'United States})
CREATE (a:Address{address:'123 Street St'})
CREATE (a)-[:IN_STATE]->(ny) // or a more generic :IN if desired
CREATE (a)-[:IN_COUNTRY]->(usa) // or a more generic :IN if desired
Die Abfrage wäre dann:
MATCH (p:Person)-[:LIVES_AT]->(a:Address)
OPTIONAL MATCH (a)-[:IN_STATE]->(state)
OPTIONAL MATCH (a)-[:IN_COUNTRY]->(country)
RETURN a.address as address, state.name as state, country.name as country
Sie werden feststellen, dass dies sehr ähnlich aussieht. Der Name des langen Landes ist immer noch nur an einem Ort gespeichert. Der wahre Unterschied ist der Kontext, sowohl für das Arbeiten mit Knoten mit bestimmten Beschriftungen als auch für möglicherweise spezifischere Eigenschaftsschlüssel und für die Tatsache, dass die Beziehung zu diesen Knoten Teil Ihres Datenmodells ist, anstatt bestimmte Eigenschaftsfelder irgendwie kennen oder erraten zu müssen in einem anderen Knoten nachgeschlagen (versuchen Sie beispielsweise CALL db.schema()
im Browser).
Dies erleichtert auch das Nachschlagen von Adressen nach dem Code, wenn Sie einen Index hinzufügen: Status (Code) und: Land (Code).
Danke! Dies ist insbesondere in solchen Fällen sinnvoll. Hinweis: Das Erstellen separater Knoten ermöglicht auch die Speicherung von Codes/Beschreibungen auch für solche Situationen, in denen "Core" -Sätze keine solchen Werte haben (dies funktioniert sowohl für RDBMS- als auch für Graph-Datenbanken). –
- 1. Unterschied zwischen Graphdatenbank: Neo4j & AllegroGraph
- 2. Warum gibt es nicht so viele Graph-Datenbanken wie Graph Processing Frameworks?
- 3. Was ist der Unterschied zwischen Triple-Stores und Graph-Datenbanken?
- 4. Wie kann ich eine Beziehung zwischen zwei zufälligen Knoten basierend auf dem übergeordneten Knoten erstellen?
- 5. Grafikdatenbanken für Sensordaten - Wie modelliert man die Beziehung?
- 6. Graph Databases - das Unternehmen darauf setzen?
- 7. Konvertieren String in %% in Kleinbuchstaben in Python
- 8. Bedingung in Eingabefeld in tkinter in Python
- 9. Schreiben in CSV in Rails in Produktion
- 10. Comma in in PHP Arrays in Funktionssignaturen
- 11. In Binned-Ereignisse in Python in Zeit
- 12. In CSV in Array in Python konvertieren
- 13. Zoom-in in Weltkarte in R
- 14. "IN" und "NOT IN" in CakePHP3
- 15. % in% Veränderung in dplyr Paket in R
- 16. 'IN' & 'NICHT IN' in Linq Abfrage
- 17. Schleifen in Schleifen in Schleifen in Java
- 18. Funktionsparameter in Zeichenfolge in Parameter in Objekt
- 19. mit Array in WO IN in CakePHP
- 20. Execute Verfahren in Anweisung in NOT IN()
- 21. in Verknüpfungstabelle in Hibernate
- 22. In Operator in Linq
- 23. In Python in bash
- 24. Aussage IN in Linq
- 25. Convert \\ in \ in Scala
- 26. IN-Klausel in sqlite
- 27. this.setState in SetTimeout in
- 28. \ in path.combine in C#
- 29. ZWISCHEN IN in SQL
- 30. ‚Import IN‘ in Python
Können Sie ein konkreteres Beispiel geben? Denken Sie daran, dass es kein Konzept für Tabellen in einer Graphdatenbank gibt. – InverseFalcon
Ich habe ein Bild der aktuellen RDBMS-Darstellung in den Beitrag eingefügt.
Eine der Lösungen besteht darin, für jeden der Knoten ein weiteres Attribut zu erstellen, das die Übersetzung der Codes (: "Core tab 2" ({col2: 'NY', col2_description: 'New York'})))
enthält Eine andere Lösung besteht darin, die Beschreibungen der Codes in einer separaten Tabelle zu speichern und sie mit einer Funktion zu übersetzen, wenn wir sie benötigen. –