SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն

Դասընթացի մեկնարկից առաջ «MS SQL Server ծրագրավորող» Ձեզ համար պատրաստել ենք ևս մեկ օգտակար թարգմանություն։

Գրաֆիկական տվյալների բազաները տվյալների բազայի մասնագետների համար կարևոր տեխնոլոգիա են: Փորձում եմ հետևել այս ոլորտում նորարարություններին և նոր տեխնոլոգիաներին և հարաբերական և NoSQL տվյալների բազաների հետ աշխատելուց հետո տեսնում եմ, որ գրաֆիկական տվյալների բազաների դերը գնալով ավելի է մեծանում։ Բարդ հիերարխիկ տվյալների հետ աշխատելիս ոչ միայն ավանդական տվյալների բազաները, այլև NoSQL-ն անարդյունավետ են: Հաճախ, կապի մակարդակների քանակի և տվյալների բազայի չափի աճով, կատարողականի նվազում է նկատվում: Եվ քանի որ հարաբերությունները դառնում են ավելի բարդ, ավելանում է նաև JOIN-ների թիվը:

Իհարկե, հարաբերական մոդելում կան հիերարխիաների հետ աշխատելու լուծումներ (օրինակ՝ ռեկուրսիվ CTE-ների օգտագործում), բայց դրանք դեռևս լուծումներ են։ Միևնույն ժամանակ, SQL Server գրաֆիկական տվյալների շտեմարանների ֆունկցիոնալությունը հեշտացնում է հիերարխիայի բազմաթիվ մակարդակները: Ե՛վ տվյալների մոդելը, և՛ հարցումները պարզեցված են, և, հետևաբար, դրանց արդյունավետությունը մեծանում է: Զգալիորեն նվազեցնում է կոդի քանակը:

Գրաֆիկական տվյալների բազաները արտահայտիչ լեզու են բարդ համակարգերի ներկայացման համար: Այս տեխնոլոգիան արդեն բավականին լայնորեն կիրառվում է ՏՏ ոլորտում այնպիսի ոլորտներում, ինչպիսիք են սոցիալական ցանցերը, խարդախության դեմ համակարգերը, ՏՏ ցանցերի վերլուծությունը, սոցիալական առաջարկությունները, արտադրանքի և բովանդակության առաջարկությունները:

Գրաֆիկական տվյալների բազայի ֆունկցիոնալությունը SQL Server-ում հարմար է այնպիսի սցենարների համար, որտեղ տվյալները խիստ փոխկապակցված են և ունեն լավ սահմանված հարաբերություններ:

Գրաֆիկական տվյալների մոդելը

Գրաֆիկը գագաթների (հանգույցներ, հանգույց) և եզրեր (հարաբերություններ, եզրեր) մի շարք է: Գագաթները ներկայացնում են սուբյեկտներ, իսկ ծայրերը ներկայացնում են հղումներ, որոնց ատրիբուտները կարող են տեղեկատվություն պարունակել:

Գրաֆիկական տվյալների բազան մոդելավորում է սուբյեկտները որպես գրաֆիկ, ինչպես սահմանված է գրաֆիկների տեսության մեջ: Տվյալների կառուցվածքները գագաթներ և եզրեր են: Հատկանիշները գագաթների և եզրերի հատկություններն են: Կապը գագաթների միացումն է:

Ի տարբերություն տվյալների այլ մոդելների, գրաֆիկական տվյալների բազաները առաջնահերթություն են տալիս սուբյեկտների միջև հարաբերություններին: Հետևաբար, կարիք չկա հաշվարկել հարաբերությունները՝ օգտագործելով օտար բանալիներ կամ այլ կերպ։ Հնարավոր է ստեղծել տվյալների բարդ մոդելներ՝ օգտագործելով միայն գագաթային և եզրային աբստրակցիաները:

Ժամանակակից աշխարհում հարաբերությունների մոդելավորումը պահանջում է ավելի ու ավելի բարդ տեխնիկա: Հարաբերությունների մոդելավորման համար SQL Server 2017-ն առաջարկում է գրաֆիկական տվյալների բազայի հնարավորություններ: Գրաֆիկի գագաթները և եզրերը ներկայացված են որպես աղյուսակների նոր տեսակներ՝ NODE և EDGE: Գրաֆիկական հարցումները օգտագործում են նոր T-SQL ֆունկցիա, որը կոչվում է MATCH(): Քանի որ այս գործառույթը ներկառուցված է SQL Server 2017-ում, այն կարող է օգտագործվել ձեր առկա տվյալների բազաներում՝ առանց տվյալների բազայի փոխակերպման անհրաժեշտության:

Գրաֆիկական մոդելի առավելությունները

Մեր օրերում բիզնեսներն ու օգտատերերը պահանջում են հավելվածներ, որոնք աշխատում են ավելի ու ավելի շատ տվյալների հետ՝ միաժամանակ ակնկալելով բարձր արդյունավետություն և հուսալիություն: Տվյալների գրաֆիկական ներկայացումն առաջարկում է հարմար միջոց բարդ հարաբերությունների կառավարման համար: Այս մոտեցումը լուծում է բազմաթիվ խնդիրներ և օգնում է արդյունք ստանալ տվյալ համատեքստում:

Կարծես թե շատ հավելվածներ ապագայում կշահեն գրաֆիկական տվյալների բազաներից:

Տվյալների մոդելավորում՝ հարաբերականից մինչև գրաֆիկական մոդելավորում

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն
Օրինակ

Դիտարկենք աշխատողների հիերարխիա ունեցող կազմակերպչական կառուցվածքի օրինակ՝ աշխատողը զեկուցում է ղեկավարին, մենեջերը՝ ավագ ղեկավարին և այլն: Կախված կոնկրետ ընկերությունից, այս հիերարխիայում կարող են լինել ցանկացած քանակի մակարդակ: Բայց քանի որ մակարդակների թիվը մեծանում է, հարաբերությունների հաշվարկը հարաբերական տվյալների բազայում ավելի ու ավելի դժվար է դառնում: Բավական դժվար է պատկերացնել աշխատակիցների հիերարխիան, հիերարխիան մարքեթինգում կամ սոցիալական մեդիա կապերում: Տեսնենք, թե ինչպես SQL Graph-ը կարող է լուծել հիերարխիայի տարբեր մակարդակների հետ կապված խնդիրը:

Այս օրինակի համար եկեք ստեղծենք տվյալների պարզ մոդել: Ստեղծեք աշխատողների աղյուսակ EMP ID-ով EMPNO և սյունակ Մ.Գ.Ռ.A, որը մատնանշում է աշխատողի ղեկավարի (մենեջերի) ID-ն: Հիերարխիայի մասին բոլոր տեղեկությունները պահվում են այս աղյուսակում և կարող են հարցվել սյունակների միջոցով EMPNO и Մ.Գ.Ռ..

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն
Հետևյալ դիագրամը նաև ցույց է տալիս նույն կազմակերպչական գծապատկերի մոդելը՝ բնադրման չորս մակարդակով ավելի ծանոթ ձևով: Աշխատակիցները աղյուսակի գրաֆիկի գագաթներն են EMP. «Աշխատակից» կազմակերպությունը կապված է իր հետ «ներկայացնում» (ReportsTo) հարաբերություններով: Գրաֆիկական առումով հղումը եզր է (EDGE), որը միացնում է աշխատակիցների հանգույցները (NODEs):

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն

Եկեք ստեղծենք սովորական աղյուսակ EMP և այնտեղ ավելացրեք արժեքներ՝ համաձայն վերևի գծապատկերի:

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)

Ստորև բերված նկարը ցույց է տալիս աշխատողներին.

  • հետ աշխատող EMPNO 7369-ը ենթակա է 7902-ին;
  • հետ աշխատող EMPNO 7902 ենթակա 7566
  • հետ աշխատող EMPNO 7566 ենթակա 7839

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն
Այժմ դիտարկենք նույն տվյալների ներկայացումը գրաֆիկի տեսքով։ EMPLOYEE հանգույցն ունի մի քանի ատրիբուտներ և կապված է իր հետ «submits» հարաբերությամբ (EmplReportsTo): EmplReportsTo հարաբերությունների անվանումն է:

Եզրային աղյուսակը (EDGE) կարող է ունենալ նաև ատրիբուտներ:

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն
Ստեղծեք հանգույցների աղյուսակ EmpNode

Հանգույց ստեղծելու շարահյուսությունը բավականին պարզ է՝ դեպի արտահայտությունը Ստեղծեք աղյուսակը ավելացված է մինչև վերջ ՈՐՊԵՍ ՀԱՆԳԻՑ.

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

Այժմ եկեք տվյալները սովորական աղյուսակից վերածենք գրաֆիկի: Հաջորդը INSERT մուտքագրում է տվյալներ հարաբերական աղյուսակից EMP.

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

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն
Հատուկ սյունակում գտնվող հանգույցների աղյուսակում $node_id_* հյուրընկալողի ID-ն պահվում է որպես JSON: Այս աղյուսակի մնացած սյունակները պարունակում են հանգույցի ատրիբուտները։

Ստեղծել եզրեր (EDGE)

