Увод у СКЛ Сервер 2017 Грапх базе података

Пре почетка курса „Програмер МС СКЛ сервера“ За вас смо припремили још један користан превод.

Графичке базе података су важна технологија за стручњаке за базе података. Трудим се да будем у току са иновацијама и новим технологијама у овој области и, након рада са релационим и НоСКЛ базама података, видим да улога база података графова постаје све важнија. Када радите са сложеним хијерархијским подацима, нису само традиционалне базе података неефикасне, већ и НоСКЛ. Често, како се повећава број нивоа везе и величина базе података, перформансе се смањују. А како односи постају сложенији, повећава се и број ЈОИН-ова.

Наравно, релациони модел има решења за рад са хијерархијама (на пример, коришћењем рекурзивних ЦТЕ-ова), али то су и даље заобилазна решења. У исто време, функционалност СКЛ Сервер база података графова омогућава вам да лако рукујете више нивоа хијерархије. И модел података и упити су поједностављени, а самим тим и њихова ефикасност се повећава. Количина кода је значајно смањена.

Графичке базе података су изражајан језик за представљање сложених система. Ова технологија се већ прилично користи у ИТ индустрији у областима као што су друштвене мреже, системи против превара, анализа ИТ мрежа, друштвене препоруке, препоруке производа и садржаја.

Функционалност базе података графова у СКЛ Серверу је погодна за сценарије у којима су подаци веома међусобно повезани и имају добро дефинисане односе.

Модел података графикона

Граф је скуп темена (чворова) и ивица (односи, ивица). Врхови представљају ентитете, а ивице представљају односе чији атрибути могу садржати информације.

База података графова моделује ентитете као граф као што је дефинисано у теорији графова. Структуре података су врхови и ивице. Атрибути су својства врхова и ивица. Веза је веза врхова.

За разлику од других модела података, базе података графова дају приоритет односима између ентитета. Према томе, нема потребе за израчунавањем односа коришћењем страних кључева или било ког другог начина. Могуће је креирати сложене моделе података користећи само апстракције врхова и ивица.

У савременом свету моделирање односа захтева све сложеније технике. За моделирање односа, СКЛ Сервер 2017 нуди могућности базе података графова. Врхови и ивице графа су представљени као нови типови табела: Чвор и Ивица. Графички упити користе нову Т-СКЛ функцију под називом МАТЦХ(). Пошто је ова функционалност уграђена у СКЛ Сервер 2017, може се користити у вашим постојећим базама података без потребе за конверзијом.

Предности модела графа

Данас, предузећа и корисници захтевају апликације које обрађују све више података, очекујући високе перформансе и поузданост. Представљање података у виду графикона нуди погодно средство за руковање сложеним односима. Овај приступ решава многе проблеме и помаже да се добију резултати у датом контексту.

Изгледа да ће многе апликације имати користи од коришћења база података графова у будућности.

Моделирање података: од релационог до графичког модела

Увод у СКЛ Сервер 2017 Грапх базе података
Пример

Погледајмо пример организационе структуре са хијерархијом запослених: запослени извештава менаџеру, менаџер извештава вишем менаџеру итд. У зависности од конкретне компаније, може постојати било који број нивоа у овој хијерархији. Али како се број нивоа повећава, израчунавање односа у релационој бази података постаје све теже. Прилично је тешко замислити хијерархију запослених, хијерархију у маркетингу или везе на друштвеним мрежама. Хајде да видимо како СКЛ Грапх може да реши проблем руковања различитим нивоима хијерархије.

За овај пример направићемо једноставан модел података. Хајде да направимо табелу запослених ЕМП са личном картом ЕМПНО и колона МГР, са назнаком идентификатора надређеног (менаџера) запосленог. Све информације о хијерархији се чувају у овој табели и могу се тражити помоћу колона ЕМПНО и МГР.

Увод у СКЛ Сервер 2017 Грапх базе података
Следећи дијаграм приказује исти модел организационе структуре са четири нивоа угнежђења у познатијем облику. Запослени су врхови графа из табеле ЕМП. Ентитет „запослени“ је повезан са самим собом везом „подноси“ (РепортсТо). У смислу графа, веза је ивица (ЕДГЕ) која повезује чворове (НОДЕ) запослених.

