ข้อมูลเบื้องต้นเกี่ยวกับฐานข้อมูลกราฟ SQL Server 2017

ก่อนเริ่มหลักสูตร "ผู้พัฒนาเซิร์ฟเวอร์ MS SQL" เราได้เตรียมคำแปลอื่นที่เป็นประโยชน์สำหรับคุณ

ฐานข้อมูลกราฟเป็นเทคโนโลยีที่สำคัญสำหรับผู้เชี่ยวชาญด้านฐานข้อมูล ฉันพยายามติดตามนวัตกรรมและเทคโนโลยีใหม่ๆ ในด้านนี้ และหลังจากทำงานกับฐานข้อมูลเชิงสัมพันธ์และฐานข้อมูล NoSQL ฉันเห็นว่าบทบาทของฐานข้อมูลกราฟมีมากขึ้นเรื่อยๆ เมื่อทำงานกับข้อมูลลำดับชั้นที่ซับซ้อน ไม่เพียงแต่ฐานข้อมูลแบบดั้งเดิมเท่านั้น แต่รวมถึง NoSQL ด้วยที่ไม่ได้ผล บ่อยครั้งที่การเพิ่มจำนวนของระดับลิงก์และขนาดของฐานข้อมูลทำให้ประสิทธิภาพการทำงานลดลง และเมื่อความสัมพันธ์มีความซับซ้อนมากขึ้น จำนวน JOIN ก็เพิ่มขึ้นเช่นกัน

แน่นอนว่าในโมเดลเชิงสัมพันธ์มีวิธีแก้ปัญหาสำหรับการทำงานกับลำดับชั้น (เช่น การใช้ CTE แบบเรียกซ้ำ) แต่สิ่งเหล่านี้ยังคงเป็นวิธีแก้ปัญหา ในขณะเดียวกัน การทำงานของฐานข้อมูลกราฟของ SQL Server ทำให้ง่ายต่อการจัดการลำดับชั้นหลายระดับ ทั้งโมเดลข้อมูลและคิวรีถูกทำให้ง่ายขึ้น ดังนั้นประสิทธิภาพจึงเพิ่มขึ้น ลดจำนวนรหัสลงอย่างมาก

ฐานข้อมูลกราฟเป็นภาษาที่แสดงออกสำหรับการแสดงระบบที่ซับซ้อน เทคโนโลยีนี้ค่อนข้างใช้กันอย่างแพร่หลายในอุตสาหกรรมไอทีในด้านต่างๆ เช่น โซเชียลเน็ตเวิร์ก ระบบป้องกันการฉ้อโกง การวิเคราะห์เครือข่ายไอที คำแนะนำโซเชียล คำแนะนำผลิตภัณฑ์และเนื้อหา

ฟังก์ชันฐานข้อมูลกราฟใน SQL Server เหมาะสำหรับสถานการณ์ที่ข้อมูลเชื่อมต่อกันอย่างมากและมีความสัมพันธ์ที่กำหนดไว้อย่างดี

แบบจำลองข้อมูลกราฟ

กราฟคือชุดของจุดยอด (โหนด, โหนด) และขอบ (ความสัมพันธ์, ขอบ) จุดยอดแสดงถึงเอนทิตี และขอบแสดงถึงลิงก์ที่แอตทริบิวต์สามารถบรรจุข้อมูลได้

แบบจำลองฐานข้อมูลกราฟเอนทิตีเป็นกราฟตามที่กำหนดไว้ในทฤษฎีกราฟ โครงสร้างข้อมูลมีจุดยอดและขอบ แอตทริบิวต์คือคุณสมบัติของจุดยอดและขอบ การเชื่อมต่อคือการเชื่อมต่อของจุดยอด

ไม่เหมือนโมเดลข้อมูลอื่นๆ ฐานข้อมูลกราฟจัดลำดับความสำคัญของความสัมพันธ์ระหว่างเอนทิตี ดังนั้นจึงไม่จำเป็นต้องคำนวณความสัมพันธ์โดยใช้คีย์นอกหรือด้วยวิธีอื่น เป็นไปได้ที่จะสร้างแบบจำลองข้อมูลที่ซับซ้อนโดยใช้เฉพาะจุดยอดและขอบที่เป็นนามธรรม

