Ievads diagrammu datu bāzēs SQL Server 2017

Pirms kursa sākuma "MS SQL servera izstrādātājs" Mēs esam jums sagatavojuši vēl vienu noderīgu tulkojumu.

Grafu datu bāzes ir svarīga tehnoloģija datu bāzu profesionāļiem. Es cenšos sekot līdzi jauninājumiem un jaunajām tehnoloģijām šajā jomā, un pēc darba ar relāciju un NoSQL datu bāzēm es redzu, ka grafu datu bāzu loma kļūst arvien svarīgāka. Strādājot ar sarežģītiem hierarhiskiem datiem, neefektīvas ir ne tikai tradicionālās datu bāzes, bet arī NoSQL. Bieži vien, palielinoties savienojuma līmeņu skaitam un datu bāzes izmēram, veiktspēja samazinās. Un, tā kā attiecības kļūst sarežģītākas, palielinās arī JOIN skaits.

Protams, relāciju modelim ir risinājumi darbam ar hierarhijām (piemēram, izmantojot rekursīvos CTE), taču tie joprojām ir risinājumi. Tajā pašā laikā SQL Server grafiku datu bāzu funkcionalitāte ļauj viegli apstrādāt vairākus hierarhijas līmeņus. Gan datu modelis, gan vaicājumi tiek vienkāršoti, un līdz ar to palielinās to efektivitāte. Koda apjoms ir ievērojami samazināts.

Grafu datu bāzes ir izteiksmīga valoda sarežģītu sistēmu attēlošanai. Šī tehnoloģija jau ir diezgan plaši izmantota IT nozarē tādās jomās kā sociālie tīkli, krāpšanas apkarošanas sistēmas, IT tīklu analīze, sociālie ieteikumi, produktu un satura ieteikumi.

Grafiku datu bāzes funkcionalitāte programmā SQL Server ir piemērota gadījumiem, kad dati ir ļoti savstarpēji saistīti un tiem ir labi definētas attiecības.

Grafika datu modelis

Grafs ir virsotņu (mezglu) un malu (attiecību, malu) kopa. Virsotnes apzīmē entītijas, un malas apzīmē attiecības, kuru atribūti var saturēt informāciju.

Grafu datubāze modelē entītijas kā grafu, kā definēts grafu teorijā. Datu struktūras ir virsotnes un malas. Atribūti ir virsotņu un malu īpašības. Savienojums ir virsotņu savienojums.

Atšķirībā no citiem datu modeļiem, grafiku datu bāzēs prioritātes ir attiecībām starp entītijām. Tāpēc nav nepieciešams aprēķināt attiecības, izmantojot ārējās atslēgas vai citus līdzekļus. Ir iespējams izveidot sarežģītus datu modeļus, izmantojot tikai virsotņu un malu abstrakcijas.

Mūsdienu pasaulē attiecību modelēšanai ir vajadzīgas arvien sarežģītākas metodes. Lai modelētu attiecības, SQL Server 2017 piedāvā grafiku datu bāzes iespējas. Grafa virsotnes un malas tiek attēlotas kā jauna veida tabulas: NODE un EDGE. Grafu vaicājumi izmanto jaunu T-SQL funkciju, ko sauc par MATCH(). Tā kā šī funkcionalitāte ir iebūvēta SQL Server 2017, to var izmantot esošajās datu bāzēs bez nepieciešamības veikt pārveidošanu.

Grafika modeļa priekšrocības

Mūsdienās uzņēmumi un lietotāji pieprasa lietojumprogrammas, kas apstrādā arvien vairāk datu, vienlaikus sagaidot augstu veiktspēju un uzticamību. Datu attēlošana grafikā piedāvā ērtu līdzekli sarežģītu attiecību apstrādei. Šī pieeja atrisina daudzas problēmas un palīdz iegūt rezultātus noteiktā kontekstā.

Šķiet, ka daudzas lietojumprogrammas nākotnē gūs labumu no grafiku datu bāzu izmantošanas.

Datu modelēšana: no relācijas uz grafu modeli

Ievads diagrammu datu bāzēs SQL Server 2017
Piemērs

Apskatīsim organizācijas struktūras piemēru ar darbinieku hierarhiju: darbinieks atskaitās vadītājam, vadītājs - augstākajam vadītājam utt. Atkarībā no konkrētā uzņēmuma šajā hierarhijā var būt jebkurš līmeņu skaits. Bet, palielinoties līmeņu skaitam, attiecību aprēķināšana relāciju datu bāzē kļūst arvien grūtāka. Ir diezgan grūti iedomāties darbinieku hierarhiju, hierarhiju mārketingā vai savienojumus sociālajos tīklos. Apskatīsim, kā SQL Graph var atrisināt dažādu hierarhijas līmeņu apstrādes problēmu.

Šajā piemērā mēs izveidosim vienkāršu datu modeli. Izveidosim darbinieku tabulu EMP ar ID EMPNO un kolonnu M.G.R., norādot darbinieka darba vadītāja (vadītāja) identifikatoru. Visa informācija par hierarhiju tiek glabāta šajā tabulā, un to var pieprasīt, izmantojot kolonnas EMPNO и M.G.R..

Ievads diagrammu datu bāzēs SQL Server 2017
Nākamajā diagrammā ir parādīts tas pats organizatoriskās struktūras modelis ar četriem ligzdošanas līmeņiem pazīstamākā formā. Darbinieki ir diagrammas virsotnes no tabulas EMP. Vienība “darbinieks” ir saistīta ar sevi, izmantojot savienojumu “iesniedz” (ReportsTo). Grafika izteiksmē saite ir mala (EDGE), kas savieno darbinieku mezglus (NODE).

