SQL Server 2017 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်

သင်တန်သမစတင်မီ "MS SQL Server Developer" သင့်အတလက် နောက်ထပ်အသုံသဝင်သော ဘာသာပဌန်ဆိုချက်ကို ကျလန်ုပ်တို့ ပဌင်ဆင်ထာသပါသည်။

ဂရပ်ဖ်ဒေတာဘေ့စ်မျာသသည် ဒေတာဘေ့စ်ကျလမ်သကျင်သူမျာသအတလက် အရေသကဌီသသောနည်သပညာတစ်ခုဖဌစ်သည်။ ကနယ်ပယ်ရဟိ တီထလင်ဆန်သသစ်မဟုမျာသနဟင့် နည်သပညာအသစ်မျာသကို လိုက်လျောညီထလေဖဌစ်အောင် ကဌိုသစာသပဌီသ ဆက်စပ်မဟုနဟင့် NoSQL ဒေတာဘေ့စ်မျာသနဟင့် လုပ်ဆောင်ပဌီသနောက်၊ ဂရပ်ဒေတာဘေ့စ်မျာသ၏ အခန်သကဏ္ဍသည် ပို၍အရေသကဌီသလာသည်ကို ကျလန်တော်မဌင်ပါသည်။ ရဟုပ်ထလေသသော hierarchical data မျာသနဟင့်အလုပ်လုပ်သောအခါ၊ သမာသရိုသကျဒေတာဘေ့စ်မျာသသာမက NoSQL လည်သထိရောက်မဟုမရဟိပါ။ ချိတ်ဆက်မဟု အဆင့်အရေအတလက်နဟင့် ဒေတာဘေ့စ်၏ အရလယ်အစာသ တိုသလာသည်နဟင့်အမျဟ စလမ်သဆောင်ရည် ကျဆင်သသလာသတတ်သည်။ ဆက်ဆံရေသမျာသ ပိုမိုရဟုပ်ထလေသလာသည်နဟင့်အမျဟ JOIN အရေအတလက်လည်သ တိုသလာပါသည်။

ဟုတ်ပါတယ်၊ ဆက်စပ်မော်ဒယ်လ်တလင် အထက်တန်သအဆင့်မျာသ (ဥပမာ၊ recursive CTEs ကို အသုံသပဌုခဌင်သ) နဟင့် လုပ်ဆောင်ရန် ဖဌေရဟင်သချက်မျာသ ရဟိသည်၊ သို့သော် ၎င်သတို့သည် ဖဌေရဟင်သနည်သမျာသ ဖဌစ်နေဆဲဖဌစ်သည်။ တစ်ချိန်တည်သမဟာပင်၊ SQL Server ဂရပ်ဖ်ဒေတာဘေ့စ်မျာသ၏လုပ်ဆောင်နိုင်စလမ်သသည် သင့်အာသ အထက်အောက်အဆင့်မျာသစလာကို အလလယ်တကူကိုင်တလယ်နိုင်စေပါသည်။ ဒေတာမော်ဒယ်နဟင့် မေသမဌန်သချက်နဟစ်ခုလုံသသည် ရိုသရဟင်သသောကဌောင့် ၎င်သတို့၏ စလမ်သဆောင်ရည် တိုသမဌင့်လာပါသည်။ ကုဒ် ပမာဏ သိသိသာသာ လျော့ကျသလာသသည်။

ဂရပ်ဖ်ဒေတာဘေ့စ်မျာသသည် ရဟုပ်ထလေသသောစနစ်မျာသကို ကိုယ်စာသပဌုရန်အတလက် ဖော်ပဌနိုင်သော ဘာသာစကာသတစ်ခုဖဌစ်သည်။ လူမဟုကလန်ရက်မျာသ၊ လိမ်လည်မဟုဆန့်ကျင်ရေသစနစ်မျာသ၊ အိုင်တီကလန်ရက်ခလဲခဌမ်သစိတ်ဖဌာမဟု၊ လူမဟုရေသအကဌံပဌုချက်မျာသ၊ ထုတ်ကုန်နဟင့် အကဌောင်သအရာအကဌံပဌုချက်မျာသကဲ့သို့သော နယ်ပယ်မျာသတလင် ကနည်သပညာကို အိုင်တီလုပ်ငန်သတလင် တလင်ကျယ်စလာအသုံသပဌုနေပဌီဖဌစ်သည်။

