ืžื‘ื•ื ืœ- SQL Server 2017 Graph Databases

ืœืคื ื™ ืชื—ื™ืœืช ื”ืงื•ืจืก "ืžืคืชื— MS SQL Server" ื”ื›ื ื• ืขื‘ื•ืจืš ืชืจื’ื•ื ืฉื™ืžื•ืฉื™ ื ื•ืกืฃ.

ืžืกื“ื™ ื ืชื•ื ื™ื ืฉืœ ื’ืจืคื™ื ื”ื ื˜ื›ื ื•ืœื•ื’ื™ื” ื—ืฉื•ื‘ื” ืœืื ืฉื™ ืžืงืฆื•ืข ื‘ืชื—ื•ื ืžืกื“ื™ ื”ื ืชื•ื ื™ื. ืื ื™ ืžื ืกื” ืœื”ืชืขื“ื›ืŸ ื‘ื—ื™ื“ื•ืฉื™ื ื•ื‘ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช ื‘ืชื—ื•ื ื–ื”, ื•ืœืื—ืจ ืขื‘ื•ื“ื” ืขื ืžืกื“ื™ ื ืชื•ื ื™ื ืจืœืฆื™ื•ื ื™ื™ื ื•-NoSQL, ืื ื™ ืจื•ืื” ืืช ื”ืชืคืงื™ื“ ืฉืœ ืžืกื“ื™ ื ืชื•ื ื™ื ื’ืจืคื™ื ื”ื•ืคืš ื—ืฉื•ื‘ ื™ื•ืชืจ ื•ื™ื•ืชืจ. ื›ืืฉืจ ืขื•ื‘ื“ื™ื ืขื ื ืชื•ื ื™ื ื”ื™ืจืจื›ื™ื™ื ืžื•ืจื›ื‘ื™ื, ืœื ืจืง ืžืกื“ื™ ื ืชื•ื ื™ื ืžืกื•ืจืชื™ื™ื ืื™ื ื ื™ืขื™ืœื™ื, ืืœื ื’ื NoSQL. ืœืขืชื™ื ืงืจื•ื‘ื•ืช, ื›ื›ืœ ืฉืžืกืคืจ ืจืžื•ืช ื”ื—ื™ื‘ื•ืจ ื•ื’ื•ื“ืœ ืžืกื“ ื”ื ืชื•ื ื™ื ื’ื“ืœื™ื, ื”ื‘ื™ืฆื•ืขื™ื ื™ื•ืจื“ื™ื. ื•ื›ื›ืœ ืฉืžืขืจื›ื•ืช ื”ื™ื—ืกื™ื ื”ื•ืคื›ื•ืช ืžื•ืจื›ื‘ื•ืช ื™ื•ืชืจ, ืžืกืคืจ ื”-JOIN ื’ื“ืœ ื’ื ื”ื•ื.

ื›ืžื•ื‘ืŸ ืฉืœืžื•ื“ืœ ื”ื”ืชื™ื™ื—ืกื•ืชื™ ื™ืฉ ืคืชืจื•ื ื•ืช ืœืขื‘ื•ื“ื” ืขื ื”ื™ืจืจื›ื™ื•ืช (ืœื“ื•ื’ืžื”, ืฉื™ืžื•ืฉ ื‘-CTEs ืจืงื•ืจืกื™ื‘ื™), ืื‘ืœ ืืœื• ืขื“ื™ื™ืŸ ื“ืจื›ื™ื ืœืขืงื™ืคืช ื”ื‘ืขื™ื”. ื™ื—ื“ ืขื ื–ืืช, ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ืžืกื“ื™ ื ืชื•ื ื™ื ื’ืจืคื™ื ืฉืœ SQL Server ืžืืคืฉืจืช ืœืš ืœื˜ืคืœ ื‘ืงืœื•ืช ื‘ืžืกืคืจ ืจืžื•ืช ืฉืœ ื”ื™ืจืจื›ื™ื”. ื’ื ืžื•ื“ืœ ื”ื ืชื•ื ื™ื ื•ื’ื ื”ืฉืื™ืœืชื•ืช ืžืคื•ืฉื˜ื™ื, ื•ืœื›ืŸ ื”ื™ืขื™ืœื•ืช ืฉืœื”ื ืขื•ืœื”. ื›ืžื•ืช ื”ืงื•ื“ ืžืฆื˜ืžืฆืžืช ืžืฉืžืขื•ืชื™ืช.