Ievads diagrammu datu bāzēs SQL Server 2017

Izveidosim parastu tabulu EMP un pievienojiet tur vērtības saskaņā ar iepriekš minēto diagrammu.

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)

Zemāk redzamajā attēlā redzami darbinieki:

  • darbinieks ar EMPNO 7369 pakļaujas 7902;
  • darbinieks ar EMPNO 7902 pakļaujas 7566
  • darbinieks ar EMPNO 7566 pakļaujas 7839

Ievads diagrammu datu bāzēs SQL Server 2017
Tagad apskatīsim to pašu datu diagrammu. Virsotnei DARBINIEKS ir vairāki atribūti, un tā ir saistīta ar sevi ar “padoto” attiecībām (EmplReportsTo). EmplReportsTo ir attiecību nosaukums.

Malu tabulā (EDGE) var būt arī atribūti.

Ievads diagrammu datu bāzēs SQL Server 2017
Izveidosim mezglu tabulu EmpNode

Mezgla izveides sintakse ir pavisam vienkārša: izteiksmei IZVEIDOT GALDA tiek pievienots beigās "KĀ 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;

Tagad konvertēsim datus no parastās tabulas uz grafiku tabulu. Nākamais INSERT ievieto datus no relāciju tabulas EMP.

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

Ievads diagrammu datu bāzēs SQL Server 2017
Mezglu tabulā īpašā kolonnā $node_id_* mezgla identifikators tiek saglabāts kā JSON. Pārējās šīs tabulas kolonnas satur mezgla atribūti.

Malu veidošana (EDGE)

Malu tabulas izveide ir ļoti līdzīga mezglu tabulas izveidei, izņemot to, ka tiek izmantots atslēgvārds "KĀ EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Ievads diagrammu datu bāzēs SQL Server 2017

Tagad definēsim savienojumus starp darbiniekiem, izmantojot kolonnas EMPNO и M.G.R.. Organizācijas struktūras diagramma skaidri parāda, kā rakstīt 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);

Noklusējuma malu tabula sastāv no trim kolonnām. Pirmkārt, $edge_id — malas identifikators JSON formātā. Pārējie divi ($from_id и $to_id) attēlo savienojumu starp mezgliem. Turklāt malām var būt papildu īpašības. Mūsu gadījumā tā ir Deptno.

Sistēmas skati

Sistēmas skatā sys.tables ir parādījušās divas jaunas kolonnas:

  1. ir_mala
  2. ir_mezgls

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

Ievads diagrammu datu bāzēs SQL Server 2017

ssms

Ar grafikiem saistītie objekti atrodas mapē Graph Tables. Mezglu tabulas ikona ir atzīmēta ar punktu, bet malu tabulas ikona ir atzīmēta ar diviem savienotiem apļiem (mazliet līdzīgi brillēm).

Ievads diagrammu datu bāzēs SQL Server 2017

MATCH izteiksme

Izteiksme MATCH ņemts no CQL (Cypher Query Language). Tas ir efektīvs veids, kā vaicāt diagrammas īpašības. CQL sākas ar izteiksmi MATCH.

sintakse

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

piemēri

Apskatīsim dažus piemērus.

Tālāk sniegtajā vaicājumā ir parādīti darbinieki, kuriem Smits un viņa vadītājs ziņo.

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'

Ievads diagrammu datu bāzēs SQL Server 2017
Šis vaicājums ir paredzēts, lai atrastu Smita otrā līmeņa darbiniekus un vadītājus. Ja noņemat teikumu KUR, tad rezultāts parādīs visus darbiniekus.

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'

Ievads diagrammu datu bāzēs SQL Server 2017
Un visbeidzot lūgums trešā līmeņa darbiniekiem un vadītājiem.

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'

Ievads diagrammu datu bāzēs SQL Server 2017
Tagad mainīsim virzienu, lai iegūtu Smita priekšniekus.

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)

Ievads diagrammu datu bāzēs SQL Server 2017

Secinājums

SQL Server 2017 ir sevi pierādījis kā pilnīgs uzņēmuma risinājums dažādiem IT biznesa uzdevumiem. Pirmā SQL Graph versija ir ļoti daudzsološa. Pat neskatoties uz dažiem ierobežojumiem, jau ir pietiekami daudz funkcionalitātes, lai izpētītu grafiku iespējas.

SQL Graph funkcionalitāte ir pilnībā integrēta SQL Engine. Tomēr, kā jau minēts, SQL Server 2017 ir šādi ierobežojumi:

Nav polimorfisma atbalsta.

  • Tiek atbalstīti tikai vienvirziena savienojumi.
  • Edges nevar atjaunināt kolonnas $from_id un $to_id, izmantojot UPDATE.
  • Transitīvās aizvēršanas iespējas netiek atbalstītas, taču tās var iegūt, izmantojot CTE.
  • Atbalsts atmiņā esošajiem OLTP objektiem ir ierobežots.
  • Temporālās tabulas (System-Versioned Temporal Table), pagaidu lokālās un globālās tabulas netiek atbalstītas.
  • Tabulu veidus un tabulu mainīgos nevar deklarēt kā NODE vai EDGE.
  • Vairāku datu bāzu vaicājumi netiek atbalstīti.
  • Nav tieša veida vai vedņa, lai parastās tabulas pārveidotu par grafiku tabulām.
  • Grafiku attēlošanai nav GUI, taču varat izmantot Power BI.

Ievads diagrammu datu bāzēs SQL Server 2017

Lasīt vairāk:

Avots: www.habr.com

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster