Inleiding tot SQL Server 2017 Grafiekdatabasisse

Voor die aanvang van die kursus "MS SQL Server Ontwikkelaar" Ons het nog 'n nuttige vertaling vir jou voorberei.

Grafiekdatabasisse is 'n belangrike tegnologie vir databasisprofessionele persone. Ek probeer om tred te hou met innovasies en nuwe tegnologie op hierdie gebied en, nadat ek met relasionele en NoSQL databasisse gewerk het, sien ek die rol van grafiekdatabasisse word al hoe belangriker. Wanneer daar met komplekse hiërargiese data gewerk word, is nie net tradisionele databasisse ondoeltreffend nie, maar ook NoSQL. Dikwels, soos die aantal verbindingsvlakke en die grootte van die databasis toeneem, neem werkverrigting af. En soos die verhoudings meer kompleks word, neem die aantal JOINs ook toe.

Natuurlik het die relasionele model oplossings om met hiërargieë te werk (byvoorbeeld deur rekursiewe CTE's te gebruik), maar dit is steeds oplossings. Terselfdertyd laat die funksionaliteit van SQL Server-grafiekdatabasisse jou toe om verskeie vlakke van hiërargie maklik te hanteer. Beide die datamodel en navrae is vereenvoudig, en daarom neem hul doeltreffendheid toe. Die hoeveelheid kode word aansienlik verminder.

Grafiekdatabasisse is 'n ekspressiewe taal om komplekse stelsels voor te stel. Hierdie tegnologie word reeds redelik wyd in die IT-industrie gebruik op gebiede soos sosiale netwerke, teenbedrogstelsels, IT-netwerkanalise, sosiale aanbevelings, produk- en inhoudaanbevelings.

Die grafiekdatabasisfunksionaliteit in SQL Server is geskik vir scenario's waar data hoogs met mekaar verbind is en goed gedefinieerde verwantskappe het.

Grafiek Data Model

'n Grafiek is 'n stel hoekpunte (nodes) en rande (verwantskappe, rand). Toppunte verteenwoordig entiteite, en rande verteenwoordig verwantskappe waarvan die eienskappe inligting kan bevat.

'n Grafiekdatabasis modelleer entiteite as 'n grafiek soos gedefinieer in grafiekteorie. Datastrukture is hoekpunte en rande. Eienskappe is eienskappe van hoekpunte en rande. 'n Verbinding is 'n verbinding van hoekpunte.

Anders as ander datamodelle, prioritiseer grafiekdatabasisse verhoudings tussen entiteite. Daarom is dit nie nodig om verhoudings te bereken met behulp van vreemde sleutels of enige ander manier nie. Dit is moontlik om komplekse datamodelle te skep deur slegs hoekpunt- en randabstraksies te gebruik.

In die moderne wêreld vereis modellering van verhoudings toenemend komplekse tegnieke. Om verhoudings te modelleer, bied SQL Server 2017 grafiekdatabasisvermoëns. Die hoekpunte en kante van die grafiek word voorgestel as nuwe tipes tabelle: KNOOP en RAND. Grafieknavrae gebruik 'n nuwe T-SQL-funksie genaamd MATCH(). Aangesien hierdie funksionaliteit in SQL Server 2017 ingebou is, kan dit in u bestaande databasisse gebruik word sonder dat enige omskakeling nodig is.

Voordele van die grafiekmodel

Vandag eis besighede en gebruikers toepassings wat meer en meer data hanteer, terwyl hoë werkverrigting en betroubaarheid verwag word. Die voorstelling van data as 'n grafiek bied 'n gerieflike manier om komplekse verhoudings te hanteer. Hierdie benadering los baie probleme op en help om resultate binne 'n gegewe konteks te verkry.

Dit lyk of baie toepassings sal baat by die gebruik van grafiekdatabasisse in die toekoms.

Datamodellering: van relasionele tot grafiekmodel

Inleiding tot SQL Server 2017 Grafiekdatabasisse
Voorbeeld

Kom ons kyk na 'n voorbeeld van 'n organisasiestruktuur met 'n hiërargie van werknemers: 'n werknemer rapporteer aan 'n bestuurder, 'n bestuurder rapporteer aan 'n senior bestuurder, ensovoorts. Afhangende van die spesifieke maatskappy, kan daar enige aantal vlakke in hierdie hiërargie wees. Maar soos die aantal vlakke toeneem, word die berekening van verwantskappe in 'n relasionele databasis al hoe moeiliker. Dit is nogal moeilik om die hiërargie van werknemers, hiërargie in bemarking of verbindings in sosiale netwerke voor te stel. Kom ons kyk hoe SQL Graph die probleem van die hantering van verskillende vlakke van hiërargie kan oplos.

Vir hierdie voorbeeld sal ons 'n eenvoudige datamodel maak. Kom ons skep 'n tabel van werknemers EMP met ID EMPNO en kolom MGR, wat die identifiseerder van die werknemer se toesighouer (bestuurder) aandui. Alle inligting oor die hiërargie word in hierdie tabel gestoor en kan met behulp van kolomme navraag gedoen word EMPNO и MGR.

Inleiding tot SQL Server 2017 Grafiekdatabasisse
Die volgende diagram toon dieselfde organisasiestruktuurmodel met vier vlakke van nes in 'n meer bekende vorm. Werknemers is die hoekpunte van 'n grafiek uit 'n tabel EMP. Die entiteit "werknemer" word aan homself verbind deur die verbinding "indien in" (ReportsTo). In grafiekterme is 'n skakel 'n rand (EDGE) wat nodusse (NODE) ​​van werknemers verbind.

Inleiding tot SQL Server 2017 Grafiekdatabasisse

Kom ons skep 'n gewone tafel EMP en voeg die waardes daar by in ooreenstemming met die bostaande diagram.

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 foto hieronder wys die werknemers:

  • werknemer met EMPNO 7369 gehoorsaam 7902;
  • werknemer met EMPNO 7902 gehoorsaam 7566
  • werknemer met EMPNO 7566 gehoorsaam 7839

Inleiding tot SQL Server 2017 Grafiekdatabasisse
Kom ons kyk nou na 'n grafiekvoorstelling van dieselfde data. Die WERKNEMER-hoekpunt het verskeie eienskappe en word aan homself verbind deur die "ondergeskiktes"-verhouding (EmplReportsTo). EmplReportsTo is die naam van die verhouding.

Die randtabel (EDGE) kan ook kenmerke bevat.

Inleiding tot SQL Server 2017 Grafiekdatabasisse
Kom ons skep 'n nodustabel EmpNode

Die sintaksis vir die skep van 'n nodus is redelik eenvoudig: na die uitdrukking SKEP TAFEL word aan die einde bygevoeg "AS KNOOP".

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

Laat ons nou die data van 'n gewone tabel na 'n grafiektabel omskakel. Volgende INSERT voeg data van 'n relasionele tabel in EMP.

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

Inleiding tot SQL Server 2017 Grafiekdatabasisse
In die tabel van nodusse in 'n spesiale kolom $node_id_* die nodusidentifiseerder word as JSON gestoor. Die oorblywende kolomme van hierdie tabel bevat die nodus se kenmerke.

Skep rande (EDGE)

Die skep van 'n randtabel is baie soortgelyk aan die skep van 'n nodustabel, behalwe dat die sleutelwoord gebruik word "AS EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Inleiding tot SQL Server 2017 Grafiekdatabasisse

Kom ons definieer nou verbindings tussen werknemers met behulp van kolomme EMPNO и MGR. Die organisasiestruktuurdiagram wys duidelik hoe om te skryf 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 verstek randtabel bestaan ​​uit drie kolomme. Eerstens, $edge_id - randidentifiseerder in JSON-vorm. Die ander twee ($from_id и $to_id) verteenwoordig die verband tussen nodusse. Daarbenewens kan rande addisionele eienskappe hê. In ons geval is dit Deptnr.

Stelselaansigte

In stelselaansig sys.tables twee nuwe kolomme het verskyn:

  1. is_rand
  2. is_node

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

Inleiding tot SQL Server 2017 Grafiekdatabasisse

ssms

Voorwerpe wat met grafieke verband hou, is in die Grafiektabelle-lêergids geleë. Die nodustabelikoon is gemerk met 'n punt, en die randtabelikoon is gemerk met twee gekoppelde sirkels ('n bietjie soos 'n bril).

Inleiding tot SQL Server 2017 Grafiekdatabasisse

MATCH uitdrukking

uitdrukking MATCH geneem uit CQL (Cypher Query Language). Dit is 'n doeltreffende manier om eienskappe van 'n grafiek te bevraagteken. CQL begin met 'n uitdrukking MATCH.

sintaksis

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

voorbeelde

Kom ons kyk na 'n paar voorbeelde.

Die navraag hieronder wys die werknemers aan wie Smith en sy bestuurder rapporteer.

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'

Inleiding tot SQL Server 2017 Grafiekdatabasisse
Die volgende navraag is vir die vind van tweedevlakwerknemers en bestuurders vir Smith. As jy die sin verwyder WAAR, dan sal die resultaat alle werknemers vertoon.

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'

Inleiding tot SQL Server 2017 Grafiekdatabasisse
En laastens, 'n versoek vir derdevlak werknemers en bestuurders.

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'

Inleiding tot SQL Server 2017 Grafiekdatabasisse
Kom ons verander nou van rigting om Smith se base te kry.

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)