ืžืกื“ื™ ื ืชื•ื ื™ื ืฉืœ ื’ืจืคื™ื ื”ื ืฉืคื” ืืงืกืคืจืกื™ื‘ื™ืช ืœื™ื™ืฆื•ื’ ืžืขืจื›ื•ืช ืžื•ืจื›ื‘ื•ืช. ื˜ื›ื ื•ืœื•ื’ื™ื” ื–ื• ื›ื‘ืจ ื ืžืฆืืช ื‘ืฉื™ืžื•ืฉ ื ืจื—ื‘ ื‘ืชืขืฉื™ื™ืช ื”-IT ื‘ืชื—ื•ืžื™ื ื›ืžื• ืจืฉืชื•ืช ื—ื‘ืจืชื™ื•ืช, ืžืขืจื›ื•ืช ื ื’ื“ ื”ื•ื ืื”, ื ื™ืชื•ื— ืจืฉืชื•ืช IT, ื”ืžืœืฆื•ืช ื—ื‘ืจืชื™ื•ืช, ื”ืžืœืฆื•ืช ืœืžื•ืฆืจื™ื ื•ืชื•ื›ืŸ.

ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ื”ื’ืจืคื™ื ื‘-SQL Server ืžืชืื™ืžื” ืœืชืจื—ื™ืฉื™ื ืฉื‘ื”ื ื”ื ืชื•ื ื™ื ืงืฉื•ืจื™ื ื–ื” ื‘ื–ื” ืžืื•ื“ ื•ื™ืฉ ืœื”ื ืงืฉืจื™ื ืžื•ื’ื“ืจื™ื ื”ื™ื˜ื‘.

ืžื•ื“ืœ ื ืชื•ื ื™ื ื’ืจืคื™

ื’ืจืฃ ื”ื•ื ืงื‘ื•ืฆื” ืฉืœ ืงื•ื“ืงื•ื“ื™ื (ืฆืžืชื™ื) ื•ืงืฆื•ื•ืช (ื™ื—ืกื™ื, ืงืฆื”). ืงื•ื“ืงื•ื“ื™ื ืžื™ื™ืฆื’ื™ื ื™ืฉื•ื™ื•ืช, ื•ืงืฆื•ื•ืช ืžื™ื™ืฆื’ื™ื ืงืฉืจื™ื ืฉื”ืชื›ื•ื ื•ืช ืฉืœื”ื ืขืฉื•ื™ื•ืช ืœื”ื›ื™ืœ ืžื™ื“ืข.

ืžืกื“ ื ืชื•ื ื™ื ื’ืจืคื™ื ืžื“ื’ื™ื ื™ืฉื•ื™ื•ืช ื›ื’ืจืฃ ื›ื”ื’ื“ืจืชื• ื‘ืชื•ืจืช ื”ื’ืจืคื™ื. ืžื‘ื ื™ ื ืชื•ื ื™ื ื”ื ืงื•ื“ืงื•ื“ื™ื ื•ืงืฆื•ื•ืช. ืชื›ื•ื ื•ืช ื”ืŸ ืชื›ื•ื ื•ืช ืฉืœ ืงื•ื“ืงื•ื“ื™ื ื•ืงืฆื•ื•ืช. ื—ื™ื‘ื•ืจ ื”ื•ื ื—ื™ื‘ื•ืจ ืฉืœ ืงื•ื“ืงื•ื“ื™ื.

