د SQL سرور 2017 ګراف ډیټابیسونو پیژندنه

د کورس له پیل څخه مخکې "MS SQL سرور جوړونکی" موږ ستاسو لپاره بله ګټوره ژباړه چمتو کړې ده.

د ګراف ډیټابیس د ډیټابیس متخصصینو لپاره یوه مهمه ټیکنالوژي ده. زه هڅه کوم چې پدې برخه کې د نوښتونو او نوي ټیکنالوژیو سره وساتم او د اړونده او NoSQL ډیټابیسونو سره کار کولو وروسته ، زه ګورم چې د ګراف ډیټابیس رول ورځ تر بلې مهم کیږي. کله چې د پیچلي درجه بندي ډیټا سره کار کوي، نه یوازې دودیز ډیټابیسونه غیر اغیزمن دي، بلکې NoSQL هم. ډیری وختونه ، لکه څنګه چې د پیوستون کچه او د ډیټابیس اندازه ډیریږي ، فعالیت کمیږي. او لکه څنګه چې اړیکې ډیرې پیچلې کیږي، د شمولیت شمیر هم ډیریږي.

البته، اړونده ماډل د درجه بندي سره د کار کولو لپاره حلونه لري (د بیلګې په توګه، د تکراري CTEs کارول)، مګر دا لاهم د حل لارې دي. په ورته وخت کې ، د SQL سرور ګراف ډیټابیس فعالیت تاسو ته اجازه درکوي په اسانۍ سره د څو درجې درجه بندي اداره کړئ. د معلوماتو ماډل او پوښتنې دواړه ساده شوي، او له همدې امله د دوی موثریت زیاتیږي. د کوډ مقدار د پام وړ کم شوی.

د ګراف ډیټابیسونه د پیچلو سیسټمونو نمایندګۍ لپاره څرګند ژبه ده. دا ټیکنالوژي دمخه د معلوماتي ټیکنالوژۍ صنعت کې په پراخه کچه کارول کیږي لکه ټولنیز شبکې ، د درغلیو ضد سیسټمونه ، د معلوماتي ټیکنالوژۍ شبکې تحلیلونه ، ټولنیز وړاندیزونه ، محصول او د مینځپانګې سپارښتنې.

په SQL سرور کې د ګراف ډیټابیس فعالیت د سناریوګانو لپاره مناسب دی چیرې چې ډیټا خورا یو له بل سره تړلې او ښه تعریف شوي اړیکې لري.

د ګراف ډیټا ماډل

ګراف د عمودیو (نوډونو) او څنډو (اړیکو، څنډو) مجموعه ده. ورټیسس د ادارو استازیتوب کوي، او څنډې د اړیکو استازیتوب کوي چې ځانګړتیاوې یې ممکن معلومات ولري.

د ګراف ډیټابیس ماډلونه د ګراف په توګه اداره کوي لکه څنګه چې د ګراف تیوري کې تعریف شوي. د معلوماتو جوړښتونه عمودي او څنډې دي. صفتونه د عمودی او څنډو ملکیتونه دي. اړیکه د عمودی ارتباط دی.

د نورو ډیټا ماډلونو برعکس، د ګراف ډیټابیسونه د ادارو ترمنځ اړیکو ته لومړیتوب ورکوي. له همدې امله، د بهرنیو کلیدونو یا نورو وسیلو په کارولو سره د اړیکو محاسبه کولو ته اړتیا نشته. دا ممکنه ده چې یوازې د عمودی او څنډې خلاصون په کارولو سره پیچلي ډیټا ماډلونه رامینځته کړئ.

په عصري نړۍ کې، د اړیکو ماډلینګ په زیاتیدونکي توګه پیچلي تخنیکونو ته اړتیا لري. د اړیکو ماډل کولو لپاره، د SQL سرور 2017 د ګراف ډیټابیس وړتیاوې وړاندې کوي. د ګراف عمودی او څنډې د جدولونو د نوي ډولونو په توګه ښودل شوي: NODE او EDGE. د ګراف پوښتنې یو نوی T-SQL فعالیت کاروي چې MATCH(). څرنګه چې دا فعالیت د SQL سرور 2017 کې جوړ شوی، دا ستاسو په موجوده ډیټابیسونو کې د کوم تبادلې اړتیا پرته کارول کیدی شي.

