Пре почетка курса
Графичке базе података су важна технологија за стручњаке за базе података. Трудим се да будем у току са иновацијама и новим технологијама у овој области и, након рада са релационим и НоСКЛ базама података, видим да улога база података графова постаје све важнија. Када радите са сложеним хијерархијским подацима, нису само традиционалне базе података неефикасне, већ и НоСКЛ. Често, како се повећава број нивоа везе и величина базе података, перформансе се смањују. А како односи постају сложенији, повећава се и број ЈОИН-ова.
Наравно, релациони модел има решења за рад са хијерархијама (на пример, коришћењем рекурзивних ЦТЕ-ова), али то су и даље заобилазна решења. У исто време, функционалност СКЛ Сервер база података графова омогућава вам да лако рукујете више нивоа хијерархије. И модел података и упити су поједностављени, а самим тим и њихова ефикасност се повећава. Количина кода је значајно смањена.
Графичке базе података су изражајан језик за представљање сложених система. Ова технологија се већ прилично користи у ИТ индустрији у областима као што су друштвене мреже, системи против превара, анализа ИТ мрежа, друштвене препоруке, препоруке производа и садржаја.
Функционалност базе података графова у СКЛ Серверу је погодна за сценарије у којима су подаци веома међусобно повезани и имају добро дефинисане односе.
Модел података графикона
Граф је скуп темена (чворова) и ивица (односи, ивица). Врхови представљају ентитете, а ивице представљају односе чији атрибути могу садржати информације.
База података графова моделује ентитете као граф као што је дефинисано у теорији графова. Структуре података су врхови и ивице. Атрибути су својства врхова и ивица. Веза је веза врхова.
За разлику од других модела података, базе података графова дају приоритет односима између ентитета. Према томе, нема потребе за израчунавањем односа коришћењем страних кључева или било ког другог начина. Могуће је креирати сложене моделе података користећи само апстракције врхова и ивица.
У савременом свету моделирање односа захтева све сложеније технике. За моделирање односа, СКЛ Сервер 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
Погледајмо сада графички приказ истих података. Тем ЗАПОСЛЕНИ има неколико атрибута и повезан је сам са собом релацијом „подређени“ (ЕмплРепортсТо). ЕмплРепортсТо је име везе.
Ивица табеле (ЕДГЕ) такође може да садржи атрибуте.
Хајде да направимо табелу чворова ЕмпНоде
Синтакса за креирање чвора је прилично једноставна: до израза СТВОРИ ТАБЕЛУ додаје се до краја "КАО Чвор".
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
У табели чворова у посебној колони $node_id_*
идентификатор чвора се чува као ЈСОН. Преостале колоне ове табеле садрже атрибуте чвора.
Прављење ивица (ЕДГЕ)
Креирање табеле ивица је веома слично креирању табеле чворова, осим што се користи кључна реч "КАО Ивица".
CREATE TABLE empReportsTo(Deptno int) AS EDGE
Хајде сада да дефинишемо везе између запослених помоћу колона ЕМПНО и МГР. Дијаграм организационе структуре јасно показује како се пише ИНСЕРТ.
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
појавиле су се две нове колоне:
- ис_едге
- ис_ноде
SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'
ССМС
Објекти који се односе на графове налазе се у фасцикли Грапх Таблес. Икона табеле чворова је означена тачком, а икона табеле са ивицама је означена са два повезана круга (мало као наочаре).
МАТЦХ израз
Израз УТАКМИЦА преузето из ЦКЛ (Ципхер Куери Лангуаге). Ово је ефикасан начин за испитивање својстава графикона. ЦКЛ почиње са изразом УТАКМИЦА.
синтакса
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'
Следећи упит је за проналажење запослених и менаџера другог нивоа за Смитх. Ако уклоните реченицу ГДЕ, онда ће резултат приказати све запослене.
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'
И на крају, захтев за запослене и менаџере трећег нивоа.
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'
Хајде сада да променимо правац да добијемо Смитове шефове.
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 има следећа ограничења:
Нема подршке за полиморфизам.
- Подржане су само једносмерне везе.
- Ивице не могу да ажурирају колоне $фром_ид и $то_ид путем УПДАТЕ.
- Транзитивна затварања нису подржана, али се могу добити помоћу ЦТЕ.
- Подршка за ОЛТП објекте у меморији је ограничена.
- Привремене табеле (темпорална табела са верзијом система), привремене локалне и глобалне табеле нису подржане.
- Типови табела и променљиве табеле се не могу декларисати као НОДЕ или ЕДГЕ.
- Упити за више база података нису подржани.
- Не постоји директан начин или чаробњак за претварање обичних табела у табеле са графиконима.
- Не постоји ГУИ за приказ графикона, али можете користити Повер БИ.
Опширније:
Извор: ввв.хабр.цом