ื‘ื ื™ื’ื•ื“ ืœืžื•ื“ืœื™ื ืื—ืจื™ื ืฉืœ ื ืชื•ื ื™ื, ืžืกื“ื™ ื ืชื•ื ื™ื ืฉืœ ื’ืจืคื™ื ื ื•ืชื ื™ื ืขื“ื™ืคื•ืช ืœื™ื—ืกื™ื ื‘ื™ืŸ ื™ืฉื•ื™ื•ืช. ืœื›ืŸ, ืื™ืŸ ืฆื•ืจืš ืœื—ืฉื‘ ืงืฉืจื™ื ื‘ืืžืฆืขื•ืช ืžืคืชื—ื•ืช ื–ืจื™ื ืื• ื›ืœ ืืžืฆืขื™ ืื—ืจ. ื ื™ืชืŸ ืœื™ืฆื•ืจ ืžื•ื“ืœื™ื ืžื•ืจื›ื‘ื™ื ืฉืœ ื ืชื•ื ื™ื ื‘ืืžืฆืขื•ืช ื”ืคืฉื˜ื•ืช ืงื•ื“ืงื•ื“ ื•ืงืฆื•ื•ืช ื‘ืœื‘ื“.

ื‘ืขื•ืœื ื”ืžื•ื“ืจื ื™, ื™ืฆื™ืจืช ืžืขืจื›ื•ืช ื™ื—ืกื™ื ื“ื•ืจืฉื•ืช ื˜ื›ื ื™ืงื•ืช ืžื•ืจื›ื‘ื•ืช ื™ื•ืชืจ ื•ื™ื•ืชืจ. ื›ื“ื™ ืœื“ื’ืžืŸ ืงืฉืจื™ื, SQL Server 2017 ืžืฆื™ืข ื™ื›ื•ืœื•ืช ืžืกื“ ื ืชื•ื ื™ื ื’ืจืคื™ื. ื”ืงื•ื“ืงื•ื“ื™ื ื•ื”ืงืฆื•ื•ืช ืฉืœ ื”ื’ืจืฃ ืžื™ื•ืฆื’ื™ื ื›ืกื•ื’ื™ื ื—ื“ืฉื™ื ืฉืœ ื˜ื‘ืœืื•ืช: NODE ื•-EDGE. ืฉืื™ืœืชื•ืช ื’ืจืคื™ื ืžืฉืชืžืฉื•ืช ื‘ืคื•ื ืงืฆื™ื™ืช T-SQL ื—ื“ืฉื” ื‘ืฉื MATCH(). ืžื›ื™ื•ื•ืŸ ืฉืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื–ื• ืžื•ื‘ื ื™ืช ื‘ืชื•ืš SQL Server 2017, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื” ื‘ื‘ืกื™ืกื™ ื”ื ืชื•ื ื™ื ื”ืงื™ื™ืžื™ื ืฉืœืš ืœืœื ืฆื•ืจืš ื‘ื”ืžืจื” ื›ืœืฉื”ื™.

ื”ื™ืชืจื•ื ื•ืช ืฉืœ ืžื•ื“ืœ ื”ื’ืจืฃ

ื›ื™ื•ื, ืขืกืงื™ื ื•ืžืฉืชืžืฉื™ื ื“ื•ืจืฉื™ื ื™ื™ืฉื•ืžื™ื ื”ืžื˜ืคืœื™ื ื‘ื™ื•ืชืจ ื•ื™ื•ืชืจ ื ืชื•ื ื™ื, ืชื•ืš ืฉื”ื ืžืฆืคื™ื ืœื‘ื™ืฆื•ืขื™ื ื•ืืžื™ื ื•ืช ื’ื‘ื•ื”ื™ื. ื™ื™ืฆื•ื’ ื”ื ืชื•ื ื™ื ื›ื’ืจืฃ ืžืฆื™ืข ืืžืฆืขื™ ื ื•ื— ืœื˜ื™ืคื•ืœ ื‘ืงืฉืจื™ื ืžื•ืจื›ื‘ื™ื. ื’ื™ืฉื” ื–ื• ืคื•ืชืจืช ื‘ืขื™ื•ืช ืจื‘ื•ืช ื•ืขื•ื–ืจืช ืœื”ืฉื™ื’ ืชื•ืฆืื•ืช ื‘ื”ืงืฉืจ ื ืชื•ืŸ.

