Virum Ufank vum Cours
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
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..
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.
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
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.
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
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
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:
- ass_rand
- ass_node
SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'
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).
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'
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'
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'
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)
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.
Liest méi:
Source: will.com