SQL Server 2017 графикалык маалымат базаларына киришүү

Курс башталганга чейин "MS SQL Server Developer" Биз сиздер үчүн дагы бир пайдалуу котормо даярдадык.

График маалымат базалары маалымат базасынын адистери үчүн маанилүү технология болуп саналат. Мен бул жааттагы инновацияларды жана жаңы технологияларды карманууга аракет кылам жана реляциялык жана NoSQL маалымат базалары менен иштегенден кийин графикалык маалымат базаларынын ролу барган сайын маанилүү болуп баратканын көрүп жатам. Татаал иерархиялык маалыматтар менен иштөөдө салттуу маалымат базалары гана эмес, NoSQL да эффективдүү эмес. Көбүнчө, туташуунун деңгээли жана маалымат базасынын көлөмү көбөйгөн сайын, өндүрүмдүүлүк төмөндөйт. Ал эми мамилелер татаалдашкан сайын, JOINдердин саны да көбөйөт.

Албетте, реляциялык моделде иерархиялар менен иштөө үчүн чечимдер бар (мисалы, рекурсивдүү CTEлерди колдонуу), бирок булар дагы эле убактылуу чечимдер. Ошол эле учурда, SQL Server графикалык маалымат базаларынын функционалдуулугу иерархиянын бир нече деңгээлин оңой башкарууга мүмкүндүк берет. Берилиштер модели да, сурамдары да жөнөкөйлөштүрүлгөн, демек, алардын натыйжалуулугу жогорулайт. Коддун көлөмү кыйла кыскарган.

Графикалык маалымат базалары татаал системаларды көрсөтүү үчүн экспрессивдүү тил болуп саналат. Бул технология IT тармагында социалдык тармактар, алдамчылыкка каршы системалар, IT тармагын анализдөө, социалдык сунуштар, продукт жана мазмун боюнча сунуштар сыяктуу тармактарда кеңири колдонулат.

SQL сервериндеги графиктер базасынын функционалдуулугу маалыматтар бири-бири менен абдан тыгыз байланышта болгон жана так аныкталган мамилелерге ээ болгон сценарийлер үчүн ылайыктуу.

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

График — чокулардын (түйүндөрдүн) жана четтеринин (байланыштары, четтери) жыйындысы. Чокулар объекттерди, ал эми четтери атрибуттары маалыматты камтышы мүмкүн болгон мамилелерди билдирет.

График маалымат базасы объектилерди график теориясында аныкталгандай график катары моделдейт. Маалымат структуралары чокулары жана четтери болуп саналат. Атрибуттар чокулардын жана четтердин касиеттери. Байланыш - бул чокулардын байланышы.

Башка маалымат моделдеринен айырмаланып, графикалык маалымат базалары объектилердин ортосундагы мамилелерге артыкчылык берет. Демек, тышкы ачкычтарды же башка каражаттарды колдонуу менен мамилелерди эсептөөнүн кереги жок. Бир гана чоку жана четки абстракцияларды колдонуу менен татаал маалымат моделдерин түзүүгө болот.

Заманбап дүйнөдө мамилелерди моделдөө барган сайын татаал ыкмаларды талап кылат. Мамилелерди моделдөө үчүн, SQL Server 2017 графиктер базасынын мүмкүнчүлүктөрүн сунуш кылат. Графиктин чокулары жана четтери таблицалардын жаңы түрлөрү катары берилген: NODE жана EDGE. Графикалык сурамдарда MATCH() деп аталган жаңы T-SQL функциясы колдонулат. Бул функция SQL Server 2017ге орнотулгандыктан, аны эч кандай конвертациялоону талап кылбастан учурдагы маалымат базаларыңызда колдонсо болот.

График моделинин артыкчылыктары

Бүгүнкү күндө бизнес жана колдонуучулар жогорку өндүрүмдүүлүктү жана ишенимдүүлүктү күтүп, барган сайын көбүрөөк маалыматтарды иштеткен тиркемелерди талап кылышат. Берилиштерди график катары көрсөтүү татаал мамилелерди башкаруунун ыңгайлуу каражатын сунуш кылат. Бул ыкма көптөгөн көйгөйлөрдү чечет жана берилген контекстте натыйжаларды алууга жардам берет.

Келечекте көптөгөн колдонмолор графиктер базасын колдонуудан пайда көрөт окшойт.

Берилиштерди моделдөө: реляциялык моделден графикалык моделге

SQL Server 2017 графикалык маалымат базаларына киришүү
мисал