Եզրային աղյուսակի ստեղծումը շատ նման է հանգույցների աղյուսակ ստեղծելուն, բացառությամբ, որ բանալի բառը ՈՐՊԵՍ EDGE.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն

Այժմ եկեք սահմանենք աշխատակիցների միջև հարաբերությունները՝ օգտագործելով սյունակները EMPNO и Մ.Գ.Ռ.. Կազմակերպչական աղյուսակը հստակ ցույց է տալիս, թե ինչպես գրել 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);

Եզրային աղյուսակը լռելյայն ունի երեք սյունակ: Առաջին, $edge_id — եզրի նույնացուցիչ JSON-ի տեսքով: Մյուս երկուսը ($from_id и $to_id) ներկայացնում է կապը հանգույցների միջև: Բացի այդ, եզրերը կարող են ունենալ լրացուցիչ հատկություններ: Մեր դեպքում սա Դեպտնո.

Համակարգի դիտումներ

Համակարգի տեսքով sys.tables Կան երկու նոր սյունակներ.

  1. is_edge
  2. is_node

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

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն

ssms

Գրաֆիկների հետ կապված օբյեկտները գտնվում են Graph Tables պանակում: Հանգույցի աղյուսակի պատկերակը նշվում է կետով, իսկ եզրային սեղանի պատկերակը նշված է երկու միացված շրջանակներով (որը մի փոքր ակնոցի տեսք ունի):

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն

MATCH արտահայտություն

Արտահայտություն MATCH վերցված է CQL-ից (Cypher Query Language): Սա գրաֆիկի հատկությունների հարցումների արդյունավետ միջոց է: CQL-ն սկսվում է արտահայտությամբ MATCH.

շարահյուսություն

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

օրինակները

Դիտարկենք մի քանի օրինակ։

Ստորև ներկայացված հարցումը ցույց է տալիս այն աշխատակիցներին, որոնց Սմիթը և նրա ղեկավարը զեկուցում են:

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'

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն
Հետևյալ հարցումը Սմիթի համար աշխատողներ և երկրորդ մակարդակի ղեկավարներ գտնելու համար է: Եթե ​​հանեք առաջարկը ՈՐՏԵՂ, ապա արդյունքում կցուցադրվեն բոլոր աշխատակիցները։

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'

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն
Եվ վերջապես, երրորդ մակարդակի աշխատակիցների և ղեկավարների խնդրանք:

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'

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն
Հիմա եկեք փոխենք ուղղությունը՝ ձեռք բերելու Սմիթի ղեկավարներին:

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)

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն

Ամփոփում

SQL Server 2017-ը հաստատվել է որպես ձեռնարկության ամբողջական լուծում՝ տարբեր բիզնեսի ՏՏ կարիքների համար: SQL Graph-ի առաջին տարբերակը շատ խոստումնալից է: Նույնիսկ չնայած որոշ սահմանափակումներին, արդեն բավականաչափ ֆունկցիոնալություն կա գրաֆիկների հնարավորությունները ուսումնասիրելու համար:

SQL Graph ֆունկցիոնալությունը լիովին ինտեգրված է SQL Engine-ին: Այնուամենայնիվ, ինչպես արդեն նշվեց, SQL Server 2017-ն ունի հետևյալ սահմանափակումները.

Պոլիմորֆիզմի աջակցություն չկա:

  • Աջակցվում են միայն միակողմանի հղումներ:
  • Եզրերը չեն կարող թարմացնել իրենց $from_id և $to_id սյունակները UPDATE-ի միջոցով:
  • Անցումային փակումները չեն ապահովվում, բայց դրանք կարելի է ձեռք բերել CTE-ների միջոցով:
  • Սահմանափակ աջակցություն In-Memory OLTP օբյեկտների համար:
  • Ժամանակավոր աղյուսակները (System-Versioned Temporal Table), ժամանակավոր տեղական և գլոբալ աղյուսակները չեն ապահովվում:
  • Աղյուսակների տեսակները և աղյուսակի փոփոխականները չեն կարող հայտարարվել որպես NODE կամ EDGE:
  • Տվյալների բազաների միջև հարցումները չեն աջակցվում:
  • Չկա սովորական աղյուսակները գրաֆիկական աղյուսակների փոխարկելու ուղղակի միջոց կամ ինչ-որ հրաշագործ (հրաշագործ):
  • Գրաֆիկները ցուցադրելու համար GUI չկա, սակայն Power BI-ն կարող է օգտագործվել:

SQL Server 2017 գրաֆիկական տվյալների շտեմարանների ներածություն

Կարդալ ավելին:

Source: www.habr.com

Добавить комментарий