Einführung in SQL Server 2017-Grafikdatenbanken

Vor Kursbeginn „MS SQL Server-Entwickler“ Wir haben eine weitere nützliche Übersetzung für Sie vorbereitet.

Graphdatenbanken sind eine wichtige Technologie für Datenbankprofis. Ich versuche, die Innovationen und neuen Technologien in diesem Bereich zu verfolgen und nachdem ich mit relationalen und NoSQL-Datenbanken gearbeitet habe, sehe ich, dass die Rolle von Graphdatenbanken immer wichtiger wird. Bei der Arbeit mit komplexen hierarchischen Daten sind nicht nur herkömmliche Datenbanken, sondern auch NoSQL wirkungslos. Mit zunehmender Anzahl der Linkebenen und der Größe der Datenbank kommt es häufig zu einem Leistungsabfall. Und je komplexer die Beziehungen werden, desto mehr JOINs gibt es auch.

Natürlich gibt es im relationalen Modell Lösungen für die Arbeit mit Hierarchien (zum Beispiel durch die Verwendung rekursiver CTEs), aber das sind immer noch Workarounds. Gleichzeitig erleichtert die Funktionalität von SQL Server-Graphdatenbanken den Umgang mit mehreren Hierarchieebenen. Sowohl das Datenmodell als auch die Abfragen werden vereinfacht und dadurch ihre Effizienz erhöht. Reduziert die Codemenge erheblich.

Graphdatenbanken sind eine ausdrucksstarke Sprache zur Darstellung komplexer Systeme. Diese Technologie wird in der IT-Branche bereits weit verbreitet in Bereichen wie sozialen Netzwerken, Betrugsbekämpfungssystemen, IT-Netzwerkanalyse, sozialen Empfehlungen sowie Produkt- und Inhaltsempfehlungen eingesetzt.

Die Diagrammdatenbankfunktionalität in SQL Server eignet sich für Szenarien, in denen die Daten stark miteinander verbunden sind und klar definierte Beziehungen aufweisen.

Diagrammdatenmodell

Ein Graph ist eine Menge von Eckpunkten (Knoten, Knoten) und Kanten (Beziehungen, Kante). Scheitelpunkte stellen Entitäten dar und Kanten stellen Verbindungen dar, deren Attribute Informationen enthalten können.

Eine Graphendatenbank modelliert Entitäten als Graphen, wie in der Graphentheorie definiert. Datenstrukturen sind Eckpunkte und Kanten. Attribute sind Eigenschaften von Scheitelpunkten und Kanten. Eine Verbindung ist eine Verbindung von Eckpunkten.

Im Gegensatz zu anderen Datenmodellen priorisieren Diagrammdatenbanken die Beziehungen zwischen Entitäten. Daher besteht keine Notwendigkeit, Beziehungen mithilfe von Fremdschlüsseln oder auf andere Weise zu berechnen. Es ist möglich, komplexe Datenmodelle nur mit Scheitelpunkt- und Kantenabstraktionen zu erstellen.

In der heutigen Welt erfordert die Modellierung von Beziehungen immer ausgefeiltere Techniken. Um Beziehungen zu modellieren, bietet SQL Server 2017 Diagrammdatenbankfunktionen. Die Eckpunkte und Kanten des Diagramms werden als neue Tabellentypen dargestellt: NODE und EDGE. Diagrammabfragen verwenden eine neue T-SQL-Funktion namens MATCH(). Da diese Funktionalität in SQL Server 2017 integriert ist, kann sie in Ihren vorhandenen Datenbanken verwendet werden, ohne dass eine Datenbankkonvertierung erforderlich ist.

Vorteile des Graphenmodells

Heutzutage verlangen Unternehmen und Benutzer Anwendungen, die mit immer mehr Daten arbeiten, und erwarten gleichzeitig eine hohe Leistung und Zuverlässigkeit. Die grafische Darstellung von Daten bietet eine praktische Möglichkeit zur Handhabung komplexer Zusammenhänge. Dieser Ansatz löst viele Probleme und hilft, Ergebnisse innerhalb eines bestimmten Kontexts zu erzielen.