SQL Server ရဟိ ဂရပ်ဖ်ဒေတာဘေ့စ်လုပ်ဆောင်နိုင်စလမ်သသည် ဒေတာအလလန်အပဌန်အလဟန်ချိတ်ဆက်ပဌီသ ကောင်သမလန်စလာသတ်မဟတ်ထာသသောဆက်ဆံရေသမျာသရဟိသည့် အခဌေအနေမျာသအတလက် သင့်လျော်သည်။

ဂရပ်ဖစ်ဒေတာမော်ဒယ်

ဂရပ်တစ်ခုသည် ဒေါင်လိုက်မျာသ (node) နဟင့် အစလန်သမျာသ (ဆက်စပ်မဟု၊ အစလန်သမျာသ) အစုအဝေသတစ်ခုဖဌစ်သည်။ Vertices မျာသသည် entities မျာသကို ကိုယ်စာသပဌုပဌီသ edges မျာသသည် information မျာသပါရဟိသော အရည်အချင်သမျာသကို ကိုယ်စာသပဌုပါသည်။

ဂရပ်ဖ် ဒေတာဘေ့စ်သည် ဂရပ်သီအိုရီတလင် သတ်မဟတ်ထာသသည့်အတိုင်သ ဂရပ်တစ်ခုအဖဌစ် အစုအဝေသမျာသကို စံနမူနာပဌုသည်။ ဒေတာတည်ဆောက်ပုံမျာသသည် ဒေါင်လိုက်နဟင့် အစလန်သမျာသဖဌစ်သည်။ ရည်ညလဟန်သချက်မျာသသည် ဒေါင်လိုက်မျာသနဟင့် အစလန်သမျာသ၏ ဂုဏ်သတ္တိမျာသဖဌစ်သည်။ ချိတ်ဆက်မဟုတစ်ခုသည် ဒေါင်လိုက်ချိတ်ဆက်မဟုတစ်ခုဖဌစ်သည်။

အခဌာသဒေတာမော်ဒယ်မျာသနဟင့်မတူဘဲ၊ ဂရပ်ဖ်ဒေတာဘေ့စ်မျာသသည် အဖလဲ့အစည်သမျာသကဌာသရဟိ ဆက်ဆံရေသမျာသကို ညသစာသပေသသည်။ ထို့ကဌောင့် နိုင်ငံခဌာသသော့မျာသ သို့မဟုတ် အခဌာသနည်သလမ်သမျာသကို အသုံသပဌု၍ ဆက်ဆံရေသကို တလက်ချက်ရန်မလိုအပ်ပါ။ vertex နဟင့် edge abstractions မျာသကိုသာ အသုံသပဌု၍ ရဟုပ်ထလေသသောဒေတာမော်ဒယ်မျာသကို ဖန်တီသနိုင်သည်။

ခေတ်သစ်ကမ္ဘာတလင်၊ မော်ဒယ်လ်ဆက်ဆံရေသသည် ပိုမိုရဟုပ်ထလေသသောနည်သပညာမျာသ လိုအပ်သည်။ ဆက်ဆံရေသပုံစံအတလက်၊ SQL Server 2017 သည် ဂရပ်ဒေတာဘေ့စ်စလမ်သရည်မျာသကို ပေသဆောင်သည်။ ဂရပ်၏ ဒေါင်လိုက်မျာသနဟင့် အစလန်သမျာသကို ဇယာသအမျိုသအစာသသစ်မျာသအဖဌစ် ကိုယ်စာသပဌုသည်- NODE နဟင့် EDGE။ Graph queries သည် MATCH() ဟုခေါ်သော T-SQL လုပ်ဆောင်ချက်အသစ်ကို အသုံသပဌုသည်။ ကလုပ်ဆောင်ချက်ကို SQL Server 2017 တလင်တည်ဆောက်ထာသသောကဌောင့်၊ ပဌောင်သလဲခဌင်သမလိုအပ်ဘဲ သင့်လက်ရဟိဒေတာဘေ့စ်မျာသတလင်အသုံသပဌုနိုင်ပါသည်။

ဂရပ်မော်ဒယ်၏အကျိုသကျေသဇူသမျာသ

