Aféierung an SQL Server 2017 Grafik Datebanken

Virum Ufank vum Cours "MS SQL Server Entwéckler" Mir hunn eng aner nëtzlech Iwwersetzung fir Iech virbereet.

Grafikdatenbanken sinn eng wichteg Technologie fir Datebankfachleit. Ech probéieren d'Innovatiounen an nei Technologien an dësem Beräich ze verfollegen an nodeems ech mat relationalen an NoSQL Datenbanken geschafft hunn, gesinn ech datt d'Roll vun de Grafikdatenbanken ëmmer méi gëtt. Wann Dir mat komplexen hierarcheschen Donnéeën schafft, sinn net nëmmen traditionell Datenbanken, awer och NoSQL ineffektiv. Dacks, mat enger Erhéijung vun der Zuel vun de Linkniveauen an der Gréisst vun der Datebank, gëtt et eng Ofsenkung vun der Leeschtung. A wéi d'Relatiounen méi komplex ginn, geet d'Zuel vun de JOINs och erop.

Natierlech ginn et am relationelle Modell Léisunge fir mat Hierarchien ze schaffen (zum Beispill rekursive CTEs benotzen), awer dëst sinn nach ëmmer Léisungen. Zur selwechter Zäit mécht d'Funktionalitéit vu SQL Server Grafikdatenbanken et einfach fir verschidde Niveauen vun der Hierarchie ze handhaben. Souwuel den Datemodell wéi och d'Ufroe si vereinfacht, an dofir gëtt hir Effizienz erhéicht. Däitlech reduzéiert d'Quantitéit vum Code.

Grafik Datenbanken sinn eng expressiv Sprooch fir komplex Systemer ze representéieren. Dës Technologie ass scho ganz wäit an der IT Industrie benotzt a Beräicher wéi sozialen Netzwierker, Anti-Betrug Systemer, IT Netzwierk Analyse, sozial Empfehlungen, Produkt an Inhalt Empfehlungen.

D'Grafikdatebankfunktionalitéit am SQL Server ass gëeegent fir Szenarie wou d'Donnéeën héich matenee verbonne sinn an gutt definéiert Bezéiungen hunn.

Grafik Daten Modell

Eng Grafik ass eng Rei vu Wirbelen (Noden, Node) a Kanten (Relatiounen, Rand). Vertices representéieren Entitéiten, a Kante representéieren Linken deenen hir Attributer Informatioun enthalen kënnen.

Eng Grafik Datebank modelléiert Entitéiten als Grafik wéi an der Grafiktheorie definéiert. Datestrukture sinn Wirbelen a Kanten. Attributer sinn Eegeschafte vun Wirbelen a Kanten. Eng Verbindung ass eng Verbindung vu Wirbelen.

Am Géigesaz zu aneren Datemodeller, prioritär Grafikdatenbanken Bezéiungen tëscht Entitéiten. Dofir ass et net néideg Relatiounen mat auslännesche Schlësselen ze berechnen oder op eng aner Manéier. Et ass méiglech komplex Datemodeller ze kreéieren nëmme mat Vertex- a Randabstraktiounen.

An der heiteger Welt erfuerdert d'Modelléierungsbezéiungen ëmmer méi raffinéiert Techniken. Fir Relatiounen ze modelléieren, bitt SQL Server 2017 Grafik Datebankfäegkeeten. D'Wirbelen an d'Kante vun der Grafik ginn als nei Zorte vun Dëscher duergestallt: NODE an EDGE. Grafik Ufroen benotzen eng nei T-SQL Funktioun mam Numm MATCH (). Zënter datt dës Funktionalitéit an SQL Server 2017 agebaut ass, kann se an Ären existente Datenbanken benotzt ginn ouni d'Notzung vun enger Datebankkonversioun.

Virdeeler vum Grafikmodell

Hautdesdaags fuerderen d'Entreprisen an d'Benotzer Uwendungen déi mat ëmmer méi Daten funktionnéieren, wärend héich Leeschtung an Zouverlässegkeet erwaarden. D'Grafik Representatioun vun Daten bitt e praktescht Mëttel fir komplex Bezéiungen ze handhaben. Dës Approche léist vill Problemer an hëlleft Resultater an engem bestëmmte Kontext ze kréien.