Увод у СКЛ Сервер 2017 Грапх базе података

Хајде да направимо редовну табелу ЕМП и додајте вредности тамо у складу са горњим дијаграмом.

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)

На слици испод су запослени:

  • запослени са ЕМПНО 7369 слуша 7902;
  • запослени са ЕМПНО 7902 слуша 7566
  • запослени са ЕМПНО 7566 слуша 7839

Увод у СКЛ Сервер 2017 Грапх базе података
Погледајмо сада графички приказ истих података. Тем ЗАПОСЛЕНИ има неколико атрибута и повезан је сам са собом релацијом „подређени“ (ЕмплРепортсТо). ЕмплРепортсТо је име везе.

Ивица табеле (ЕДГЕ) такође може да садржи атрибуте.

Увод у СКЛ Сервер 2017 Грапх базе података
Хајде да направимо табелу чворова ЕмпНоде

Синтакса за креирање чвора је прилично једноставна: до израза СТВОРИ ТАБЕЛУ додаје се до краја "КАО Чвор".

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 INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp

Увод у СКЛ Сервер 2017 Грапх базе података
У табели чворова у посебној колони $node_id_* идентификатор чвора се чува као ЈСОН. Преостале колоне ове табеле садрже атрибуте чвора.

Прављење ивица (ЕДГЕ)

Креирање табеле ивица је веома слично креирању табеле чворова, осим што се користи кључна реч "КАО Ивица".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Увод у СКЛ Сервер 2017 Грапх базе података

Хајде сада да дефинишемо везе између запослених помоћу колона ЕМПНО и МГР. Дијаграм организационе структуре јасно показује како се пише ИНСЕРТ.

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 — идентификатор ивице у ЈСОН облику. Друга два ($from_id и $to_id) представљају везу између чворова. Поред тога, ивице могу имати додатна својства. У нашем случају јесте Дептно.

Систем Виевс

У системском приказу sys.tables појавиле су се две нове колоне:

  1. ис_едге
  2. ис_ноде

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

Увод у СКЛ Сервер 2017 Грапх базе података

ССМС

Објекти који се односе на графове налазе се у фасцикли Грапх Таблес. Икона табеле чворова је означена тачком, а икона табеле са ивицама је означена са два повезана круга (мало као наочаре).

Увод у СКЛ Сервер 2017 Грапх базе података

МАТЦХ израз

Израз УТАКМИЦА преузето из ЦКЛ (Ципхер Куери Лангуаге). Ово је ефикасан начин за испитивање својстава графикона. ЦКЛ почиње са изразом УТАКМИЦА.

синтакса

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'

Увод у СКЛ Сервер 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'

Увод у СКЛ Сервер 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'

Увод у СКЛ Сервер 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)

Увод у СКЛ Сервер 2017 Грапх базе података

Закључак

СКЛ Сервер 2017 се етаблирао као комплетно пословно решење за различите ИТ пословне задатке. Прва верзија СКЛ Грапх-а је веома обећавајућа. Чак и упркос неким ограничењима, већ постоји довољно функционалности за истраживање могућности графикона.

СКЛ Грапх функционалност је у потпуности интегрисана у СКЛ Енгине. Међутим, као што је већ речено, СКЛ Сервер 2017 има следећа ограничења:

Нема подршке за полиморфизам.

  • Подржане су само једносмерне везе.
  • Ивице не могу да ажурирају колоне $фром_ид и $то_ид путем УПДАТЕ.
  • Транзитивна затварања нису подржана, али се могу добити помоћу ЦТЕ.
  • Подршка за ОЛТП објекте у меморији је ограничена.
  • Привремене табеле (темпорална табела са верзијом система), привремене локалне и глобалне табеле нису подржане.
  • Типови табела и променљиве табеле се не могу декларисати као НОДЕ или ЕДГЕ.
  • Упити за више база података нису подржани.
  • Не постоји директан начин или чаробњак за претварање обичних табела у табеле са графиконима.
  • Не постоји ГУИ за приказ графикона, али можете користити Повер БИ.

Увод у СКЛ Сервер 2017 Грапх базе података

Опширније:

Извор: ввв.хабр.цом

Додај коментар