Johdatus SQL Server 2017 Graph -tietokantoihin

Ennen kurssin alkua "MS SQL Server Developer" Olemme laatineet sinulle toisen hyödyllisen käännöksen.

Graafitietokannat ovat tärkeä tekniikka tietokanta-ammattilaisille. Yritän pysyä tämän alan innovaatioiden ja uusien teknologioiden mukana, ja relaatio- ja NoSQL-tietokantojen parissa työskenneltyäni näen graafitietokantojen roolin kasvavan yhä tärkeämmäksi. Monimutkaisten hierarkkisten tietojen kanssa työskennellessä ei vain perinteiset tietokannat ole tehokkaita, vaan myös NoSQL. Usein yhteystasojen määrän ja tietokannan koon kasvaessa suorituskyky heikkenee. Ja kun suhteet muuttuvat monimutkaisemmiksi, myös JOIN:ien määrä kasvaa.

Tietysti relaatiomallissa on ratkaisuja hierarkioiden kanssa työskentelyyn (esimerkiksi käyttämällä rekursiivisia CTE:itä), mutta nämä ovat silti kiertotapoja. Samaan aikaan SQL Server -graafitietokantojen toiminnallisuuden avulla voit helposti käsitellä useita hierarkiatasoja. Sekä tietomalli että kyselyt yksinkertaistuvat ja siten niiden tehokkuus paranee. Koodin määrää vähennetään merkittävästi.

Graafitietokannat ovat ilmaisukieli monimutkaisten järjestelmien esittämiseen. Tätä teknologiaa käytetään jo melko laajasti IT-alalla muun muassa sosiaalisten verkostojen, petostentorjuntajärjestelmien, IT-verkkoanalyysien, sosiaalisten suositusten sekä tuote- ja sisältösuositusten alalla.

SQL Serverin kaaviotietokantatoiminto sopii skenaarioihin, joissa tiedot ovat hyvin yhteydessä toisiinsa ja niillä on hyvin määritellyt suhteet.

Graafinen tietomalli

Graafi on joukko pisteitä (solmuja) ja reunoja (relaatioita, reuna). Vertices edustaa entiteettejä ja reunat suhteita, joiden attribuutit voivat sisältää tietoa.

Graafitietokanta mallintaa entiteetit graafina graafiteoriassa määriteltynä. Tietorakenteet ovat kärkipisteitä ja reunoja. Attribuutit ovat kärkien ja reunojen ominaisuuksia. Yhteys on pisteiden yhteys.

Toisin kuin muut tietomallit, graafitietokannat priorisoivat entiteettien välisiä suhteita. Siksi suhteita ei tarvitse laskea vieraiden avaimien tai muiden keinojen avulla. On mahdollista luoda monimutkaisia ​​tietomalleja käyttämällä vain kärki- ja reunaabstraktioita.

Nykymaailmassa ihmissuhteiden mallintaminen vaatii yhä monimutkaisempia tekniikoita. Suhteiden mallintamiseen SQL Server 2017 tarjoaa kaaviotietokantaominaisuudet. Graafin kärjet ja reunat esitetään uudentyyppisinä taulukoina: NODE ja EDGE. Graafikyselyt käyttävät uutta T-SQL-funktiota nimeltä MATCH(). Koska tämä toiminto on sisäänrakennettu SQL Server 2017:ään, sitä voidaan käyttää olemassa olevissa tietokantoissasi ilman muunnoksia.

Kaaviomallin edut

Nykyään yritykset ja käyttäjät vaativat sovelluksia, jotka käsittelevät yhä enemmän dataa ja odottavat korkeaa suorituskykyä ja luotettavuutta. Datan esittäminen kaaviona tarjoaa kätevän tavan käsitellä monimutkaisia ​​suhteita. Tämä lähestymistapa ratkaisee monia ongelmia ja auttaa saavuttamaan tuloksia tietyssä kontekstissa.

Näyttää siltä, ​​että monet sovellukset hyötyvät graafitietokantojen käytöstä tulevaisuudessa.

Tietojen mallintaminen: relaatiosta graafimalliin

Johdatus SQL Server 2017 Graph -tietokantoihin
Esimerkki

Katsotaanpa esimerkkiä organisaatiorakenteesta, jossa on työntekijöiden hierarkia: työntekijä raportoi esimiehelle, johtaja ylimmälle johtajalle ja niin edelleen. Tietystä yrityksestä riippuen tässä hierarkiassa voi olla useita tasoja. Mutta kun tasojen lukumäärä kasvaa, suhteiden laskeminen relaatiotietokannassa käy yhä vaikeammaksi. On melko vaikea kuvitella työntekijöiden hierarkiaa, hierarkiaa markkinoinnissa tai yhteyksiä sosiaalisissa verkostoissa. Katsotaanpa, kuinka SQL Graph voi ratkaista hierarkian eri tasojen käsittelyn ongelman.

Tätä esimerkkiä varten teemme yksinkertaisen tietomallin. Tehdään taulukko työntekijöistä EMP tunnuksella EMPNO ja sarake M.G.R., joka osoittaa työntekijän esimiehen (esimiehen) tunnisteen. Kaikki hierarkiaa koskevat tiedot on tallennettu tähän taulukkoon ja niitä voidaan tiedustella sarakkeiden avulla EMPNO и M.G.R..

Johdatus SQL Server 2017 Graph -tietokantoihin
Seuraavassa kaaviossa näkyy sama organisaatiorakennemalli neljällä sisäkkäistasolla tutussa muodossa. Työntekijät ovat taulukon graafin huippuja EMP. Entiteetti ”työntekijä” liitetään itseensä yhteydellä ”lähettää” (ReportsTo). Graafisesti sanottuna linkki on reuna (EDGE), joka yhdistää työntekijöiden solmut (NODE).