Es sieht so aus, als würden in Zukunft viele Anwendungen von Graphdatenbanken profitieren.

Datenmodellierung: Von der relationalen zur Diagrammmodellierung

Einführung in SQL Server 2017-Grafikdatenbanken
Beispiel

Schauen wir uns ein Beispiel einer Organisationsstruktur mit einer Hierarchie von Mitarbeitern an: Ein Mitarbeiter berichtet an einen Manager, ein Manager an einen leitenden Manager und so weiter. Je nach Unternehmen kann es in dieser Hierarchie beliebig viele Ebenen geben. Doch mit zunehmender Anzahl der Ebenen wird die Berechnung von Beziehungen in einer relationalen Datenbank immer schwieriger. Es ist ziemlich schwierig, sich die Hierarchie der Mitarbeiter, die Hierarchie im Marketing oder die Social-Media-Verbindungen vorzustellen. Sehen wir uns an, wie SQL Graph das Problem der Handhabung verschiedener Hierarchieebenen lösen kann.

Für dieses Beispiel erstellen wir ein einfaches Datenmodell. Erstellen Sie eine Mitarbeitertabelle EMP mit Ausweis EMPNO und Spalte MGRA, das auf die ID des Vorgesetzten (Managers) des Mitarbeiters verweist. Alle Informationen zur Hierarchie werden in dieser Tabelle gespeichert und können über Spalten abgefragt werden EMPNO и MGR.

Einführung in SQL Server 2017-Grafikdatenbanken
Das folgende Diagramm zeigt außerdem dasselbe Organigrammmodell mit vier Verschachtelungsebenen in einer bekannteren Form. Mitarbeiter sind die Eckpunkte des Diagramms aus der Tabelle EMP. Die Entität „Mitarbeiter“ ist durch die Beziehung „submits“ (ReportsTo) mit sich selbst verknüpft. In grafischer Hinsicht ist ein Link eine Kante (EDGE), die Knoten (NODEs) von Mitarbeitern verbindet.

Einführung in SQL Server 2017-Grafikdatenbanken

Lassen Sie uns eine reguläre Tabelle erstellen EMP und fügen Sie dort Werte gemäß dem Diagramm oben hinzu.

CREATE TABLE EMP
(EMPNO INT NOT NULL,
ENAME VARCHAR(20),
JOB VARCHAR(10),
MGR INT,
JOINDATE DATETIME,
SALARY DECIMAL(7, 2),
COMMISIION DECIMAL(7, 2),
DNO INT)
 
INSERT INTO EMP VALUES
(7369, 'SMITH', 'CLERK', 7902, '02-MAR-1970', 8000, NULL, 2),
(7499, 'ALLEN', 'SALESMAN', 7698, '20-MAR-1971', 1600, 3000, 3),
(7521, 'WARD', 'SALESMAN', 7698, '07-FEB-1983', 1250, 5000, 3),
(7566, 'JONES', 'MANAGER', 7839, '02-JUN-1961', 2975, 50000, 2),
(7654, 'MARTIN', 'SALESMAN', 7698, '28-FEB-1971', 1250, 14000, 3),
(7698, 'BLAKE', 'MANAGER', 7839, '01-JAN-1988', 2850, 12000, 3),
(7782, 'CLARK', 'MANAGER', 7839, '09-APR-1971', 2450, 13000, 1),
(7788, 'SCOTT', 'ANALYST', 7566, '09-DEC-1982', 3000, 1200, 2),
(7839, 'KING', 'PRESIDENT', NULL, '17-JUL-1971', 5000, 1456, 1),
(7844, 'TURNER', 'SALESMAN', 7698, '08-AUG-1971', 1500, 0, 3),
(7876, 'ADAMS', 'CLERK', 7788, '12-MAR-1973', 1100, 0, 2),
(7900, 'JAMES', 'CLERK', 7698, '03-NOV-1971', 950, 0, 3),
(7902, 'FORD', 'ANALYST', 7566, '04-MAR-1961', 3000, 0, 2),
(7934, 'MILLER', 'CLERK', 7782, '21-JAN-1972', 1300, 0, 1)