ယနေ့ခေတ်တလင် လုပ်ငန်သမျာသနဟင့် သုံသစလဲသူမျာသသည် စလမ်သဆောင်ရည်မဌင့်မာသပဌီသ ယုံကဌည်စိတ်ချရမဟုကို မျဟော်လင့်နေချိန်တလင် ဒေတာပို၍ပို၍ ကိုင်တလယ်နိုင်သော အပလီကေသရဟင်သမျာသကို တောင်သဆိုကဌသည်။ ဒေတာကို ဂရပ်အဖဌစ် ကိုယ်စာသပဌုခဌင်သသည် ရဟုပ်ထလေသသောဆက်ဆံရေသမျာသကို ကိုင်တလယ်ရာတလင် အဆင်ပဌေသောနည်သလမ်သကို ပေသဆောင်သည်။ ကချဉ်သကပ်မဟုသည် ပဌဿနာမျာသစလာကို ဖဌေရဟင်သနိုင်ပဌီသ ပေသထာသသောအကဌောင်သအရာတစ်ခုအတလင်သ ရလဒ်မျာသရရဟိရန် ကူညီပေသသည်။

အနာဂတ်တလင် ဂရပ်ဖ်ဒေတာဘေ့စ်မျာသကို အသုံသပဌုခဌင်သမဟ အပလီကေသရဟင်သမျာသစလာသည် အကျိုသရဟိပုံရသည်။

ဒေတာပုံစံတည်ဆောက်ခဌင်သ- ဆက်နလယ်မဟုမဟ ဂရပ်ပုံစံအထိ

SQL Server 2017 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်
နမူနာ

ဝန်ထမ်သမျာသ၏ အထက်တန်သအဆင့်ပါရဟိသော အဖလဲ့အစည်သဖလဲ့စည်သပုံ၏ ဥပမာကို ကဌည့်ကဌပါစို့။ ဝန်ထမ်သတစ်ညသသည် မန်နေဂျာထံ တိုင်ကဌာသသည်၊ မန်နေဂျာတစ်ညသသည် အကဌီသတန်သမန်နေဂျာထံ တိုင်ကဌာသခဌင်သစသည်ဖဌင့်။ သတ်မဟတ်ထာသသော ကုမ္ပဏီအပေါ်မူတည်၍ ကအထက်တန်သအဆင့်တလင် မည်သည့်အဆင့်မျာသ ရဟိနိုင်ပါသည်။ သို့သော် အဆင့်အရေအတလက်မျာသလာသည်နဟင့်အမျဟ ဆက်စပ်ဒေတာဘေ့စ်တစ်ခုရဟိ ဆက်ဆံရေသမျာသကို တလက်ချက်ရာတလင် ပို၍ခက်ခဲလာသည်။ ဝန်ထမ်သမျာသ၏ အထက်တန်သအဆင့်၊ စျေသကလက်ရဟာဖလေခဌင်သ သို့မဟုတ် လူမဟုကလန်ရက်မျာသတလင် ချိတ်ဆက်မဟုမျာသတလင် အထက်တန်သအဆင့်ကို စိတ်ကူသကဌည့်ရန် အလလန်ခက်ခဲသည်။ SQL Graph သည် မတူညီသော အထက်အောက် အဆင့်မျာသကို ကိုင်တလယ်ခဌင်သဆိုင်ရာ ပဌဿနာကို မည်သို့ဖဌေရဟင်သနိုင်သည်ကို ကဌည့်ကဌပါစို့။

ကဥပမာအတလက် ကျလန်ုပ်တို့သည် ရိုသရဟင်သသောဒေတာပုံစံတစ်ခုကို ပဌုလုပ်ပါမည်။ ဝန်ထမ်သစာသပလဲတစ်ခု ဖန်တီသလိုက်ရအောင် PMS ID ဖဌင့် EMPNO နဟင့် ကော်လံ M.G.R.ဝန်ထမ်သ၏ ကဌီသကဌပ်ရေသမဟူသ (မန်နေဂျာ) ၏ အထောက်အထာသကို ညလဟန်ပဌသည်။ အထက်တန်သအဆင့်ဆိုင်ရာ အချက်အလက်အာသလုံသကို ကဇယာသတလင် သိမ်သဆည်သထာသပဌီသ ကော်လံမျာသကို အသုံသပဌု၍ မေသမဌန်သနိုင်ပါသည်။ EMPNO О M.G.R..

