Bevezetés az SQL Server 2017 grafikus adatbázisaiba

A tanfolyam kezdete előtt "MS SQL Server fejlesztő" Újabb hasznos fordítást készítettünk az Ön számára.

A gráf adatbázisok fontos technológiát jelentenek az adatbázisokkal foglalkozó szakemberek számára. Igyekszem követni az újdonságokat, új technológiákat ezen a területen, és a relációs és NoSQL adatbázisokkal való munka után azt látom, hogy a gráf adatbázisok szerepe egyre nagyobb. Ha összetett hierarchikus adatokkal dolgozik, akkor nemcsak a hagyományos adatbázisok, hanem a NoSQL is hatástalanok. A hivatkozási szintek számának és az adatbázis méretének növekedésével gyakran csökken a teljesítmény. És ahogy a kapcsolatok bonyolultabbá válnak, a JOIN-ok száma is növekszik.

Természetesen a relációs modellben vannak megoldások a hierarchiákkal való munkavégzéshez (például rekurzív CTE-k használatával), de ezek továbbra is megkerülő megoldások. Ugyanakkor az SQL Server gráfadatbázisainak funkcionalitása megkönnyíti a hierarchia több szintjének kezelését. Mind az adatmodell, mind a lekérdezések leegyszerűsödnek, így hatékonyságuk is megnő. Jelentősen csökkenti a kód mennyiségét.

A gráf adatbázisok egy kifejező nyelv komplex rendszerek ábrázolására. Ezt a technológiát már meglehetősen széles körben alkalmazzák az IT-iparban olyan területeken, mint a közösségi hálózatok, a csalás elleni rendszerek, az IT hálózatelemzés, a közösségi ajánlások, a termék- és tartalomajánlások.

Az SQL Server gráfadatbázis-funkcionalitása olyan forgatókönyvekre alkalmas, ahol az adatok szorosan összekapcsolódnak, és jól meghatározott kapcsolatokkal rendelkeznek.

Grafikon adatmodell

A gráf csúcsok (csomópontok, csomópontok) és élek (kapcsolatok, él) halmaza. A csúcsok entitásokat, az élek pedig olyan hivatkozásokat jelentenek, amelyek attribútumai információkat tartalmazhatnak.

A gráf-adatbázis a gráfelméletben meghatározott gráfként modellezi az entitásokat. Az adatszerkezetek csúcsok és élek. Az attribútumok a csúcsok és élek tulajdonságai. A kapcsolat csúcsok kapcsolata.

Más adatmodellektől eltérően a gráf adatbázisok prioritást adnak az entitások közötti kapcsolatoknak. Ezért nincs szükség a kapcsolatok kiszámítására idegen kulcsok használatával vagy más módon. Lehetőség van összetett adatmodellek létrehozására csak csúcs- és élabsztrakciók felhasználásával.

A mai világban a kapcsolatok modellezése egyre kifinomultabb technikákat igényel. A kapcsolatok modellezéséhez az SQL Server 2017 gráfadatbázis-képességeket kínál. A gráf csúcsai és élei új típusú táblákként jelennek meg: NODE és EDGE. A gráflekérdezések egy új, MATCH() nevű T-SQL függvényt használnak. Mivel ez a funkció be van építve az SQL Server 2017-be, a meglévő adatbázisokban használható adatbázis-konverzió nélkül.

A grafikonmodell előnyei

Manapság a vállalkozások és a felhasználók olyan alkalmazásokat igényelnek, amelyek egyre több adattal dolgoznak, miközben nagy teljesítményt és megbízhatóságot várnak el. Az adatok grafikonos ábrázolása kényelmes eszközt kínál az összetett kapcsolatok kezelésére. Ez a megközelítés számos problémát megold, és egy adott kontextuson belül segít eredményt elérni.

Úgy tűnik, hogy a jövőben sok alkalmazás profitál majd a gráf adatbázisokból.

Adatmodellezés: a relációs modellezéstől a gráfmodellezésig

Bevezetés az SQL Server 2017 grafikus adatbázisaiba
Példa

Nézzünk egy példát egy szervezeti felépítésre, ahol az alkalmazottak hierarchiája van: a munkavállaló a vezetőnek, a vezető a felsővezetőnek, és így tovább. Az adott vállalattól függően ebben a hierarchiában tetszőleges számú szint lehet. De ahogy a szintek száma növekszik, a kapcsolatok kiszámítása egy relációs adatbázisban egyre nehezebbé válik. Elég nehéz elképzelni az alkalmazottak hierarchiáját, a marketingben vagy a közösségi médiában való kapcsolatok hierarchiáját. Nézzük meg, hogyan tudja az SQL Graph megoldani a különböző szintű hierarchia kezelésének problémáját.

Ehhez a példához készítsünk egy egyszerű adatmodellt. Hozzon létre egy táblázatot az alkalmazottakról EMP azonosítóval EMPNO és oszlop M.G.R.A, amely a munkavállaló vezetőjének (vezetőjének) azonosítójára mutat. A hierarchiával kapcsolatos összes információ ebben a táblázatban van tárolva, és oszlopok segítségével lekérdezhető EMPNO и M.G.R..

Bevezetés az SQL Server 2017 grafikus adatbázisaiba
A következő diagram ugyanazt a szervezeti diagrammodellt is mutatja négy beágyazási szinttel, ismerősebb formában. Az alkalmazottak a táblázatból a gráf csúcsai EMP. Az „alkalmazott” entitás önmagához kapcsolódik a „beküld” (ReportsTo) kapcsolat révén. Grafikonként a hivatkozás egy él (EDGE), amely összeköti az alkalmazottak csomópontjait (NODE-jait).

Bevezetés az SQL Server 2017 grafikus adatbázisaiba