د ګراف ماډل ګټې

نن ورځ ، سوداګرۍ او کارونکي د غوښتنلیکونو غوښتنه کوي چې ډیر او ډیر ډیټا اداره کړي ، پداسې حال کې چې د لوړ فعالیت او اعتبار تمه لري. د ګراف په توګه د معلوماتو استازیتوب کول د پیچلو اړیکو اداره کولو لپاره اسانه وسیله وړاندې کوي. دا طریقه ډیری ستونزې حل کوي او په ټاکل شوي شرایطو کې د پایلو ترلاسه کولو کې مرسته کوي.

داسې ښکاري چې ډیری غوښتنلیکونه به په راتلونکي کې د ګراف ډیټابیس کارولو څخه ګټه پورته کړي.

د ډیټا ماډلینګ: د ګراف ماډل پورې اړوند

د SQL سرور 2017 ګراف ډیټابیسونو پیژندنه
بېلګه:

راځئ چې د سازماني جوړښت یوه بیلګه وګورو چې د کارمندانو درجه بندي لري: یو کارمند مدیر ته راپور ورکوي، مدیر لوړ مدیر ته راپور ورکوي، او داسې نور. په ځانګړي شرکت پورې اړه لري، کیدای شي په دې درجه بندي کې هر ډول کچې وي. مګر لکه څنګه چې د کچو شمیر ډیریږي ، په اړوند ډیټابیس کې د اړیکو محاسبه ورځ تر بلې ستونزمن کیږي. دا خورا ستونزمن کار دی چې د کارمندانو درجه بندي، په بازار موندنې کې درجه بندي یا په ټولنیزو شبکو کې اړیکې تصور کړئ. راځئ چې وګورو چې څنګه د SQL ګراف کولی شي د مختلف درجې درجه بندي اداره کولو ستونزه حل کړي.

د دې مثال لپاره موږ به د معلوماتو ساده ماډل جوړ کړو. راځئ چې د کارمندانو میز جوړ کړو EMP د ID سره EMPNO او کالم M.G.R.د کارمند څارونکي (منیجر) پیژندونکي ته اشاره کوي. د درجه بندي په اړه ټول معلومات پدې جدول کې زیرمه شوي او د کالمونو په کارولو سره پوښتل کیدی شي EMPNO и M.G.R..

د SQL سرور 2017 ګراف ډیټابیسونو پیژندنه
لاندې ډیاګرام د ورته سازماني جوړښت ماډل ښیې چې د ځنځیرونو څلور کچې سره په ډیر پیژندل شوي شکل کې. کارمندان د جدول څخه د ګراف عمودی برخې دي EMP. اداره "کارکوونکی" له ځان سره د "سپارلو" (ReportsTo) د ارتباط له لارې وصل دی. د ګراف په شرایطو کې، لینک یو څنډه (EDGE) ده چې د کارمندانو نوډونه (NODE) ​​سره نښلوي.

د SQL سرور 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 سرور 2017 ګراف ډیټابیسونو پیژندنه
اوس راځئ چې د ورته معلوماتو ګراف استازیتوب وګورو. د EMPLOYEE ورټیکس ډیری ځانګړتیاوې لري او د "ماتحت" اړیکو (EmplReportsTo) له لارې ځان سره تړلی دی. EmplReportsTo د اړیکو نوم دی.

د څنډې جدول (EDGE) ممکن ځانګړتیاوې هم ولري.

د SQL سرور 2017 ګراف ډیټابیسونو پیژندنه
راځئ چې د نوډ جدول EmpNode جوړ کړو

د نوډ جوړولو لپاره ترکیب خورا ساده دی: بیان ته چوکاټ جوړ کړئ په پای کې اضافه کیږي "AS NODE".

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

اوس راځئ چې ډاټا د منظم جدول څخه ګراف میز ته واړوو. بل داخل کړئ د اړونده جدول څخه ډاټا داخلوي EMP.

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