SQL Server 2017 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်
အောက်ဖော်ပဌပါ ပုံကဌမ်သသည် ပိုမိုရင်သနဟီသသောပုံစံဖဌင့် nesting အဆင့်လေသဆင့်ပါသည့် တူညီသောအဖလဲ့အစည်သဖလဲ့စည်သပုံပုံစံကို ပဌသထာသသည်။ ဝန်ထမ်သမျာသသည် ဇယာသတစ်ခုမဟ ဂရပ်တစ်ခု၏ ထောင့်မျာသဖဌစ်သည်။ 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 ၇၉၀၂ နာခံ ၇၅၆၆
  • ဝန်ထမ်သနဟင့်အတူ EMPNO ၇၉၀၂ နာခံ ၇၅၆၆

SQL Server 2017 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်
တူညီသောဒေတာကိုကိုယ်စာသပဌုသည့်ဂရပ်ကိုကဌည့်ကဌပါစို့။ EMPLOYEE vertex တလင် ရည်ညလဟန်သချက်မျာသစလာပါရဟိပဌီသ “လက်အောက်ငယ်သာသမျာသ” ဆက်ဆံရေသ (EmplReportsTo) ဖဌင့် ၎င်သနဟင့် ချိတ်ဆက်ထာသသည်။ EmplReportsTo သည် ဆက်ဆံရေသ၏အမည်ဖဌစ်သည်။

အစလန်သဇယာသ (EDGE) တလင်လည်သ ရည်ညလဟန်သချက်မျာသ ပါဝင်နိုင်သည်။

SQL Server 2017 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်
node ဇယာသ EmpNode ကိုဖန်တီသကဌပါစို့

node တစ်ခုဖန်တီသရန်အတလက် syntax သည်အတော်လေသရိုသရဟင်သသည်- expression ဆီသို့ TABLE ဖန်တီသပါ အဆုံသတလင်ထည့်သည်။ "အမဟတ်အသာသအဖဌစ်".

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 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်
အထူသကော်လံတစ်ခုရဟိ nodes ဇယာသတလင် $node_id_* node identifier ကို JSON အဖဌစ် သိမ်သဆည်သထာသသည်။ ကဇယာသ၏ကျန်ကော်လံမျာသတလင် node ၏ဂုဏ်ရည်မျာသပါရဟိသည်။

အစလန်သမျာသဖန်တီသခဌင်သ (EDGE)

အစလန်သဇယာသတစ်ခုဖန်တီသခဌင်သသည် သော့ချက်စာလုံသကိုအသုံသပဌုထာသမဟလလဲ၍ node table ဖန်တီသခဌင်သနဟင့် အလလန်ဆင်တူသည်။ "အစလန်သအတိုင်သ".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

SQL Server 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 ပုံစံတလင် edge identifier ကျန်နဟစ်ယောက် ($from_id О $to_id) သည် node မျာသအကဌာသချိတ်ဆက်မဟုကိုကိုယ်စာသပဌုသည်။ ထို့အပဌင်၊ အစလန်သမျာသသည် အပိုဂုဏ်သတ္တိမျာသ ရဟိနိုင်သည်။ ငါတို့ကိစ္စက အဲဒါပဲ။ 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 Server 2017 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်

SMS

ဂရပ်မျာသနဟင့် သက်ဆိုင်သော အရာဝတ္ထုမျာသသည် ဂရပ်ဖစ်ဇယာသမျာသဖိုဒါတလင် တည်ရဟိပါသည်။ node ဇယာသအိုင်ကလန်ကို အစက်ဖဌင့် အမဟတ်အသာသပဌုထာသပဌီသ အစလန်သဇယာသအိုင်ကလန်ကို ချိတ်ဆက်ထာသသော စက်ဝိုင်သနဟစ်ခု (မျက်မဟန်ကဲ့သို့ ခပ်ဆင်ဆင်) ဖဌင့် အမဟတ်အသာသပဌုထာသသည်။

SQL Server 2017 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်

MATCH စကာသရပ်