ื ืจืื” ืฉื™ื™ืฉื•ืžื™ื ืจื‘ื™ื ื™ื™ื”ื ื• ืžืฉื™ืžื•ืฉ ื‘ืžืกื“ื™ ื ืชื•ื ื™ื ื’ืจืคื™ื ื‘ืขืชื™ื“.

ืžื•ื“ืœ ื ืชื•ื ื™ื: ืžืžื•ื“ืœ ื™ื—ืกื™ ืœืžื•ื“ืœ ื’ืจืฃ

ืžื‘ื•ื ืœ- SQL Server 2017 Graph Databases
ื“ื•ื’ืžื”

ื ืกืชื›ืœ ืขืœ ื“ื•ื’ืžื” ืœืžื‘ื ื” ืืจื’ื•ื ื™ ืขื ื”ื™ืจืจื›ื™ื” ืฉืœ ืขื•ื‘ื“ื™ื: ืขื•ื‘ื“ ืžื“ื•ื•ื— ืœืžื ื”ืœ, ืžื ื”ืœ ืžื“ื•ื•ื— ืœืžื ื”ืœ ื‘ื›ื™ืจ ื•ื›ื•'. ื‘ื”ืชืื ืœื—ื‘ืจื” ื”ืกืคืฆื™ืคื™ืช, ืขืฉื•ื™ื•ืช ืœื”ื™ื•ืช ื›ืœ ืžืกืคืจ ืจืžื•ืช ื‘ื”ื™ืจืจื›ื™ื” ื–ื•. ืื‘ืœ ื›ื›ืœ ืฉืžืกืคืจ ื”ืจืžื•ืช ื’ื“ืœ, ื—ื™ืฉื•ื‘ ืงืฉืจื™ื ื‘ืžืกื“ ื ืชื•ื ื™ื ื™ื—ืกื™ ื”ื•ืคืš ืœืงืฉื” ื™ื•ืชืจ ื•ื™ื•ืชืจ. ื“ื™ ืงืฉื” ืœื“ืžื™ื™ืŸ ืืช ื”ื”ื™ืจืจื›ื™ื” ืฉืœ ื”ืขื•ื‘ื“ื™ื, ื”ื™ืจืจื›ื™ื” ื‘ืฉื™ื•ื•ืง ืื• ืงืฉืจื™ื ื‘ืจืฉืชื•ืช ื—ื‘ืจืชื™ื•ืช. ื‘ื•ืื• ื ืจืื” ื›ื™ืฆื“ SQL Graph ื™ื›ื•ืœ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ืฉืœ ื˜ื™ืคื•ืœ ื‘ืจืžื•ืช ืฉื•ื ื•ืช ืฉืœ ื”ื™ืจืจื›ื™ื”.

ืขื‘ื•ืจ ื“ื•ื’ืžื” ื–ื• ื ื›ื™ืŸ ืžื•ื“ืœ ื ืชื•ื ื™ื ืคืฉื•ื˜. ื‘ื•ืื• ื ื™ืฆื•ืจ ื˜ื‘ืœื” ืฉืœ ืขื•ื‘ื“ื™ื EMP ืขื ืชืขื•ื“ืช ื–ื”ื•ืช EMPNO ื•ืขืžื•ื“ื” ืž.ื’.ืจ., ื”ืžืฆื™ื™ืŸ ืืช ื”ืžื–ื”ื” ืฉืœ ื”ืžืžื•ื ื” (ื”ืžื ื”ืœ) ืฉืœ ื”ืขื•ื‘ื“. ื›ืœ ื”ืžื™ื“ืข ืขืœ ื”ื”ื™ืจืจื›ื™ื” ืžืื•ื—ืกืŸ ื‘ื˜ื‘ืœื” ื–ื• ื•ื ื™ืชืŸ ืœื‘ืฆืข ืฉืื™ืœืชื” ื‘ืืžืฆืขื•ืช ืขืžื•ื“ื•ืช EMPNO ะธ ืž.ื’.ืจ..