Et gesäit aus wéi vill Uwendungen an Zukunft vu Grafikdatenbanken profitéieren.

Datemodelléierung: Vun Relational bis Grafikmodelléierung

Aféierung an SQL Server 2017 Grafik Datebanken
Beispill:

Loosst eis e Beispill vun enger Organisatiounsstruktur mat enger Hierarchie vun de Mataarbechter kucken: en Employé mellt sech un e Manager, e Manager mellt sech un engem Senior Manager, asw. Ofhängeg vun der spezifescher Firma kann et all Zuel vun Niveauen an dëser Hierarchie sinn. Awer wéi d'Zuel vun den Niveauen eropgeet, gëtt d'Berechnung vun Bezéiungen an enger relationaler Datebank ëmmer méi schwéier. Et ass zimmlech schwéier d'Hierarchie vun de Mataarbechter virzestellen, d'Hierarchie am Marketing oder soziale Medienverbindungen. Loosst eis kucken wéi SQL Graph de Problem vun der Handhabung vu verschiddenen Hierarchieniveauen léise kann.

Fir dëst Beispill, loosst eis en einfachen Datemodell maachen. Schafen en Dësch vun Mataarbechter PMS mat id EMPNO a Kolonn M.G.R.A déi op d'ID vum Chef (Manager) vum Employé weist. All Informatioun iwwer d'Hierarchie gëtt an dëser Tabelle gespäichert a ka mat Spalten gefrot ginn EMPNO и M.G.R..

Aféierung an SQL Server 2017 Grafik Datebanken
Déi folgend Diagramm weist och deeselwechten Org-Diagrammmodell mat véier Nistniveauen an enger méi vertrauter Form. D'Employéen sinn d'Wierder vun der Grafik aus der Tabell PMS. D'Entitéit "Employé" ass mat sech selwer verbonnen duerch d'Relatioun "submits" (ReportsTo). A Grafikbegrëffer ass e Link e Rand (EDGE) deen Noden (NODEs) vun de Mataarbechter verbënnt.

Aféierung an SQL Server 2017 Grafik Datebanken

Loosst eis e regelméissegen Dësch erstellen PMS a addéiere Wäerter do no dem Diagramm hei uewen.

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)

D'Figur hei ënnen weist d'Mataarbechter:

  • Mataarbechter mat EMPNO 7369 ass ënnergeuerdnet zu 7902;
  • Mataarbechter mat EMPNO 7902 ënnergeuerdnet zu 7566
  • Mataarbechter mat EMPNO 7566 ënnergeuerdnet zu 7839

Aféierung an SQL Server 2017 Grafik Datebanken
Loosst eis elo d'Representatioun vun de selwechten Donnéeën a Form vun enger Grafik kucken. Den EMPLOYEE Node huet verschidde Attributer a gëtt u sech selwer duerch eng "submits" Relatioun (EmplReportsTo) verbonnen. EmplReportsTo ass den Numm vun der Bezéiung.

De Randtabelle (EDGE) kann och Attributer hunn.

Aféierung an SQL Server 2017 Grafik Datebanken
Schafen eng Node Dësch EmpNode

D'Syntax fir en Node ze kreéieren ass ganz einfach: zum Ausdrock SCHAFFT TABEL op d'Enn bäigefüügt AS NODE.

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

Loosst eis elo d'Donnéeën vun enger regulärer Tabell an eng Grafik konvertéieren. Nächst INSERT setzt Daten aus enger relationaler Tabelle PMS.

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

Aféierung an SQL Server 2017 Grafik Datebanken
Am Node Dësch an enger spezieller Kolonn $node_id_* d'Host ID gëtt als JSON gespäichert. Déi reschtlech Kolonnen vun dëser Tabell enthalen d'Attributer vum Node.

Erstelle Kanten (EDGE)