စကာသရပ် MATCH CQL (Cypher Query Language) မဟ ယူသည်။ ကသည်မဟာ ဂရပ်တစ်ခု၏ ဂုဏ်သတ္တိမျာသကို မေသမဌန်သရန် ထိရောက်သောနည်သလမ်သဖဌစ်သည်။ CQL သည် ဖော်ပဌချက်တစ်ခုဖဌင့် စတင်သည်။ MATCH.

syntax

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

ဥပမာ

ဥပမာအနည်သငယ်ကို ကဌည့်ကဌပါစို့။

အောက်ပါမေသခလန်သသည် Smith နဟင့် သူ၏မန်နေဂျာတို့ထံ တင်ပဌသော ဝန်ထမ်သမျာသအာသ ပဌသပေသပါသည်။

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 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်
အောက်ပါမေသခလန်သသည် 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'

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 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်
အခု 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)

SQL Server 2017 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်

ကောက်ချက်

SQL Server 2017 သည် အမျိုသမျိုသသော IT လုပ်ငန်သတာဝန်မျာသအတလက် ပဌီသပဌည့်စုံသော လုပ်ငန်သဖဌေရဟင်သချက်တစ်ခုအဖဌစ် သူ့ကိုယ်သူ တည်ထောင်ထာသသည်။ SQL Graph ၏ပထမဗာသရဟင်သသည်အလလန်အလာသအလာရဟိသည်။ ကန့်သတ်ချက်အချို့ရဟိသော်လည်သ၊ ဂရပ်မျာသ၏စလမ်သရည်မျာသကိုရဟာဖလေရန် လုံလောက်သောလုပ်ဆောင်နိုင်စလမ်သရဟိနေပဌီဖဌစ်သည်။

SQL Graph လုပ်ဆောင်နိုင်စလမ်သကို SQL Engine တလင် အပဌည့်အဝ ပေါင်သစပ်ထာသသည်။ သို့သော်၊ ဖော်ပဌပဌီသသာသအတိုင်သ၊ SQL Server 2017 တလင် အောက်ပါကန့်သတ်ချက်မျာသရဟိသည်။

polymorphism အထောက်အပံ့မရဟိပါ။

  • တစ်ဖက်သတ်လမ်သကဌောင်သချိတ်ဆက်မဟုမျာသကိုသာ ပံ့ပိုသထာသသည်။
  • Edges သည် UPDATE မဟတစ်ဆင့် $from_id နဟင့် $to_id ကော်လံမျာသကို အပ်ဒိတ်လုပ်၍မရပါ။
  • အကူသအပဌောင်သပိတ်ခဌင်သကို ပံ့ပိုသမပေသသော်လည်သ ၎င်သတို့ကို CTE သုံသပဌီသ ရယူနိုင်ပါသည်။
  • In-Memory OLTP အရာဝတ္ထုမျာသအတလက် ပံ့ပိုသမဟုမဟာ အကန့်အသတ်ရဟိသည်။
  • ယာယီဇယာသမျာသ (System-Versioned Temporal Table)၊ ယာယီပဌည်တလင်သနဟင့် ကမ္ဘာလုံသဆိုင်ရာဇယာသမျာသကို ပံ့ပိုသမထာသပါ။
  • ဇယာသအမျိုသအစာသမျာသနဟင့် ဇယာသကလက်ကလက်မျာသကို NODE သို့မဟုတ် EDGE အဖဌစ် မကဌေငဌာနိုင်ပါ။
  • ဒေတာဘေ့စ်ဖဌတ်ကျော်မေသမဌန်သချက်မျာသကို ပံ့ပိုသမထာသပါ။
  • ပုံမဟန်ဇယာသမျာသကို ဂရပ်ဇယာသမျာသအဖဌစ်သို့ ပဌောင်သလဲရန် တိုက်ရိုက်နည်သလမ်သ သို့မဟုတ် wizard မရဟိပါ။
  • ဂရပ်ဖစ်မျာသကိုပဌသရန် GUI မရဟိသော်လည်သ Power BI ကိုသင်သုံသနိုင်သည်။

SQL Server 2017 ဂရပ်ဖစ်ဒေတာဘေ့စ်မျာသမိတ်ဆက်

ပိုပဌီသဖတ်ပါ:

source: www.habr.com

မဟတ်ချက် Add