SQL Server 2017 графикалық деректер қорына кіріспе

Курс басталғанға дейін «MS SQL серверінің әзірлеушісі» Біз сізге тағы бір пайдалы аударма дайындадық.

Графикалық деректер базасы деректер қоры мамандары үшін маңызды технология болып табылады. Мен осы саладағы инновациялар мен жаңа технологияларды қадағалап отыруға тырысамын және реляциялық және NoSQL деректер қорымен жұмыс істегеннен кейін графикалық деректер қорының рөлі барған сайын артып келе жатқанын көремін. Күрделі иерархиялық деректермен жұмыс істегенде тек дәстүрлі мәліметтер базасы ғана емес, сонымен қатар NoSQL де тиімсіз. Көбінесе сілтеме деңгейлерінің санының және деректер қорының көлемінің ұлғаюымен өнімділіктің төмендеуі байқалады. Қарым-қатынастар күрделене түскен сайын, JOIN саны да артады.

Әрине, реляциялық модельде иерархиялармен жұмыс істеу үшін шешімдер бар (мысалы, рекурсивті CTE пайдалану), бірақ бұл әлі де уақытша шешімдер. Сонымен қатар, SQL Server графикалық дерекқорларының функционалдығы иерархияның бірнеше деңгейлерін өңдеуді жеңілдетеді. Деректер үлгісі де, сұраулар да жеңілдетілген, сондықтан олардың тиімділігі артады. Код көлемін айтарлықтай азайтады.

Графикалық мәліметтер базасы күрделі жүйелерді көрсетуге арналған экспрессивті тіл болып табылады. Бұл технология қазірдің өзінде әлеуметтік желілер, алаяқтыққа қарсы жүйелер, АТ желісін талдау, әлеуметтік ұсыныстар, өнім мен мазмұн бойынша ұсыныстар сияқты салаларда АТ индустриясында кеңінен қолданылады.

SQL серверіндегі графикалық дерекқордың функционалдығы деректер өзара жоғары байланысқан және жақсы анықталған қатынастары бар сценарийлер үшін қолайлы.

Графикалық деректер моделі

График – бұл шыңдар (түйіндер, түйін) және жиектер (байланыстар, жиектер) жиынтығы. Шыңдар нысандарды, ал жиектер атрибуттарында ақпаратты қамтуы мүмкін сілтемелерді білдіреді.

Графикалық дерекқор нысандарды графиктер теориясында анықталғандай график ретінде модельдейді. Деректер құрылымдары шыңдар мен жиектер болып табылады. Атрибуттар – шыңдар мен жиектердің қасиеттері. Байланыс - бұл төбелердің байланысы.

Басқа деректер үлгілерінен айырмашылығы, графикалық дерекқорлар нысандар арасындағы қарым-қатынастарға басымдық береді. Сондықтан сыртқы кілттерді пайдаланып немесе басқа жолмен қарым-қатынастарды есептеудің қажеті жоқ. Тек шыңы мен жиегі абстракцияларын пайдаланып күрделі деректер үлгілерін жасауға болады.

Қазіргі әлемде қарым-қатынастарды модельдеу барған сайын күрделі әдістерді қажет етеді. Қарым-қатынастарды модельдеу үшін SQL Server 2017 графикалық дерекқор мүмкіндіктерін ұсынады. Графиктің шыңдары мен жиектері кестелердің жаңа түрлері ретінде ұсынылған: NODE және EDGE. Графикалық сұраулар MATCH() деп аталатын жаңа T-SQL функциясын пайдаланады. Бұл функция SQL Server 2017 жүйесіне енгізілгендіктен, оны дерекқорды түрлендіруді қажет етпей-ақ бар дерекқорларыңызда пайдалануға болады.

Графикалық модельдің артықшылықтары

Қазіргі уақытта бизнес пен пайдаланушылар жоғары өнімділік пен сенімділікті күте отырып, көбірек деректермен жұмыс істейтін қолданбаларды талап етеді. Мәліметтердің графикалық көрінісі күрделі қатынастарды өңдеуге ыңғайлы құралды ұсынады. Бұл тәсіл көптеген мәселелерді шешеді және берілген контексте нәтиже алуға көмектеседі.

Болашақта көптеген қолданбалар графикалық дерекқордан пайда көретін сияқты.

Деректерді модельдеу: қатынастан графикалық модельдеуге дейін

SQL Server 2017 графикалық деректер қорына кіріспе
Мысал:

Қызметкерлер иерархиясы бар ұйымдық құрылымның мысалын қарастырайық: қызметкер басшыға есеп береді, басшы жоғары басшыға есеп береді және т.б. Нақты компанияға байланысты бұл иерархияда деңгейлердің кез келген саны болуы мүмкін. Бірақ деңгейлер саны артқан сайын реляциялық дерекқордағы қатынастарды есептеу қиындай түседі. Қызметкерлердің иерархиясын, маркетингтегі немесе әлеуметтік медиа байланысындағы иерархияны елестету өте қиын. SQL Graph иерархияның әртүрлі деңгейлерін өңдеу мәселесін қалай шеше алатынын көрейік.

Бұл мысал үшін қарапайым деректер үлгісін жасайық. Қызметкерлер кестесін жасаңыз EMP идентификаторымен EMPNO және баған М.Г.Р.Қызметкер басшысының (басшының) жеке куәлігін көрсететін А. Иерархия туралы барлық ақпарат осы кестеде сақталады және оларды бағандар арқылы сұрауға болады EMPNO и М.Г.Р..

SQL Server 2017 графикалық деректер қорына кіріспе
Келесі диаграммада анағұрлым таныс пішінде ұя салудың төрт деңгейі бар бірдей ұйым диаграммасы үлгісі көрсетілген. Қызметкерлер кестедегі графиктің шыңдары болып табылады EMP. "Қызметкер" нысаны "жібереді" (ReportsTo) қатынасы арқылы өзіне байланысты. Графикалық терминдерде сілтеме қызметкерлердің түйіндерін (ТҮЙІН) байланыстыратын жиек (EDGE) болып табылады.

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 графикалық деректер қорына кіріспе
Енді сол деректердің график түрінде берілуін қарастырайық. ҚЫЗМЕТКЕР түйінінің бірнеше атрибуттары бар және "жіберу" қатынасы арқылы (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_* хост идентификаторы 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. шеткі
  2. түйіні

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

SQL Server 2017 графикалық деректер қорына кіріспе

СМЖ

Графиктерге қатысты объектілер Графикалық кестелер қалтасында орналасқан. Түйін кестесінің белгішесі нүктемен, ал жиек кестесінің белгішесі екі қосылған шеңбермен белгіленген (ол көзілдірікке ұқсайды).

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 нысандары үшін шектеулі қолдау.
  • Уақытша кестелерге (Жүйе нұсқасы бойынша уақытша кесте), уақытша жергілікті және ғаламдық кестелерге қолдау көрсетілмейді.
  • Кесте түрлері мен кесте айнымалыларын NODE немесе EDGE ретінде жариялау мүмкін емес.
  • Деректер базасы арасындағы сұрауларға қолдау көрсетілмейді.
  • Кәдімгі кестелерді графиктік кестелерге түрлендірудің тікелей жолы немесе қандай да бір шебері (шебер) жоқ.
  • Графиктерді көрсету үшін GUI жоқ, бірақ Power BI пайдалануға болады.

SQL Server 2017 графикалық деректер қорына кіріспе

Ары қарай оқу:

Ақпарат көзі: www.habr.com

пікір қалдыру