Johdatus SQL Server 2017 Graph -tietokantoihin

Luodaan tavallinen taulukko EMP ja lisää arvot sinne yllä olevan kaavion mukaisesti.

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)

Alla olevassa kuvassa työntekijät:

  • työntekijä kanssa EMPNO 7369 noudattaa 7902;
  • työntekijä kanssa EMPNO 7902 noudattaa 7566:ta
  • työntekijä kanssa EMPNO 7566 noudattaa 7839:ta

Johdatus SQL Server 2017 Graph -tietokantoihin
Katsotaanpa nyt samojen tietojen graafista esitystä. EMPLOYEE-vertexillä on useita attribuutteja, ja se liitetään itseensä "alaisten"-suhteella (EmplReportsTo). EmplReportsTo on suhteen nimi.

Reunataulukko (EDGE) voi myös sisältää attribuutteja.

Johdatus SQL Server 2017 Graph -tietokantoihin
Luodaan solmutaulukko EmpNode

Solmun luomisen syntaksi on melko yksinkertainen: lausekkeelle Luo taulukko lisätään loppuun "NODENA".

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

Muunnetaan nyt tiedot tavallisesta taulukosta kaavioiksi. Seuraava INSERT lisää dataa relaatiotaulukosta EMP.

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

Johdatus SQL Server 2017 Graph -tietokantoihin
Solmutaulukossa erityisessä sarakkeessa $node_id_* solmun tunniste tallennetaan JSON-muodossa. Tämän taulukon muut sarakkeet sisältävät solmun attribuutit.

Reunojen luominen (EDGE)

Reunataulukon luominen on hyvin samanlaista kuin solmutaulukon luominen, paitsi että avainsanaa käytetään "KUIN EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Johdatus SQL Server 2017 Graph -tietokantoihin

Nyt määritellään työntekijöiden väliset yhteydet sarakkeiden avulla EMPNO и M.G.R.. Organisaation rakennekaavio näyttää selkeästi kuinka kirjoittaa 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);

Oletusreunataulukko koostuu kolmesta sarakkeesta. Ensimmäinen, $edge_id — reunan tunniste JSON-muodossa. Kaksi muuta ($from_id и $to_id) edustavat solmujen välistä yhteyttä. Lisäksi reunoilla voi olla lisäominaisuuksia. Meidän tapauksessamme on Deptno.

Järjestelmänäkymät

Järjestelmänäkymässä sys.tables kaksi uutta saraketta on ilmestynyt:

  1. is_edge
  2. on_solmu

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

Johdatus SQL Server 2017 Graph -tietokantoihin

ssms

Kaavioihin liittyvät objektit sijaitsevat Graph Tables -kansiossa. Solmutaulukon kuvake on merkitty pisteellä ja reunataulukon kuvake on merkitty kahdella yhdistetyllä ympyrällä (vähän kuin lasit).

Johdatus SQL Server 2017 Graph -tietokantoihin

MATCH lauseke

ilme MATCH otettu CQL:stä (Cypher Query Language). Tämä on tehokas tapa kysellä graafin ominaisuuksia. CQL alkaa lausekkeella MATCH.

syntaksi

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

Примеры

Katsotaanpa muutamia esimerkkejä.

Alla oleva kysely näyttää työntekijät, joille Smith ja hänen esimiehensä raportoivat.

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'

Johdatus SQL Server 2017 Graph -tietokantoihin
Seuraava kysely etsii Smithille toisen tason työntekijöitä ja johtajia. Jos poistat lauseen MISTÄ, tuloksessa näkyvät kaikki työntekijät.

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'

Johdatus SQL Server 2017 Graph -tietokantoihin
Ja lopuksi pyyntö kolmannen tason työntekijöille ja esimiehille.

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'

Johdatus SQL Server 2017 Graph -tietokantoihin
Muutetaan nyt suuntaa saadaksemme Smithin pomot.

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)

Johdatus SQL Server 2017 Graph -tietokantoihin

Johtopäätös

SQL Server 2017 on vakiinnuttanut asemansa täydellisenä yritysratkaisuna erilaisiin IT-liiketoiminnan tehtäviin. SQL Graphin ensimmäinen versio on erittäin lupaava. Jopa joistakin rajoituksista huolimatta toimintoja on jo tarpeeksi kaavioiden ominaisuuksien tutkimiseen.

SQL Graph -toiminto on täysin integroitu SQL Engineen. Kuten jo todettiin, SQL Server 2017:llä on kuitenkin seuraavat rajoitukset:

Ei tukea polymorfismille.

  • Vain yksisuuntaisia ​​yhteyksiä tuetaan.
  • Edges ei voi päivittää sarakkeita $from_id ja $to_id päivityksen kautta.
  • Transitiivisia sulkuja ei tueta, mutta ne voidaan hankkia CTE:llä.
  • Muistissa olevien OLTP-objektien tuki on rajoitettu.
  • Temporaalisia taulukoita (System-Versioned Temporal Table), väliaikaisia ​​paikallisia ja yleisiä taulukoita ei tueta.
  • Taulukkotyyppejä ja taulukkomuuttujia ei voida ilmoittaa NODE- tai EDGE-muodossa.
  • Tietokantojen välisiä kyselyitä ei tueta.
  • Ei ole suoraa tapaa tai ohjattua toimintoa muuntaa tavallisia taulukoita kaaviotaulukoiksi.
  • Kaavioiden näyttämiseen ei ole graafista käyttöliittymää, mutta voit käyttää Power BI:tä.

Johdatus SQL Server 2017 Graph -tietokantoihin

Lue lisää:

Lähde: will.com

Lisää kommentti