Készítsünk egy normál táblázatot EMP és adjon hozzá értékeket a fenti diagram szerint.

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)

Az alábbi ábra a dolgozókat mutatja be:

  • alkalmazottal EMPNO 7369 alárendeltje a 7902-nek;
  • alkalmazottal EMPNO 7902 alárendeltje a 7566-nak
  • alkalmazottal EMPNO 7566 alárendeltje a 7839-nak

Bevezetés az SQL Server 2017 grafikus adatbázisaiba
Most nézzük meg ugyanazon adatok ábrázolását gráf formájában. Az EMPLOYEE csomópontnak számos attribútuma van, és önmagához egy "beküld" kapcsolat (EmplReportsTo) kapcsolódik. Az EmplReportsTo a kapcsolat neve.

Az éltáblázatnak (EDGE) is lehetnek attribútumai.

Bevezetés az SQL Server 2017 grafikus adatbázisaiba
Hozzon létre egy csomóponti táblát EmpNode

A csomópont létrehozásának szintaxisa meglehetősen egyszerű: a kifejezéshez TÁBLÁZAT LÉTREHOZÁSA kiegészítve a végére MINT CSOMÓPONT.

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

Most alakítsuk át az adatokat egy normál táblázatból grafikonossá. Következő INSERT relációs táblából szúr be adatokat EMP.

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

Bevezetés az SQL Server 2017 grafikus adatbázisaiba
A csomóponttáblázatban egy speciális oszlopban $node_id_* a gazdagép-azonosító JSON-ként van tárolva. A táblázat többi oszlopa a csomópont attribútumait tartalmazza.

Élek létrehozása (EDGE)

Az éltábla létrehozása nagyon hasonlít a csomóponti tábla létrehozásához, kivéve, hogy a kulcsszó AS EDGE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Bevezetés az SQL Server 2017 grafikus adatbázisaiba

Most határozzuk meg az alkalmazottak közötti kapcsolatokat oszlopok segítségével EMPNO и M.G.R.. A szervezeti diagram világosan mutatja, hogyan kell írni 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);

Az éltáblázat alapértelmezés szerint három oszlopból áll. Első, $edge_id — élazonosító JSON formátumban. A másik kettő ($from_id и $to_id) jelenti a csomópontok közötti kapcsolatot. Ezenkívül az élek további tulajdonságokkal is rendelkezhetnek. A mi esetünkben ez Deptno.

Rendszernézetek

Rendszer nézetben sys.tables Két új oszlop van:

  1. is_edge
  2. is_node

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

Bevezetés az SQL Server 2017 grafikus adatbázisaiba

ssms

A grafikonokhoz kapcsolódó objektumok a Graph Tables mappában találhatók. A csomóponti táblázat ikonját egy pont jelöli, az éltáblázat ikonját pedig két összefüggő kör (ami kicsit szemüvegre hasonlít).

Bevezetés az SQL Server 2017 grafikus adatbázisaiba

MATCH kifejezés

kifejezés MÉRKŐZÉS a CQL-ből (Cypher Query Language) átvéve. Ez egy hatékony módja a gráf tulajdonságainak lekérdezésének. A CQL egy kifejezéssel kezdődik MÉRKŐZÉS.

szintaxis

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

Примеры

Nézzünk néhány példát.

Az alábbi lekérdezés azokat az alkalmazottakat jeleníti meg, akiknek Smith és menedzsere jelentenek.

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'

Bevezetés az SQL Server 2017 grafikus adatbázisaiba
A következő lekérdezés Smith alkalmazottainak és másodszintű vezetőinek keresésére szolgál. Ha eltávolítja az ajánlatot AHOL, akkor ennek eredményeként az összes alkalmazott megjelenik.

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'

Bevezetés az SQL Server 2017 grafikus adatbázisaiba
És végül egy kérés a harmadik szintű alkalmazottak és vezetők számára.

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'

Bevezetés az SQL Server 2017 grafikus adatbázisaiba
Most változtassunk irányt, hogy megszerezzük Smith főnökeit.

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)

Bevezetés az SQL Server 2017 grafikus adatbázisaiba

Következtetés

Az SQL Server 2017 teljes körű vállalati megoldásként nőtte ki magát számos üzleti informatikai igény kielégítésére. Az SQL Graph első verziója nagyon ígéretes. Még bizonyos korlátok ellenére is elegendő funkcionalitás áll rendelkezésre a grafikonok lehetőségeinek feltárásához.

Az SQL Graph funkcionalitás teljesen integrálva van az SQL Engine-be. Amint azonban már említettük, az SQL Server 2017 a következő korlátozásokkal rendelkezik:

Nem támogatja a polimorfizmust.

  • Csak az egyirányú hivatkozások támogatottak.
  • Az Edges nem tudja frissíteni a $from_id és $to_id oszlopait az UPDATE segítségével.
  • A tranzitív lezárások nem támogatottak, de CTE-kkel beszerezhetők.
  • Korlátozott támogatás a memórián belüli OLTP objektumokhoz.
  • Az ideiglenes táblák (System-Versioned Temporal Table), az ideiglenes helyi és globális táblák nem támogatottak.
  • A táblatípusok és -változók nem deklarálhatók NODE-ként vagy EDGE-ként.
  • Az adatbázisok közötti lekérdezések nem támogatottak.
  • Nincs közvetlen mód vagy valamilyen varázsló (varázsló) a normál táblák gráftáblázatokká alakítására.
  • A grafikonok megjelenítéséhez nincs grafikus felhasználói felület, de a Power BI használható.

Bevezetés az SQL Server 2017 grafikus adatbázisaiba

Olvass tovább:

Forrás: will.com

Hozzászólás