Кызматкерлердин иерархиясы бар уюштуруу структурасынын мисалын карап көрөлү: кызматкер жетекчиге, менеджер жогорку даражалуу жетекчиге отчет берет жана башкалар. Конкреттүү компанияга жараша, бул иерархияда ар кандай деңгээлдер болушу мүмкүн. Бирок деңгээлдердин саны көбөйгөн сайын, реляциялык маалымат базасында мамилелерди эсептөө татаалдашып баратат. Кызматкерлердин иерархиясын, маркетингдеги иерархияны же социалдык тармактардагы байланыштарды элестетүү кыйын. Келгиле, SQL Graph ар кандай деңгээлдеги иерархия менен иштөө маселесин кантип чече аларын карап көрөлү.

Бул мисал үчүн биз жөнөкөй маалымат моделин жасайбыз. Кызматкерлердин таблицасын түзөлү PMS ID менен EMPNO жана колонна М.Г.Р., кызматкердин жетекчисинин (жетекчинин) идентификаторун көрсөтүү менен. Иерархия жөнүндө бардык маалымат бул таблицада сакталат жана мамычаларды колдонуу менен сураса болот EMPNO и М.Г.Р..

SQL Server 2017 графикалык маалымат базаларына киришүү
Төмөнкү диаграмма дагы тааныш формада уялардын төрт деңгээли менен бирдей уюштуруу структурасынын моделин көрсөтөт. Кызматкерлер таблицадан алынган графиктин чокулары PMS. "Кызматкер" жак өзүнө "тапшырышат" (ReportsTo) байланышы аркылуу туташтырылган. График менен айтканда, шилтеме кызматкерлердин түйүндөрүн (NODE) ​​бириктирген чет (EDGE) болуп саналат.

SQL Server 2017 графикалык маалымат базаларына киришүү

Кадимки таблица түзөлү PMS жана жогорудагы диаграммага ылайык баалуулуктарды кошуңуз.

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;

Эми берилиштерди кадимки таблицадан графиктик таблицага айландыралы. Кийинки ЖАЗУУ реляциялык таблицадан маалыматтарды киргизет PMS.

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

SQL Server 2017 графикалык маалымат базаларына киришүү
Атайын тилкеде түйүндөрдүн таблицасында $node_id_* түйүн идентификатору JSON катары сакталат. Бул таблицанын калган мамычалары түйүндүн атрибуттарын камтыйт.

Чектерди түзүү (EDGE)

Четтик таблицаны түзүү түйүн таблицасын түзүүгө абдан окшош, бирок ачкыч сөз колдонулат "AS EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

SQL Server 2017 графикалык маалымат базаларына киришүү

Эми мамычаларды колдонуу менен кызматкерлердин ортосундагы байланыштарды аныктайлы EMPNO и М.Г.Р.. Уюштуруу структурасынын диаграммасы кантип жазууну ачык көрсөтүп турат ЖАЗУУ.

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 туюнтмасы

билдирүү МАТЧА CQL (Cypher Query Language) тилинен алынган. Бул графиктин касиеттерин суроонун натыйжалуу жолу. CQL туюнтма менен башталат МАТЧА.

синтаксиси

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 өзүн ар кандай IT бизнес милдеттери үчүн толук ишкана чечими катары көрсөттү. SQL Graph биринчи версия абдан келечектүү болуп саналат. Кээ бир чектөөлөргө карабастан, графиктердин мүмкүнчүлүктөрүн изилдөө үчүн жетиштүү функция бар.

SQL Graph функциясы толугу менен SQL Engine менен интеграцияланган. Бирок, буга чейин айтылгандай, SQL Server 2017 төмөнкү чектөөлөргө ээ:

Полиморфизмди колдоо жок.

  • Бир багыттуу байланыштар гана колдоого алынат.
  • Edges $from_id жана $to_id мамычаларды UPDATE аркылуу жаңырта албайт.
  • Өтмө жабуулар колдоого алынбайт, бирок аларды CTE аркылуу алса болот.
  • In-Memory OLTP объектилерин колдоо чектелген.
  • Убактылуу таблицалар (системалык версияланган убактылуу таблица), убактылуу жергиликтүү жана глобалдык таблицалар колдоого алынбайт.
  • Таблица түрлөрү жана таблица өзгөрмөлөрү NODE же EDGE катары жарыяланышы мүмкүн эмес.
  • Маалыматтар базасы боюнча сурамдар колдоого алынбайт.
  • Кадимки таблицаларды графиктик таблицаларга которуунун түз жолу же устасы жок.
  • Графиктерди көрсөтүү үчүн GUI жок, бирок сиз Power BI колдоно аласыз.

SQL Server 2017 графикалык маалымат базаларына киришүү

Кененирээк:

Source: www.habr.com

Комментарий кошуу