ในโลกปัจจุบัน การสร้างแบบจำลองความสัมพันธ์ต้องใช้เทคนิคที่ซับซ้อนมากขึ้นเรื่อยๆ เพื่อสร้างแบบจำลองความสัมพันธ์ SQL Server 2017 มีความสามารถฐานข้อมูลกราฟ จุดยอดและขอบของกราฟจะแสดงเป็นตารางประเภทใหม่: NODE และ EDGE การค้นหากราฟใช้ฟังก์ชัน T-SQL ใหม่ที่เรียกว่า MATCH() เนื่องจากฟังก์ชันนี้สร้างขึ้นใน SQL Server 2017 จึงสามารถใช้ในฐานข้อมูลที่มีอยู่ของคุณโดยไม่จำเป็นต้องแปลงฐานข้อมูลใดๆ

ประโยชน์ของกราฟโมเดล

ปัจจุบัน ธุรกิจและผู้ใช้ต้องการแอปพลิเคชันที่ทำงานกับข้อมูลจำนวนมากขึ้นเรื่อยๆ ในขณะที่คาดหวังประสิทธิภาพและความน่าเชื่อถือสูง การแสดงกราฟของข้อมูลเป็นวิธีที่สะดวกในการจัดการความสัมพันธ์ที่ซับซ้อน วิธีการนี้ช่วยแก้ปัญหามากมายและช่วยให้ได้ผลลัพธ์ภายในบริบทที่กำหนด

ดูเหมือนว่าแอปพลิเคชั่นมากมายจะได้รับประโยชน์จากฐานข้อมูลกราฟในอนาคต

การสร้างแบบจำลองข้อมูล: จากความสัมพันธ์ไปจนถึงการสร้างแบบจำลองกราฟ

ข้อมูลเบื้องต้นเกี่ยวกับฐานข้อมูลกราฟ SQL Server 2017
ตัวอย่าง

ลองดูตัวอย่างโครงสร้างองค์กรที่มีลำดับชั้นของพนักงาน: พนักงานรายงานต่อผู้จัดการ ผู้จัดการรายงานต่อผู้จัดการอาวุโส และอื่น ๆ ลำดับชั้นนี้มีกี่ระดับก็ได้ขึ้นอยู่กับบริษัทเฉพาะ แต่เมื่อจำนวนระดับเพิ่มขึ้น การคำนวณความสัมพันธ์ในฐานข้อมูลเชิงสัมพันธ์จะยากขึ้นเรื่อยๆ มันค่อนข้างยากที่จะจินตนาการถึงลำดับชั้นของพนักงาน ลำดับชั้นในการเชื่อมต่อทางการตลาดหรือโซเชียลมีเดีย มาดูกันว่า SQL Graph สามารถแก้ปัญหาการจัดการลำดับชั้นต่างๆ ได้อย่างไร

สำหรับตัวอย่างนี้ ลองสร้างแบบจำลองข้อมูลอย่างง่าย สร้างตารางของพนักงาน EMP พร้อมรหัส เอ็มพีโน และคอลัมน์ มจพที่ชี้ไปที่ ID ของหัวหน้า (ผู้จัดการ) ของพนักงาน ข้อมูลทั้งหมดเกี่ยวกับลำดับชั้นจะถูกจัดเก็บไว้ในตารางนี้ และสามารถสอบถามโดยใช้คอลัมน์ เอ็มพีโน и มจพ.

ข้อมูลเบื้องต้นเกี่ยวกับฐานข้อมูลกราฟ SQL Server 2017
ไดอะแกรมต่อไปนี้ยังแสดงแบบจำลองแผนผังองค์กรเดียวกันกับการซ้อนสี่ระดับในรูปแบบที่คุ้นเคยมากกว่า พนักงานคือจุดยอดของกราฟจากตาราง EMP. เอนทิตี "พนักงาน" เชื่อมโยงกับตัวเองโดยความสัมพันธ์ "ส่ง" (รายงานไปยัง) ในแง่กราฟ ลิงก์คือขอบ (EDGE) ที่เชื่อมต่อโหนด (NODE) ​​ของพนักงาน

ข้อมูลเบื้องต้นเกี่ยวกับฐานข้อมูลกราฟ SQL Server 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)

ภาพด้านล่างแสดงพนักงาน:

  • พนักงานด้วย เอ็มพีโน 7369 รองจาก 7902;
  • พนักงานด้วย เอ็มพีโน 7902 รองจาก 7566
  • พนักงานด้วย เอ็มพีโน 7566 รองจาก 7839