Die folgende Abbildung zeigt die Mitarbeiter:

  • Mitarbeiter mit EMPNO 7369 ist 7902 untergeordnet;
  • Mitarbeiter mit EMPNO 7902 ist 7566 untergeordnet
  • Mitarbeiter mit EMPNO 7566 ist 7839 untergeordnet

Einführung in SQL Server 2017-Grafikdatenbanken
Schauen wir uns nun die Darstellung derselben Daten in Form eines Diagramms an. Der EMPLOYEE-Knoten verfügt über mehrere Attribute und ist durch eine „Submits“-Beziehung (EmplReportsTo) mit sich selbst verknüpft. EmplReportsTo ist der Name der Beziehung.

Die Kantentabelle (EDGE) kann auch Attribute haben.

Einführung in SQL Server 2017-Grafikdatenbanken
Erstellen Sie eine Knotentabelle EmpNode

Die Syntax zum Erstellen eines Knotens ist recht einfach: zum Ausdruck TABELLE ERSTELLEN am Ende hinzugefügt ALS KNOTEN.

CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;

Lassen Sie uns nun die Daten aus einer regulären Tabelle in eine Diagrammtabelle umwandeln. Nächste INSERT fügt Daten aus einer relationalen Tabelle ein EMP.

INSERT INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp

Einführung in SQL Server 2017-Grafikdatenbanken
In der Knotentabelle in einer speziellen Spalte $node_id_* Die Host-ID wird als JSON gespeichert. Die restlichen Spalten dieser Tabelle enthalten die Attribute des Knotens.

Kanten erstellen (EDGE)

Das Erstellen einer Kantentabelle ist dem Erstellen einer Knotentabelle sehr ähnlich, mit Ausnahme des Schlüsselworts ALS KANTE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Einführung in SQL Server 2017-Grafikdatenbanken

Definieren wir nun Beziehungen zwischen Mitarbeitern mithilfe von Spalten EMPNO и MGR. Das Organigramm zeigt deutlich, wie man schreibt INSERT.

INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 1),
   	(SELECT $node_id FROM EmpNode WHERE id = 13),20);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 2),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),10);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 3),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),10)
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 4),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 5),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 6),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 7),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 8),
   	(SELECT $node_id FROM EmpNode WHERE id = 4),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 9),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 10),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 11),
   	(SELECT $node_id FROM EmpNode WHERE id = 8),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 12),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 13),
   	(SELECT $node_id FROM EmpNode WHERE id = 4),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 14),
   	(SELECT $node_id FROM EmpNode WHERE id = 7),30);

Die Kantentabelle verfügt standardmäßig über drei Spalten. Erste, $edge_id – Kantenkennung in Form von JSON. Die anderen zwei ($from_id и $to_id) stellen die Beziehung zwischen Knoten dar. Darüber hinaus können Kanten zusätzliche Eigenschaften haben. In unserem Fall das Abt.nr.

Systemansichten

In der Systemansicht sys.tables Es gibt zwei neue Spalten:

  1. is_edge
  2. is_node

SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'

Einführung in SQL Server 2017-Grafikdatenbanken

SMS

Objekte, die sich auf Diagramme beziehen, befinden sich im Ordner „Diagrammtabellen“. Das Knotentabellensymbol ist mit einem Punkt markiert und das Randtabellensymbol ist mit zwei verbundenen Kreisen markiert (die ein bisschen wie eine Brille aussehen).

Einführung in SQL Server 2017-Grafikdatenbanken

MATCH-Ausdruck

Ausdruck PASSEN ZU entnommen aus CQL (Cypher Query Language). Dies ist eine effiziente Möglichkeit, die Eigenschaften eines Diagramms abzufragen. CQL beginnt mit einem Ausdruck PASSEN ZU.

Syntax

MATCH (<graph_search_pattern>)
 
<graph_search_pattern>::=
    {<node_alias> {
                 	{ <-( <edge_alias> )- }
               	| { -( <edge_alias> )-> }
             	<node_alias>
             	}
 	}
 	[ { AND } { ( <graph_search_pattern> ) } ]
 	[ ,...n ]
 
<node_alias> ::=
    node_table_name | node_alias
 
<edge_alias> ::=
    edge_table_name | edge_alias

Примеры

Schauen wir uns ein paar Beispiele an.

Die folgende Abfrage zeigt die Mitarbeiter an, denen Smith und sein Manager unterstellt sind.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR
FROM
    empnode e, empnode e1, empReportsTo m
WHERE
    MATCH(e-(m)->e1)
and e.ENAME='SMITH'

Einführung in SQL Server 2017-Grafikdatenbanken
Die folgende Abfrage dient der Suche nach Mitarbeitern und Managern der zweiten Ebene für Smith. Wenn Sie das Angebot entfernen WO, dann werden als Ergebnis alle Mitarbeiter angezeigt.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR
FROM
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2
WHERE
    MATCH(e-(m)->e1-(m1)->e2)
and e.ENAME='SMITH'

Einführung in SQL Server 2017-Grafikdatenbanken
Und zum Schluss noch eine Bitte an Mitarbeiter und Führungskräfte der dritten Ebene.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
FROM
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
WHERE
    MATCH(e-(m)->e1-(m1)->e2-(m2)->e3)
and e.ENAME='SMITH'

Einführung in SQL Server 2017-Grafikdatenbanken
Jetzt ändern wir die Richtung, um Smiths Bosse zu schnappen.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
FROM
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
WHERE
    MATCH(e<-(m)-e1<-(m1)-e2<-(m2)-e3)

Einführung in SQL Server 2017-Grafikdatenbanken

Abschluss

SQL Server 2017 hat sich als umfassende Unternehmenslösung für eine Vielzahl geschäftlicher IT-Anforderungen etabliert. Die erste Version von SQL Graph ist sehr vielversprechend. Trotz einiger Einschränkungen gibt es bereits genügend Funktionalität, um die Möglichkeiten von Diagrammen zu erkunden.

Die SQL Graph-Funktionalität ist vollständig in SQL Engine integriert. Allerdings weist SQL Server 2017, wie bereits erwähnt, folgende Einschränkungen auf:

Keine Unterstützung für Polymorphismus.

  • Es werden nur unidirektionale Links unterstützt.
  • Edges können ihre $from_id- und $to_id-Spalten nicht über UPDATE aktualisieren.
  • Transitive Abschlüsse werden nicht unterstützt, können aber mithilfe von CTEs erhalten werden.
  • Eingeschränkte Unterstützung für In-Memory-OLTP-Objekte.
  • Temporale Tabellen (Systemversioned Temporal Table), temporäre lokale und globale Tabellen werden nicht unterstützt.
  • Tabellentypen und Tabellenvariablen können nicht als NODE oder EDGE deklariert werden.
  • Datenbankübergreifende Abfragen werden nicht unterstützt.
  • Es gibt keine direkte Möglichkeit oder eine Art Assistent (Assistent), um reguläre Tabellen in Diagrammtabellen umzuwandeln.
  • Es gibt keine GUI zum Anzeigen von Diagrammen, aber Power BI kann verwendet werden.

Einführung in SQL Server 2017-Grafikdatenbanken

Weiterlesen:

Source: habr.com

Kommentar hinzufügen