Geschäftsbeziehungen sind so vielfältig wie das Leben. Ein Geschäftspartner kann beispielsweise Kunde, Lieferant und Mitbewerber in einem sein. Mit Neo4J können Beziehungen zwischen Geschäftspartnern einfach erstellt und auf verständliche Art und Weise dargestellt werden. Dies hilft, bestehende Beziehungen in tieferen Ebenen zu verstehen und neue Erkenntnisse zu gewinnen.
Wer kennt diese Situation nicht. Man ist neu in einer Firma und wird zu einem Meeting mit einem wichtigen Geschäftspartner eingeladen. In folgendem fiktiven Fall ist der Geschäftspartner einer der grössten Kunden, die Firma VONBAU AG. Online findet man nur oberflächliche Informationen über die VONBAU AG. Wäre es nicht grossartig, die langjährige Geschäftsbeziehung zu diesem Kunden in einer visuell verständlichen Art und Weise einsehen zu können? Das geht, mit Neo4J. Neo4J ist eine Open-Source–Graphdatenbank welche Daten anstelle in Tabellen, in Graphen speichert. Dieser Blog zeigt in einfachen Schritten den Aufbau einer Graphdatenbank mitsamt Visualisierung auf.
Das Graphen 1×1
Graphen in Neo4J bestehen aus Knoten(nodes/ vertices) welche mit Beziehungen oder auch Kanten genannt (relationships/ edges/ links/ arcs), miteinander verbunden werden können. Knoten beschreiben diskrete Objekte eines Bereichs welche mit Labels nach Art weiter klassifiziert werden können. Beziehungen beschreiben die Verbindung zwischen einem Quellknoten (source node) und einem Zielknoten (target node). Anders als bei Knoten haben Beziehungen sogenannte Typen (types) welche die Art der Verbindung klassifizieren. Knoten und Beziehungen können Eigenschaften (properties) als Schlüssel-Wert-Paare (key-value pairs) beinhalten.
Einstieg und Aufbau einer Graphdatenbank
Die Einhaltung der nachfolgenden Abfolge bei der Erstellung einer Graphdatenbank ist wichtig, da ansonsten möglicherweise kein Graph erstellt werden kann. Im ersten Schritt wird definiert, welche Knoten und Labels erstellt werden sollen. Für dieses Beispiel gibt es drei Labels: Firmenname, Standort und Beziehungsart. Auch wenn unter dem Label „Standort“ ein Ort (z.B. Zürich) mehrfach vorhanden ist, so wird nur ein Knoten „Zürich“ mit Label „Standort“ erstellt. Im zweiten Schritt werden die Beziehungen definiert, durch welche die Knoten im letzten Schritt miteinander verbunden werden. In diesem Beispiel gibt es vier unterschiedliche Beziehungen: Liegt_in, liefert_an, hat_Beziehungsart und hat_Zweigniederlassung_in. Auch hier gilt: Jede Beziehung wird ein Mal erstellt und kann mehrfach verwendet werden. Der letzte Schritt verbindet dann die Knoten untereinander mit den Beziehungen. Jede Beziehung geht von einem Quellknoten in einer Pfeilrichtung zu einem Zielknoten. Deshalb ist es wichtig, die Knoten und Beziehungen korrekt anzuordnen. Die nachfolgende Abbildung zeigt die tabellarische Darstellung der Daten welche in Neo4J verarbeitet werden sollen.
Schritt 1: Erstellen von Knoten ( )
Für den Start kann die lokal installierbare und kostenlose Neo4j Desktop Anwendung verwendet werden. Cypher ist die verwendete Graphabfragensprache (graph query language). Um beim Beispiel der VONABU AG zu bleiben, wird zunächst ein Knoten mit dem Label «Firmenname» und der Eigenschaft «Firma» als Schlüssel und «VONBAU AG» als Wert erstellt. Für die Erstellung von Knoten werden runde Klammern ( ) verwendet, für Eigenschaften geschwungene Klammern { } und für Beziehungen eckige Klammern [ ].
Der Cypher Befehl für den VONBAU AG Knoten lautet: <code>CREATE (n:Firmenname{Firma:’VONBAU AG‘})<code>. Mit der Cypher Abfrage <code>MATCH (n) RETURN n<code> werden alle bisher erstellten Knoten dargestellt.
Mit dem vorherigen Cypher CREATE Befehl können weitere Knoten mit gleichen Labels und Knoten mit neuen Labels erstellt werden. Für diesen Fall wurden mehrere Knoten über die drei Labels «Firmenname», «Standort» und «Beziehungsart» erstellt. Der MATCH Befehl gibt alle erstellten Knoten im Graphen visualisiert zurück.
Schritt 2: Erstellen von Beziehungen [ ]
Um eine Beziehung zu erstellen, muss als erstes der Quellknoten und der Zielknoten mit dem «MATCH» Befehl ausgewählt werden, gefolgt vom CREATE Befehl, der die (Pfeil) Richtung sowie den Beziehungs-Typ definiert. Cypher Befehl: <code>MATCH (n:Firmenname{Firma:’VONBAU AG‘}), (k:Beziehungsart{Beziehungsart:’Kunde‘}) CREATE (n)-[:hat_Beziehungsart]->(k)<code>. Das Ergbnis kann mit <code>MATCH (n:Firmenname{Firma:’VONBAU AG‘}), (k:Beziehungsart{Beziehungsart:’Kunde‘}) RETURN n,k<code> wiedergegeben werden:
Weitere Beziehungen mit anderen Typen können mit denselben MATCH und CREATE Befehlen erfasst werden. Die Analyse des Graphen erfolgt in Neo4J Bloom, einer in Neo4J Desktop integrierten Graphen-App. Die Abfrage für den nachfolgenden finalen Graphen erfordert keine Kenntnisse der Abfragesprache Cypher und lässt sich mit einem Klick im Suchfenster starten.
Schritt 3: Interpretation des Graphen
Zum Glück hat der neue Mitarbeitende Zugriff auf Neo4J und kann sich so für das Meeting mit der VONBAU AG bestens vorbereiten. Zunächst fällt auf, dass die VONBAU AG nicht nur ein wichtiger Kunde zu sein scheint, sondern auch Lieferant von Waren ist und im selben Zug auch in einem Mitbewerber-Verhältnis steht. Der Graph zeigt zudem bisher verborgene Verbindungen zwischen der VONBAU AG und weiteren Geschäftspartnern auf. Man erkennt, dass die VONBAU AG die Firma Spinlog AG (Kunde) als Lieferadresse verwendet. Die Spinlog AG hat vier Geschäftsstellen (Standorte) in der Schweiz und verwendet zudem die Lieferadressen zweier Firmen, zu welchen keine direkte Geschäftsbeziehung besteht. Die Tatsache, dass jeder Standort dieser vier Firmen nur einmal vorkommt, lässt darauf schliessen, dass die Zusammenarbeit dieser vier Unternehmen kein Zufall ist und dahinter Geschäftspartnerschaften stehen.
Fazit
Der aufgebaute Neo4J Graph erlaubt es das Netzwerk hinter einem Geschäftspartner zu durchleuchten und alle Beziehungen aufzuzeigen. Neue und bisher verborgene Ebenen wie Geschäftsbeziehungen, Zweigniederlassungen, Lieferwege bis hin zur geografischen Marktabdeckung kommen so zum Vorschein. Mitarbeitende einer Firma erhalten mit der Graphen-Darstellungsart schnell eine Übersicht über den betreffenden Geschäftspartner und die gesamte Ausgangslage. Dieses Domänenwissen ist ein grosser Mehrwert, wenn es darum geht Sachverhalte zu verstehen und Entscheidungen zu treffen.
Die grösste Schwierigkeit in der Arbeit mit dem Werkzeug Neo4J liegt aus meiner Sicht bei der Definition und Zuordnung von Knoten. Welches Objekt ist ein Knoten und welche Inhalte werden einem Knoten als Eigenschaften zugeordnet? Eine einfache Skizzierung der Ausgangslage kann bei dieser Frage zu einer schnellen Lösung führen. Neo4J bietet zur Graphen Modellierung hilfreiche Tipps und Tricks: Graph Data Modeling Tips & Tricks