Eng Randtabell erstellen ass ganz ähnlech wéi eng Node-Tabelle erstellen, ausser datt de Schlësselwuert AS EDGE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Aféierung an SQL Server 2017 Grafik Datebanken

Loosst eis elo Relatiounen tëscht Mataarbechter definéieren mat Spalten EMPNO и M.G.R.. D'Org Chart weist kloer wéi ee schreift 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);

De Randtabelle huet dräi Sailen par défaut. Éischten, $edge_id - Randidentifizéierer a Form vu JSON. Déi aner zwee ($from_id и $to_id) representéieren d'Relatioun tëscht Noden. Zousätzlech kënnen d'Kante zousätzlech Eegeschaften hunn. An eisem Fall, dëst Dept.

System Meenung

Am System Vue sys.tables Et ginn zwou nei Kolonnen:

  1. ass_rand
  2. ass_node

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

Aféierung an SQL Server 2017 Grafik Datebanken

ssms

Objekter am Zesummenhang mat Grafike sinn am Dossier Graph Tables. D'Node Dësch Ikon ass mat engem Punkt markéiert, an der Kant Dësch Ikon ass mat zwee verbonne Kreeser markéiert (déi e bësse wéi Brëller ausgesäit).

Aféierung an SQL Server 2017 Grafik Datebanken

MATCH Ausdrock

Ausdrock MATCH aus CQL (Cypher Query Language) geholl. Dëst ass en effiziente Wee fir d'Eegeschafte vun enger Grafik ze froen. CQL fänkt mat engem Ausdrock un MATCH.

Siwebiergen

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

Beispiller

Loosst eis e puer Beispiller kucken.

D'Ufro hei drënner weist d'Mataarbechter un déi de Smith a säi Manager mellen.

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'

Aféierung an SQL Server 2017 Grafik Datebanken
Déi folgend Ufro ass fir Mataarbechter an zweete Niveau Manager fir Smith ze fannen. Wann Dir d'Offer ewechhuelen WOU, da ginn all Mataarbechter als Resultat ugewisen.

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'

Aféierung an SQL Server 2017 Grafik Datebanken
A schlussendlech eng Demande fir drëtt-Niveau Mataarbechter a Manager.

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'

Aféierung an SQL Server 2017 Grafik Datebanken
Loosst eis d'Richtung änneren fir dem Smith seng Bosse ze kréien.

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)

Aféierung an SQL Server 2017 Grafik Datebanken

Konklusioun

SQL Server 2017 huet sech als komplett Enterprise-Léisung fir eng Vielfalt vu Business IT Bedierfnesser etabléiert. Déi éischt Versioun vu SQL Graph ass ganz villverspriechend. Och trotz e puer Aschränkungen ass et scho genuch Funktionalitéit fir d'Méiglechkeete vu Grafiken ze entdecken.

SQL Graph Funktionalitéit ass komplett an SQL Engine integréiert. Wéi scho gesot, SQL Server 2017 huet awer déi folgend Aschränkungen:

Keng Ënnerstëtzung fir Polymorphismus.

  • Nëmmen unidirektional Linken ginn ënnerstëtzt.
  • Edges kënnen hir $from_id an $to_id Kolonnen net iwwer UPDATE aktualiséieren.
  • Transitiv Zoumaache ginn net ënnerstëtzt, awer si kënne mat CTEs kritt ginn.
  • Limitéiert Ënnerstëtzung fir In-Memory OLTP Objekter.
  • Temporal Dëscher (System-Versioned Temporal Table), temporär lokal a global Dëscher ginn net ënnerstëtzt.
  • Tabellentypen an Tabellvariablen kënnen net als NODE oder EDGE deklaréiert ginn.
  • Cross-Datebank Ufroen ginn net ënnerstëtzt.
  • Et gëtt keen direkten Wee oder eng Aart Wizard (Wizard) fir regelméisseg Dëscher op Grafiktabellen ze konvertéieren.
  • Et gëtt keng GUI fir Grafiken ze weisen, awer Power BI ka benotzt ginn.

Aféierung an SQL Server 2017 Grafik Datebanken

Liest méi:

Source: will.com

Setzt e Commentaire