ข้อมูลเบื้องต้นเกี่ยวกับฐานข้อมูลกราฟ SQL Server 2017
ทีนี้มาดูการแสดงข้อมูลเดียวกันในรูปแบบของกราฟกัน โหนด EMPLOYEE มีหลายแอตทริบิวต์และเชื่อมโยงกับตัวเองโดยความสัมพันธ์ "ส่ง" (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;

ตอนนี้มาแปลงข้อมูลจากตารางปกติเป็นกราฟกัน ต่อไป INSERT แทรกข้อมูลจากตารางเชิงสัมพันธ์ EMP.

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

ข้อมูลเบื้องต้นเกี่ยวกับฐานข้อมูลกราฟ SQL Server 2017
ในตารางโหนดในคอลัมน์พิเศษ $node_id_* รหัสโฮสต์ถูกจัดเก็บเป็น JSON คอลัมน์ที่เหลือของตารางนี้มีแอตทริบิวต์ของโหนด

สร้างขอบ (EDGE)

การสร้างตารางขอบนั้นคล้ายกับการสร้างตารางโหนดมาก ยกเว้นคีย์เวิร์ดนั้น เป็นขอบ.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

ข้อมูลเบื้องต้นเกี่ยวกับฐานข้อมูลกราฟ SQL Server 2017

ตอนนี้เรามากำหนดความสัมพันธ์ระหว่างพนักงานโดยใช้คอลัมน์ เอ็มพีโน и มจพ. แผนผังองค์กรแสดงวิธีการเขียนอย่างชัดเจน 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. is_edge
  2. is_node

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

ข้อมูลเบื้องต้นเกี่ยวกับฐานข้อมูลกราฟ SQL Server 2017

เอสเอสเอ็มเอส

วัตถุที่เกี่ยวข้องกับกราฟจะอยู่ในโฟลเดอร์ตารางกราฟ ไอคอนตารางโหนดถูกทำเครื่องหมายด้วยจุด และไอคอนตารางที่ขอบถูกทำเครื่องหมายด้วยวงกลมสองวงที่เชื่อมต่อกัน (ซึ่งดูเหมือนแว่น)

ข้อมูลเบื้องต้นเกี่ยวกับฐานข้อมูลกราฟ SQL Server 2017

จับคู่นิพจน์

การแสดงออก 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

ตัวอย่าง

ลองดูตัวอย่างบางส่วน

ข้อความค้นหาด้านล่างแสดงพนักงานที่ 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 หากคุณลบข้อเสนอ WHEREจากนั้นพนักงานทั้งหมดจะแสดงเป็นผลลัพธ์

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 ได้สร้างตัวเองให้เป็นโซลูชันระดับองค์กรที่สมบูรณ์แบบสำหรับความต้องการด้านไอทีทางธุรกิจที่หลากหลาย SQL Graph เวอร์ชันแรกมีแนวโน้มดีมาก แม้ว่าจะมีข้อจำกัดอยู่บ้าง แต่ก็มีฟังก์ชันเพียงพอที่จะสำรวจความเป็นไปได้ของกราฟ

ฟังก์ชัน SQL Graph ถูกรวมเข้ากับ SQL Engine อย่างสมบูรณ์ อย่างไรก็ตาม ตามที่ได้กล่าวไปแล้ว SQL Server 2017 มีข้อจำกัดดังต่อไปนี้:

ไม่รองรับความหลากหลาย

  • รองรับเฉพาะลิงค์ทิศทางเดียว
  • Edges ไม่สามารถอัปเดตคอลัมน์ $from_id และ $to_id ผ่าน UPDATE
  • ไม่รองรับการปิดชั่วคราว แต่สามารถรับได้โดยใช้ CTE
  • การสนับสนุนแบบจำกัดสำหรับออบเจกต์ OLTP ในหน่วยความจำ
  • ไม่รองรับตารางชั่วคราว (ตารางชั่วคราวเวอร์ชันระบบ) ตารางชั่วคราวในเครื่องและตารางส่วนกลาง
  • ไม่สามารถประกาศประเภทตารางและตัวแปรตารางเป็น NODE หรือ EDGE
  • ไม่รองรับการสืบค้นข้ามฐานข้อมูล
  • ไม่มีวิธีโดยตรงหรือตัวช่วยสร้าง (ตัวช่วยสร้าง) บางชนิดในการแปลงตารางปกติเป็นตารางกราฟ
  • ไม่มี GUI สำหรับแสดงกราฟ แต่สามารถใช้ Power BI ได้

ข้อมูลเบื้องต้นเกี่ยวกับฐานข้อมูลกราฟ SQL Server 2017

อ่านเพิ่มเติม:

ที่มา: will.com

เพิ่มความคิดเห็น