ืžื‘ื•ื ืœ- SQL Server 2017 Graph Databases
ื”ืชืจืฉื™ื ื”ื‘ื ืžืฆื™ื’ ืืช ืื•ืชื• ืžื•ื“ืœ ืžื‘ื ื” ืืจื’ื•ื ื™ ืขื ืืจื‘ืข ืจืžื•ืช ืฉืœ ืงื™ื ื•ืŸ ื‘ืฆื•ืจื” ืžื•ื›ืจืช ื™ื•ืชืจ. ืขื•ื‘ื“ื™ื ื”ื ื”ืงื•ื“ืงื•ื“ื™ื ืฉืœ ื’ืจืฃ ืžื˜ื‘ืœื” EMP. ื”ื™ืฉื•ืช "ืขื•ื‘ื“" ืžื—ื•ื‘ืจืช ืœืขืฆืžื” ืขืœ ื™ื“ื™ ื”ื—ื™ื‘ื•ืจ "ืžื’ื™ืฉ" (ReportsTo). ื‘ืžื•ื ื—ื™ ื’ืจืฃ, ืงื™ืฉื•ืจ ื”ื•ื ืงืฆื” (EDGE) ื”ืžื—ื‘ืจ ืฆืžืชื™ื (NODE) โ€‹โ€‹ืฉืœ ืขื•ื‘ื“ื™ื.

ืžื‘ื•ื ืœ- SQL Server 2017 Graph Databases

ื‘ื•ืื• ื ื™ืฆื•ืจ ื˜ื‘ืœื” ืจื’ื™ืœื” 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 Server 2017 Graph Databases
ื›ืขืช ื ืกืชื›ืœ ืขืœ ื™ื™ืฆื•ื’ ื’ืจืฃ ืฉืœ ืื•ืชื ื ืชื•ื ื™ื. ืœืงื•ื“ืงื•ื“ ื”-EMPLOYEE ืžืกืคืจ ืชื›ื•ื ื•ืช ื•ื”ื•ื ืžื—ื•ื‘ืจ ืœืขืฆืžื• ืขืœ ื™ื“ื™ ืžืขืจื›ืช ื”ื™ื—ืกื™ื "ื›ืคื™ืคื™ื" (EmplReportsTo). EmplReportsTo ื”ื•ื ืฉื ื”ืงืฉืจ.

ื˜ื‘ืœืช ื”ืงืฆื” (EDGE) ืขืฉื•ื™ื” ืœื”ื›ื™ืœ ื’ื ืชื›ื•ื ื•ืช.

ืžื‘ื•ื ืœ- SQL Server 2017 Graph Databases
ื‘ื•ืื• ื ื™ืฆื•ืจ ื˜ื‘ืœืช ืฆื•ืžืช 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;

ื›ืขืช ื ืžื™ืจ ืืช ื”ื ืชื•ื ื™ื ืžื˜ื‘ืœื” ืจื’ื™ืœื” ืœื˜ื‘ืœื” ื’ืจืคื™ืช. ื”ึทื‘ึผึธื INSERT ืžื•ืกื™ืฃ ื ืชื•ื ื™ื ืžื˜ื‘ืœื” ื™ื—ืกื™ืช EMP.

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

ืžื‘ื•ื ืœ- SQL Server 2017 Graph Databases
ื‘ื˜ื‘ืœืช ื”ืฆืžืชื™ื ื‘ืขืžื•ื“ื” ืžื™ื•ื—ื“ืช $node_id_* ืžื–ื”ื” ื”ืฆื•ืžืช ืžืื•ื—ืกืŸ ื‘ืชื•ืจ JSON. ืฉืืจ ื”ืขืžื•ื“ื•ืช ื‘ื˜ื‘ืœื” ื–ื• ืžื›ื™ืœื•ืช ืืช ืชื›ื•ื ื•ืช ื”ืฆื•ืžืช.

