Graph-Verarbeitung mit SQL Server und Azure SQL-Datenbank
Gilt für: SQL Server 2017 (14.x) und höhere Versionen Azure SQL-Datenbank Azure SQL verwaltete Instanz SQL-Datenbank in Microsoft Fabric
SQL Server bietet Graph-Datenbankfunktionen zum Modellieren von m:n-Beziehungen. Die Graphbeziehungen sind in Transact-SQL integriert und erhalten die Vorteile der Verwendung von SQL Server als grundlegendes Datenbankverwaltungssystem.
Was ist eine Graphdatenbank?
Eine Graphdatenbank ist eine Sammlung von Knoten (oder Vertices) und Edges (oder Beziehungen). Ein Knoten repräsentiert eine Entität (z.B. eine Person oder eine Organisation), und eine Kante repräsentiert eine Beziehung zwischen den beiden Knoten, die durch die Kante verbunden sind (z.B. „Gefällt mir“-Markierungen oder Freunde). Beide Knoten und Kanten weisen möglicherweise Eigenschaften auf. Folgende Features machen eine Graphdatenbank einmalig:
- Kanten oder Beziehungen sind Entitäten der ersten Klasse in einer Graphdatenbank, denen Attribute oder Eigenschaften zugeordnet sein können.
- Eine einzelne Kante kann flexibel mehrere Knoten in einer Graphdatenbank verbinden.
- Musterabgleiche und Navigationsabfragen über mehrere Hops lassen sich ganz einfach ausdrücken.
- Transitive Abschlüsse und polymorphe Abfragen lassen sich ebenfalls sehr einfach ausdrücken.
Wann eine Diagrammdatenbank verwendet werden soll
Eine relationale Datenbank kann alles erreichen, was eine Graphdatenbank kann. Eine Diagrammdatenbank erleichtert jedoch das Ausdrücken bestimmter Arten von Abfragen. Außerdem können bestimmte Abfragen mit bestimmten Optimierungen besser ausgeführt werden. Ihre Entscheidung, entweder eine relationale datenbank oder eine Graphdatenbank auszuwählen, basiert auf folgenden Faktoren:
- Ihre Anwendung verfügt über hierarchische Daten. Der HierarchyID-Datentyp kann zum Implementieren von Hierarchien verwendet werden, hat jedoch einige Einschränkungen. So können Sie beispielsweise nicht mehrere übergeordnete Element für einen Knoten speichern.
- Ihre Anwendung verfügt über komplexe n:n-Beziehungen; wenn sich die Anwendung weiterentwickelt, werden neue Beziehungen hinzugefügt.
- Sie müssen miteinander verbundene Daten und Beziehungen analysieren.
In SQL Server 2017 eingeführte Graph-Features (14.x)
Die folgenden Features wurden in SQL Server 2017 eingeführt.
Erstellen von Diagrammobjekten
Transact-SQL-Erweiterungen ermöglichen Benutzern das Erstellen von Knoten- oder Edgetabellen. Beide Knoten und Kanten können Eigenschaften zugeordnet sein. Da Knoten und Kanten als Tabellen gespeichert werden, werden alle Vorgänge, die in relationalen Tabellen unterstützt werden, auf Knoten- oder Randtabellen unterstützt. Hier sehen Sie ein Beispiel:
CREATE TABLE Person (ID INTEGER PRIMARY KEY, Name VARCHAR(100), Age INT) AS NODE;
CREATE TABLE friends (StartDate date) AS EDGE;
Das folgende Diagramm zeigt, wie Knoten und Kanten als Tabellen gespeichert werden.
Abfragesprachenerweiterungen
Neue MATCH
Klausel wird eingeführt, um Musterabgleich und Multi-Hop-Navigation über das Diagramm zu unterstützen. Die MATCH
Funktion verwendet eine ASCII-Art-Formatvorlagensyntax für den Musterabgleich. Um beispielsweise Freunde von "John" zu finden:
-- Find friends of John
SELECT Person2.Name
FROM Person Person1, Friends, Person Person2
WHERE MATCH(Person1-(Friends)->Person2)
AND Person1.Name = 'John';
Vollständig in SQL Server-Datenbank-Engine integriert
Graph-Erweiterungen sind vollständig in das SQL Server-Modul integriert. Verwenden Sie dasselbe Speichermodul, Metadaten, Abfrageprozessor usw. zum Speichern und Abfragen von Diagrammdaten. Abfragen von diagramm- und relationalen Daten in einer einzelnen Abfrage. Das Kombinieren von Graphfunktionen mit anderen SQL Server-Technologien wie Columnstore-Indizes, HA, R-Diensten, etc. SQL Graph unterstützt auch alle Sicherheits- und Compliancefeatures, die mit SQL Server zur Verfügung stehen.
Werkzeug- und Ökosystem
Profitieren Sie von vorhandenen Tools und Ökosystemen, die SQL Server bietet. Tools wie Sicherung und Wiederherstellung, Import und Export, BCP funktionieren einfach sofort. Andere Tools oder Dienste wie SSIS, SSRS oder Power BI arbeiten mit Diagrammtabellen, genau wie sie mit relationalen Tabellen arbeiten.
Edgeeinschränkungen
Eine Randeinschränkung wird in einer Graph-Randtabelle definiert und ist ein Knotentabellenpaar, das ein bestimmter Edgetyp verbinden kann. Edgeeinschränkungen helfen Entwicklern, den Typ der Knoten einzuschränken, die ein bestimmter Rand verbinden kann.
Weitere Informationen zum Erstellen und Verwenden von Randeinschränkungen finden Sie unter Edgeeinschränkungen.
DML zusammenführen
Die MERGE-Anweisung führt Einfüge-, Aktualisierungs- oder Löschvorgänge für eine Zieltabelle basierend auf den Ergebnissen einer Verknüpfung mit einer Quelltabelle aus. Sie können beispielsweise zwei Tabellen synchronisieren, indem Sie Zeilen in eine Zieltabelle einfügen, aktualisieren oder löschen, basierend auf den Unterschieden zwischen der Zieltabelle und der Quelltabelle. Die Verwendung von MATCH-Prädikaten in einer MERGE-Anweisung wird jetzt für Azure SQL-Datenbank und SQL Server vNext unterstützt. Das heißt, es ist jetzt möglich, Ihre aktuellen Diagrammdaten (Knoten- oder Randtabellen) mit neuen Daten mithilfe der VERGLEICH-Prädikate zusammenzuführen, um Graphbeziehungen in einer einzelnen Anweisung anstelle separater INSERT/UPDATE/DELETE-Anweisungen anzugeben.
Weitere Informationen zur Verwendung der Übereinstimmung in der ZUSAMMENFÜHRUNGS-DML finden Sie in der MERGE-Anweisung.
Kürzester Pfad
Die funktion SHORTEST_PATH findet den kürzesten Pfad zwischen zwei Knoten in einem Diagramm oder beginnend von einem bestimmten Knoten zu allen anderen Knoten im Diagramm. SHORTEST PATH
kann auch verwendet werden, um eine transitive Schließung oder für beliebige Längendurchquerungen im Diagramm zu finden.
Fabric SQL-Datenbank
In der Fabric SQL-Datenbank ist SQL Graph zulässig, aber Knoten- und Edgetabellen spiegeln sich nicht in Fabric OneLake.
Zugehöriger Inhalt
- Lesen der SQL Graph-Datenbank – Architektur
- Informationen zu den ersten Schritten mit SQL Graph finden Sie unter SQL Graph-Datenbank – Beispiel