Inleiding tot SQL Server 2017 Grafiekdatabasisse

Gevolgtrekking

SQL Server 2017 het homself gevestig as 'n volledige ondernemingsoplossing vir verskeie IT-saketake. Die eerste weergawe van SQL Graph is baie belowend. Selfs ten spyte van sekere beperkings, is daar reeds genoeg funksionaliteit om die vermoëns van grafieke te verken.

SQL Graph funksionaliteit is ten volle geïntegreer in SQL Engine. Soos reeds genoem, het SQL Server 2017 die volgende beperkings:

Geen polimorfisme-ondersteuning nie.

  • Slegs eenrigtingverbindings word ondersteun.
  • Rande kan nie $from_id- en $to_id-kolomme via UPDATE opdateer nie.
  • Transitiewe sluitings word nie ondersteun nie, maar dit kan verkry word met CTE.
  • Ondersteuning vir OLTP-voorwerpe in die geheue is beperk.
  • Tydelike tabelle (stelsel-weergawe tydelike tabel), tydelike plaaslike en globale tabelle word nie ondersteun nie.
  • Tabeltipes en tabelveranderlikes kan nie as NODE of EDGE verklaar word nie.
  • Kruisdatabasisnavrae word nie ondersteun nie.
  • Daar is geen direkte manier of towenaar om gewone tabelle na grafiektabelle om te skakel nie.
  • Daar is geen GUI om grafieke te vertoon nie, maar jy kan Power BI gebruik.

Inleiding tot SQL Server 2017 Grafiekdatabasisse

Lees meer:

Bron: will.com

Voeg 'n opmerking