ื™ืฆื™ืจืช ืงืฆื•ื•ืช (EDGE)

ื™ืฆื™ืจืช ื˜ื‘ืœืช ืงืฆื” ื“ื•ืžื” ืžืื•ื“ ืœื™ืฆื™ืจืช ื˜ื‘ืœืช ืฆื•ืžืช, ืืœื ืฉื”ืฉื™ืžื•ืฉ ื‘ืžื™ืœืช ื”ืžืคืชื— "AS EDGE".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

ืžื‘ื•ื ืœ- SQL Server 2017 Graph Databases

ื›ืขืช ื ื’ื“ื™ืจ ืงืฉืจื™ื ื‘ื™ืŸ ืขื•ื‘ื“ื™ื ื‘ืืžืฆืขื•ืช ืขืžื•ื“ื•ืช EMPNO ะธ ืž.ื’.ืจ.. ืชืจืฉื™ื ื”ืžื‘ื ื” ื”ืืจื’ื•ื ื™ ืžืจืื” ื‘ื‘ื™ืจื•ืจ ื›ื™ืฆื“ ืœื›ืชื•ื‘ INSERT.

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. ื”ื•ื_ืงืฆื”
  2. is_node

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

ืžื‘ื•ื ืœ- SQL Server 2017 Graph Databases

ssms

ืื•ื‘ื™ื™ืงื˜ื™ื ื”ืงืฉื•ืจื™ื ืœื’ืจืคื™ื ืžืžื•ืงืžื™ื ื‘ืชื™ืงื™ื™ื” Graph Tables. ืกืžืœ ื˜ื‘ืœืช ื”ืฆื•ืžืช ืžืกื•ืžืŸ ื‘ื ืงื•ื“ื”, ื•ืื™ื™ืงื•ืŸ ื˜ื‘ืœืช ื”ืงืฆื” ืžืกื•ืžืŸ ื‘ืฉื ื™ ืขื™ื’ื•ืœื™ื ืžื—ื•ื‘ืจื™ื (ืงืฆืช ื›ืžื• ืžืฉืงืคื™ื™ื).

ืžื‘ื•ื ืœ- SQL Server 2017 Graph Databases

ื‘ื™ื˜ื•ื™ MATCH

ื‘ื™ื˜ื•ื™ MATCH ื ืœืงื— ืž-CQL (Cypher Query Language). ื–ื•ื”ื™ ื“ืจืš ื™ืขื™ืœื” ืœื‘ืฆืข ืฉืื™ืœืชื•ืช ืขืœ ืžืืคื™ื™ื ื™ื ืฉืœ ื’ืจืฃ. 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 Server 2017 Graph Databases
ื”ืฉืื™ืœืชื” ื”ื‘ืื” ืžื™ื•ืขื“ืช ืœืžืฆื™ืืช ืขื•ื‘ื“ื™ื ื•ืžื ื”ืœื™ื ื‘ืจืžื” ื”ืฉื ื™ื™ื” ืขื‘ื•ืจ 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 Graph Databases
ื•ืœื‘ืกื•ืฃ, ื‘ืงืฉื” ืœืขื•ื‘ื“ื™ื ื•ืžื ื”ืœื™ื ืžื”ื“ืจื’ ื”ืฉืœื™ืฉื™.

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 Graph Databases
ืขื›ืฉื™ื• ื‘ื•ืื• ื ืฉื ื” ื›ื™ื•ื•ืŸ ื›ื“ื™ ืœื”ืฉื™ื’ ืืช ื”ื‘ื•ืกื™ื ืฉืœ ืกืžื™ืช'.

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 Graph Databases

ืžืกืงื ื”