د SQL سرور 2017 ګراف ډیټابیسونو پیژندنه
په ځانګړي کالم کې د نوډونو جدول کې $node_id_* نوډ پیژندونکی د JSON په توګه زیرمه شوی. د دې جدول پاتې کالمونه د نوډ ځانګړتیاوې لري.

د څنډو جوړول (EDGE)

د څنډې جدول رامینځته کول د نوډ میز رامینځته کولو سره ورته دي ، پرته لدې چې کلیدي کارول کیږي "AS EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

د SQL سرور 2017 ګراف ډیټابیسونو پیژندنه

اوس راځئ چې د کالمونو په کارولو سره د کارمندانو ترمنځ اړیکې تعریف کړو EMPNO и M.G.R.. د سازماني جوړښت ډیاګرام په روښانه ډول ښیې چې څنګه لیکل کیږي داخل کړئ.

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) د نوډونو تر مینځ ارتباط څرګندوي. برسېره پردې، څنډې کولی شي اضافي ځانګړتیاوې ولري. زموږ په قضیه کې دا دی Deptno.

د سیسټم لیدونه

د سیسټم په نظر کې sys.tables دوه نوي کالمونه راڅرګند شول:

  1. is_edge
  2. is_node

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

د SQL سرور 2017 ګراف ډیټابیسونو پیژندنه

ssms

د ګراف اړوند توکي د ګراف میزونو فولډر کې موقعیت لري. د نوډ میز آیکون د نقطې سره نښه شوی، او د څنډې میز آئیکون د دوو تړل شویو حلقو سره نښه شوی (یو څه د شیشې په څیر).

د SQL سرور 2017 ګراف ډیټابیسونو پیژندنه

د میچ بیان

څرګندونه MATCH د CQL (د سایفر پوښتنو ژبه) څخه اخیستل شوی. دا د ګراف د ملکیتونو د پوښتنې لپاره یوه اغیزمنه لاره ده. 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 سرور 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 سرور 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 سرور 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 سرور 2017 ګراف ډیټابیسونو پیژندنه

پایلې

SQL Server 2017 ځان د مختلف IT سوداګرۍ دندو لپاره د بشپړ شرکت حل په توګه رامینځته کړی. د SQL ګراف لومړۍ نسخه خورا امید لرونکې ده. حتی د ځینو محدودیتونو سره سره، د ګرافونو وړتیاوو سپړلو لپاره لا دمخه کافي فعالیت شتون لري.

د SQL ګراف فعالیت په بشپړ ډول په SQL انجن کې مدغم شوی. په هرصورت، لکه څنګه چې مخکې ویل شوي، د SQL سرور 2017 لاندې محدودیتونه لري:

د پولیمورفیزم ملاتړ نشته.

  • یوازې یو اړخیزې اړیکې ملاتړ کیږي.
  • څنډې نشي کولی $from_id او $to_id کالمونه د UPDATE له لارې تازه کړي.
  • انتقالي بندونه نه ملاتړ کیږي، مګر دوی د CTE په کارولو سره ترلاسه کیدی شي.
  • په حافظه کې د OLTP شیانو لپاره ملاتړ محدود دی.
  • لنډمهاله جدولونه (سیسټم-ورژن شوي ټیمپورل جدول)، لنډمهاله محلي او نړیوال میزونه نه ملاتړ کیږي.
  • د جدول ډولونه او د جدول متغیرونه د NODE یا EDGE په توګه نشي اعلان کیدی.
  • د کراس ډیټابیس پوښتنې نه ملاتړ کیږي.
  • د منظم جدولونو د ګراف میزونو ته د بدلولو لپاره کومه مستقیمه لاره یا جادوګر شتون نلري.
  • د ګرافونو ښودلو لپاره هیڅ GUI شتون نلري، مګر تاسو کولی شئ د پاور BI څخه کار واخلئ.

د SQL سرور 2017 ګراف ډیټابیسونو پیژندنه

نور یی ولوله:

سرچینه: www.habr.com

Add a comment