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

Pievieno komentāru