Einführung in SQL Server 2017-Grafikdatenbanken

Am Vorabend des Kursbeginns "MS SQL Server Developer" haben wir eine weitere nützliche Übersetzung für Sie vorbereitet.








Graphendatenbanken sind eine wichtige Technologie für Datenbankprofis. Ich versuche, mit Innovationen und neuen Technologien in diesem Bereich Schritt zu halten, und nach der Arbeit mit relationalen und NoSQL-Datenbanken sehe ich, dass die Rolle von Graphendatenbanken immer wichtiger wird. Bei der Arbeit mit komplexen hierarchischen Daten sind nicht nur herkömmliche Datenbanken, sondern auch NoSQL unwirksam. Mit zunehmender Anzahl von Verbindungsebenen und der Größe der Basis nimmt die Leistung häufig ab. Und wenn die Beziehungen komplexer werden, steigt auch die Anzahl der JOINs.



Natürlich gibt es im relationalen Modell Lösungen für die Arbeit mit Hierarchien (z. B. unter Verwendung rekursiver CTEs), aber dies sind immer noch Problemumgehungen. Gleichzeitig können Sie mit der Funktionalität der SQL Server-Diagrammdatenbanken problemlos mehrere Hierarchieebenen verarbeiten. Sowohl das Datenmodell als auch die Abfragen sind vereinfacht und daher effizienter. Die Codemenge wird erheblich reduziert.



Graphendatenbanken sind eine Ausdruckssprache zur Darstellung komplexer Systeme. Diese Technologie ist in der IT-Branche bereits in Bereichen wie Social Media, Betrugsbekämpfungssystemen, IT-Netzwerkanalyse, sozialen Empfehlungen, Produkt- und Inhaltsempfehlungen weit verbreitet.



Die Grafikdatenbankfunktionalität in SQL Server eignet sich für Szenarien, in denen die Daten eng gekoppelt sind und genau definierte Beziehungen aufweisen.



Diagrammdatenmodell



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



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



Im Gegensatz zu anderen Datenmodellen haben in Diagrammdatenbanken Beziehungen zwischen Entitäten Vorrang. Daher ist es nicht erforderlich, Beziehungen mit Fremdschlüsseln oder anderen Mitteln zu berechnen. Sie können komplexe Datenmodelle nur mit Scheitelpunkt- und Kantenabstraktionen erstellen.



In der modernen Welt erfordert die Modellierung von Beziehungen immer ausgefeiltere Techniken. Für die Modellierung von Beziehungen bietet SQL Server 2017 Funktionen für Diagrammdatenbanken. Scheitelpunkte und Kanten des Diagramms werden als neue Tabellentypen dargestellt: NODE und EDGE. Eine neue T-SQL-Funktion namens MATCH () wird zum Abfragen des Diagramms verwendet. Da diese Funktionalität in SQL Server 2017 integriert ist, kann sie in Ihren vorhandenen Datenbanken verwendet werden, ohne dass eine Konvertierung erforderlich ist.



Vorteile des Diagrammmodells



Unternehmen und Benutzer fordern heute Anwendungen, die immer mehr Daten verarbeiten und gleichzeitig eine hohe Leistung und Zuverlässigkeit erwarten. Die Darstellung von Daten in Form eines Diagramms bietet eine bequeme Möglichkeit, komplexe Beziehungen zu handhaben. Dieser Ansatz löst viele Probleme und hilft Ihnen, Ergebnisse in einem bestimmten Kontext zu erzielen.



Es scheint, dass in Zukunft viele Anwendungen von der Verwendung von Diagrammdatenbanken profitieren werden.



Datenmodellierung: Vom relationalen zum Diagrammmodell





Beispiel



Schauen wir uns ein Beispiel für eine Organisationsstruktur mit einer Hierarchie von Mitarbeitern an: Ein Mitarbeiter berichtet an einen Manager, ein Manager berichtet an einen Senior Manager und so weiter. Diese Hierarchie kann je nach Unternehmen eine beliebige Anzahl von Ebenen haben. Mit zunehmender Anzahl von Ebenen wird es jedoch immer schwieriger, Beziehungen in einer relationalen Datenbank zu berechnen. Es ist ziemlich schwierig, die Hierarchie der Mitarbeiter, die Hierarchie im Marketing oder in der Kommunikation über soziale Medien darzustellen. Lassen Sie uns sehen, wie SQL Graph das Problem der Behandlung verschiedener Hierarchieebenen lösen kann.



In diesem Beispiel erstellen wir ein einfaches Datenmodell. Erstellen wir eine EMP- Mitarbeitertabelle mit einer EMPNO- Kennung und einer MGR- Spalteunter Angabe der Kennung des Managers (Managers) des Mitarbeiters. Alle Informationen zur Hierarchie sind in dieser Tabelle gespeichert und können über die Spalten EMPNO und MGR abgefragt werden .





Das folgende Diagramm zeigt dasselbe Organigrammmodell mit vier Verschachtelungsebenen in einer bekannteren Form. Mitarbeiter sind die Eckpunkte des Diagramms aus der EMP- Tabelle . Die Entität "Mitarbeiter" ist über den Link "Submits" (ReportsTo) mit sich selbst verbunden. In grafischen Begriffen ist eine Verknüpfung eine Kante (EDGE), die die Knoten (NODE) ​​von Mitarbeitern verbindet.







Erstellen wir eine reguläre EMP- Tabelle und fügen dort die Werte gemäß dem obigen Diagramm 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 berichtet an 7902;
  • Mitarbeiter mit EMPNO 7902 gehorcht 7566
  • Mitarbeiter mit EMPNO 7566 gehorcht 7839




Schauen wir uns nun eine grafische Darstellung derselben Daten an. Der EMPLOYEE-Knoten hat mehrere Attribute und ist durch die "obey" -Beziehung (EmplReportsTo) mit sich selbst verbunden. EmplReportsTo ist der Name der Beziehung.



Die Kantentabelle (EDGE) kann auch Attribute enthalten.





Erstellen der EmpNode-Knotentabelle



Die Syntax zum Erstellen eines Knotens ist recht einfach: Die Anweisung CREATE TABLE wird am Ende mit "AS NODE" angehängt .



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 von einer regulären Tabelle in eine grafische konvertieren. Das nächste INSERT fügt Daten aus der relationalen EMP- Tabelle ein .



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




Die Knoten- $node_id_*ID wird in Form von JSON in einer speziellen Spalte in der Knotentabelle gespeichert. Die verbleibenden Spalten dieser Tabelle enthalten die Knotenattribute.



Kanten erstellen (EDGE)



Das Erstellen einer Kantentabelle ist dem Erstellen einer Knotentabelle sehr ähnlich, außer dass das Schlüsselwort "AS EDGE" verwendet wird .



CREATE TABLE empReportsTo(Deptno int) AS EDGE






Definieren wir nun die Beziehungen zwischen Mitarbeitern anhand der Spalten EMPNO und MGR . Das Organigramm zeigt, wie INSERT geschrieben wird .



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 Standardkantentabelle enthält drei Spalten. Der erste $edge_idist der JSON-Bezeichner der Kante. Die anderen beiden ( $from_idund $to_id) repräsentieren die Kommunikation zwischen den Knoten. Darüber hinaus können Rippen zusätzliche Eigenschaften haben. In unserem Fall ist dies Deptno .



Systemansichten



In der Systemansicht gibt es sys.tableszwei neue Spalten:



  1. is_edge
  2. is_node


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






SSMS



Diagrammbezogene Objekte befinden sich im Ordner "Diagrammtabellen". Das Knotentabellensymbol ist mit einem Punkt markiert, und das Kantentabellensymbol ist mit zwei verknüpften Kreisen markiert (die ein bisschen wie eine Brille aussehen).





MATCH Ausdruck



Der MATCH- Ausdruck stammt aus CQL (Cypher Query Language). Dies ist eine effiziente Möglichkeit, die Eigenschaften eines Diagramms abzufragen. CQL beginnt mit einem MATCH- Ausdruck .



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


Beispiele



Schauen wir uns einige Beispiele an.



Die folgende Abfrage zeigt die Mitarbeiter an, denen Smith und sein Manager Bericht erstatten.



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'




Die nächste Abfrage betrifft die Suche nach Mitarbeitern und Managern der zweiten Ebene für Smith. Wenn Sie die WHERE-Klausel entfernen , werden im 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'




Und schließlich eine Anfrage für Mitarbeiter und Manager 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'




Jetzt ändern wir die Richtung, um Smiths Chefs zu bekommen.



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)




Fazit



SQL Server 2017 hat sich als vollständige Unternehmenslösung für verschiedene IT-Geschäftsherausforderungen etabliert. Die erste Version von SQL Graph ist sehr vielversprechend. Trotz einiger Einschränkungen gibt es bereits genügend Funktionen, um die Funktionen von Diagrammen zu erkunden.



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



Keine Unterstützung für Polymorphismus.



  • .
  • $from_id $to_id UPDATE.
  • (transitive closure), CTE.
  • In-Memory OLTP.
  • (System-Versioned Temporal Table), .
  • NODE EDGE.
  • (cross-database queries).
  • - (wizard) .
  • GUI, Power BI.






:






All Articles