SQL Server 2017 ื‘ื™ืกืก ืืช ืขืฆืžื• ื›ืคืชืจื•ืŸ ืืจื’ื•ื ื™ ืฉืœื ืœืžืฉื™ืžื•ืช IT ืขืกืงื™ื•ืช ืฉื•ื ื•ืช. ื”ื’ืจืกื” ื”ืจืืฉื•ื ื” ืฉืœ SQL Graph ืžื‘ื˜ื™ื—ื” ืžืื•ื“. ืืคื™ืœื• ืœืžืจื•ืช ื›ืžื” ืžื’ื‘ืœื•ืช, ื™ืฉ ื›ื‘ืจ ืžืกืคื™ืง ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื›ื“ื™ ืœื—ืงื•ืจ ืืช ื”ื™ื›ื•ืœื•ืช ืฉืœ ื’ืจืคื™ื.

ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช SQL Graph ืžืฉื•ืœื‘ืช ื‘ืžืœื•ืื” ื‘ืžื ื•ืข SQL. ืขื ื–ืืช, ื›ืคื™ ืฉื›ื‘ืจ ื ืืžืจ, ืœ-SQL Server 2017 ื™ืฉ ืืช ื”ืžื’ื‘ืœื•ืช ื”ื‘ืื•ืช:

ืื™ืŸ ืชืžื™ื›ื” ื‘ืคื•ืœื™ืžื•ืจืคื™ื–ื.

  • ืจืง ื—ื™ื‘ื•ืจื™ื ื—ื“-ื›ื™ื•ื•ื ื™ื™ื ื ืชืžื›ื™ื.
  • Edges ืœื ื™ื›ื•ืœ ืœืขื“ื›ืŸ ืืช ื”ืขืžื•ื“ื•ืช $from_id ื•-$to_id ื‘ืืžืฆืขื•ืช UPDATE.
  • ืกื’ื™ืจื•ืช ื˜ืจื ื–ื™ื˜ื™ื‘ื™ื•ืช ืื™ื ืŸ ื ืชืžื›ื•ืช, ืืš ื ื™ืชืŸ ืœื”ืฉื™ื’ ืื•ืชืŸ ื‘ืืžืฆืขื•ืช CTE.
  • ื”ืชืžื™ื›ื” ื‘ืื•ื‘ื™ื™ืงื˜ื™ OLTP ื‘ื–ื™ื›ืจื•ืŸ ืžื•ื’ื‘ืœืช.
  • ื˜ื‘ืœืื•ืช ื–ืžื ื™ื•ืช (ื˜ื‘ืœื” ื–ืžื ื™ืช ื‘ื’ืจืกืช ืžืขืจื›ืช), ื˜ื‘ืœืื•ืช ืžืงื•ืžื™ื•ืช ื•ื’ืœื•ื‘ืœื™ื•ืช ื–ืžื ื™ื•ืช ืื™ื ืŸ ื ืชืžื›ื•ืช.
  • ืœื ื ื™ืชืŸ ืœื”ืฆื”ื™ืจ ืขืœ ืกื•ื’ื™ ื˜ื‘ืœืื•ืช ื•ืžืฉืชื ื™ ื˜ื‘ืœื” ื›-NODE ืื• EDGE.
  • ืฉืื™ืœืชื•ืช ืฆื•ืœื‘ื•ืช ืžืกื“ื™ ื ืชื•ื ื™ื ืื™ื ืŸ ื ืชืžื›ื•ืช.
  • ืื™ืŸ ื“ืจืš ืื• ืืฉืฃ ื™ืฉื™ืจื™ื ืœื”ืžื™ืจ ื˜ื‘ืœืื•ืช ืจื’ื™ืœื•ืช ืœื˜ื‘ืœืื•ืช ื’ืจืคื™ื.
  • ืื™ืŸ ืžืžืฉืง ืžืฉืชืžืฉ ืœื”ืฆื’ืช ื’ืจืคื™ื, ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-Power BI.

ืžื‘ื•ื ืœ- SQL Server 2017 Graph Databases

ืงืจื ืขื•ื“:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”