Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017

Trước khi bắt đầu khóa học "Nhà phát triển máy chủ MS SQL" Chúng tôi đã chuẩn bị một bản dịch hữu ích khác cho bạn.

Cơ sở dữ liệu đồ thị là một công nghệ quan trọng đối với các chuyên gia cơ sở dữ liệu. Tôi cố gắng theo dõi những cải tiến và công nghệ mới trong lĩnh vực này và sau khi làm việc với cơ sở dữ liệu quan hệ và NoSQL, tôi thấy rằng vai trò của cơ sở dữ liệu đồ thị ngày càng nhiều hơn. Khi làm việc với dữ liệu phân cấp phức tạp, không chỉ cơ sở dữ liệu truyền thống mà cả NoSQL đều không hiệu quả. Thông thường, với sự gia tăng số lượng cấp độ liên kết và kích thước của cơ sở dữ liệu, hiệu suất sẽ giảm. Và khi các mối quan hệ trở nên phức tạp hơn, số lượng THAM GIA cũng tăng lên.

Tất nhiên, trong mô hình quan hệ có các giải pháp để làm việc với hệ thống phân cấp (ví dụ: sử dụng CTE đệ quy), nhưng đây vẫn là các giải pháp thay thế. Đồng thời, chức năng của cơ sở dữ liệu đồ thị SQL Server giúp dễ dàng xử lý nhiều cấp độ phân cấp. Cả mô hình dữ liệu và truy vấn đều được đơn giản hóa và do đó hiệu quả của chúng được tăng lên. Giảm đáng kể số lượng mã.

Cơ sở dữ liệu đồ thị là một ngôn ngữ biểu cảm để biểu diễn các hệ thống phức tạp. Công nghệ này đã được sử dụng khá rộng rãi trong ngành CNTT ở các lĩnh vực như mạng xã hội, hệ thống chống gian lận, phân tích mạng CNTT, đề xuất xã hội, đề xuất sản phẩm và nội dung.

Chức năng cơ sở dữ liệu đồ thị trong SQL Server phù hợp với các tình huống mà dữ liệu được kết nối với nhau ở mức độ cao và có các mối quan hệ được xác định rõ.

Mô hình dữ liệu đồ thị

Một đồ thị là một tập hợp các đỉnh (nút, nút) và các cạnh (các mối quan hệ, cạnh). Các đỉnh đại diện cho các thực thể và các cạnh đại diện cho các liên kết có thuộc tính có thể chứa thông tin.

Cơ sở dữ liệu đồ thị mô hình hóa các thực thể dưới dạng đồ thị như được định nghĩa trong lý thuyết đồ thị. Cấu trúc dữ liệu là đỉnh và cạnh. Thuộc tính là thuộc tính của đỉnh và cạnh. Một kết nối là một kết nối của các đỉnh.

Không giống như các mô hình dữ liệu khác, cơ sở dữ liệu đồ thị ưu tiên mối quan hệ giữa các thực thể. Do đó, không cần tính toán các mối quan hệ bằng cách sử dụng khóa ngoại hoặc theo một số cách khác. Có thể tạo các mô hình dữ liệu phức tạp chỉ bằng cách sử dụng trừu tượng đỉnh và cạnh.

Trong thế giới ngày nay, việc mô hình hóa các mối quan hệ ngày càng đòi hỏi nhiều kỹ thuật tinh vi hơn. Để lập mô hình các mối quan hệ, SQL Server 2017 cung cấp khả năng cơ sở dữ liệu đồ thị. Các đỉnh và cạnh của biểu đồ được biểu diễn dưới dạng các loại bảng mới: NODE và EDGE. Các truy vấn đồ thị sử dụng một hàm T-SQL mới gọi là MATCH(). Vì chức năng này được tích hợp vào SQL Server 2017, nên nó có thể được sử dụng trong cơ sở dữ liệu hiện có của bạn mà không cần bất kỳ chuyển đổi cơ sở dữ liệu nào.

Lợi ích của mô hình đồ thị

Ngày nay, các doanh nghiệp và người dùng yêu cầu các ứng dụng hoạt động với ngày càng nhiều dữ liệu, đồng thời mong đợi hiệu suất và độ tin cậy cao. Biểu diễn dữ liệu bằng đồ thị cung cấp một phương tiện thuận tiện để xử lý các mối quan hệ phức tạp. Cách tiếp cận này giải quyết được nhiều vấn đề và giúp đạt được kết quả trong một bối cảnh nhất định.

Có vẻ như nhiều ứng dụng sẽ được hưởng lợi từ cơ sở dữ liệu đồ thị trong tương lai.

Mô hình hóa dữ liệu: Từ mô hình quan hệ đến mô hình đồ thị

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017
Ví dụ

Hãy xem một ví dụ về cấu trúc tổ chức với hệ thống phân cấp nhân viên: nhân viên báo cáo cho người quản lý, người quản lý báo cáo cho người quản lý cấp cao, v.v. Tùy thuộc vào công ty cụ thể, có thể có bất kỳ cấp độ nào trong hệ thống phân cấp này. Nhưng khi số mức tăng lên, việc tính toán các mối quan hệ trong cơ sở dữ liệu quan hệ ngày càng trở nên khó khăn hơn. Khá khó để tưởng tượng ra hệ thống phân cấp của nhân viên, hệ thống phân cấp trong tiếp thị hoặc kết nối truyền thông xã hội. Hãy xem cách SQL Graph có thể giải quyết vấn đề xử lý các mức phân cấp khác nhau.

Đối với ví dụ này, hãy tạo một mô hình dữ liệu đơn giản. Tạo bảng nhân viên EMP với id EMPNO và cột M.G.R.A trỏ đến ID của người đứng đầu (người quản lý) của nhân viên. Tất cả thông tin về hệ thống phân cấp được lưu trữ trong bảng này và có thể được truy vấn bằng các cột EMPNO и M.G.R..

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017
Sơ đồ sau đây cũng cho thấy mô hình sơ đồ tổ chức tương tự với bốn cấp lồng nhau ở dạng quen thuộc hơn. Nhân viên là các đỉnh của đồ thị từ bảng EMP. Thực thể "nhân viên" được liên kết với chính nó bằng mối quan hệ "gửi" (ReportsTo). Theo thuật ngữ đồ thị, một liên kết là một cạnh (EDGE) kết nối các nút (NODE) ​​của nhân viên.

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017

Hãy tạo một bảng thông thường EMP và cộng các giá trị vào đó theo sơ đồ trên.

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)

Hình dưới đây cho thấy các nhân viên:

  • nhân viên với EMPNO 7369 trực thuộc 7902;
  • nhân viên với EMPNO 7902 trực thuộc 7566
  • nhân viên với EMPNO 7566 trực thuộc 7839

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017
Bây giờ hãy xem biểu diễn của cùng một dữ liệu dưới dạng biểu đồ. Nút NHÂN VIÊN có một số thuộc tính và được liên kết với chính nó bằng mối quan hệ "gửi" (EmplReportsTo). EmplReportsTo là tên của mối quan hệ.

Bảng cạnh (EDGE) cũng có thể có các thuộc tính.

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017
Tạo một bảng nút EmpNode

Cú pháp để tạo một nút khá đơn giản: với biểu thức TẠO BẢNG thêm vào cuối NHƯ NÚT.

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

Bây giờ, hãy chuyển đổi dữ liệu từ một bảng thông thường sang một biểu đồ. Kế tiếp CHÈN chèn dữ liệu từ một bảng quan hệ EMP.

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

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017
Trong bảng nút trong một cột đặc biệt $node_id_* ID máy chủ lưu trữ dưới dạng JSON. Các cột còn lại của bảng này chứa các thuộc tính của nút.

Tạo các cạnh (EDGE)

Tạo một bảng cạnh rất giống với việc tạo một bảng nút, ngoại trừ từ khóa NHƯ CẠNH.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017

Bây giờ, hãy xác định mối quan hệ giữa các nhân viên bằng cách sử dụng các cột EMPNO и M.G.R.. Sơ đồ tổ chức cho thấy rõ cách viết CHÈN.

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);

Bảng cạnh có ba cột theo mặc định. Đầu tiên, $edge_id — mã định danh cạnh ở dạng JSON. Hai cái kia ($from_id и $to_id) đại diện cho mối quan hệ giữa các nút. Ngoài ra, các cạnh có thể có các thuộc tính bổ sung. Trong trường hợp của chúng tôi, điều này phòng ban.

Chế độ xem hệ thống

Trong chế độ xem hệ thống sys.tables Có hai cột mới:

  1. is_edge
  2. nút_is_node

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

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017

ssms

Các đối tượng liên quan đến đồ thị nằm trong thư mục Graph Tables. Biểu tượng bảng nút được đánh dấu bằng một dấu chấm và biểu tượng bảng cạnh được đánh dấu bằng hai vòng tròn được kết nối (trông hơi giống kính).

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017

biểu thức MATCH

Biểu thức Đội hình thi đấu lấy từ CQL (Cypher Query Language). Đây là một cách hiệu quả để truy vấn các thuộc tính của biểu đồ. CQL bắt đầu bằng một biểu thức Đội hình thi đấu.

cú pháp

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

Ví dụ

Hãy xem xét một vài ví dụ.

Truy vấn bên dưới hiển thị các nhân viên mà Smith và người quản lý của anh ấy báo cáo.

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'

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017
Truy vấn sau đây là để tìm nhân viên và người quản lý cấp hai cho Smith. Nếu bạn xóa phiếu mua hàng Ở ĐÂU, thì kết quả là tất cả nhân viên sẽ được hiển thị.

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'

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017
Và cuối cùng là yêu cầu dành cho nhân viên và quản lý cấp ba.

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'

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017
Bây giờ hãy đổi hướng để có được các ông chủ của 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)

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017

Kết luận

SQL Server 2017 đã tự khẳng định mình là một giải pháp doanh nghiệp hoàn chỉnh cho nhiều nhu cầu CNTT của doanh nghiệp. Phiên bản đầu tiên của SQL Graph rất hứa hẹn. Ngay cả khi có một số hạn chế, vẫn có đủ chức năng để khám phá các khả năng của biểu đồ.

Chức năng SQL Graph được tích hợp hoàn toàn vào SQL Engine. Tuy nhiên, như đã đề cập, SQL Server 2017 có những hạn chế sau:

Không hỗ trợ đa hình.

  • Chỉ liên kết một chiều được hỗ trợ.
  • Các cạnh không thể cập nhật các cột $from_id và $to_id của chúng qua CẬP NHẬT.
  • Các bao đóng chuyển tiếp không được hỗ trợ, nhưng chúng có thể thu được bằng cách sử dụng CTE.
  • Hỗ trợ hạn chế cho các đối tượng OLTP trong bộ nhớ.
  • Các bảng tạm thời (Bảng tạm thời có phiên bản hệ thống), các bảng tạm thời cục bộ và toàn cầu không được hỗ trợ.
  • Các loại bảng và biến bảng không thể được khai báo là NODE hoặc EDGE.
  • Truy vấn cơ sở dữ liệu chéo không được hỗ trợ.
  • Không có cách trực tiếp hay một loại thuật sĩ (wizard) nào đó để chuyển các bảng thông thường thành các bảng biểu đồ.
  • Không có GUI để hiển thị đồ thị nhưng có thể sử dụng Power BI.

Giới thiệu về cơ sở dữ liệu đồ thị SQL Server 2017

Đọc thêm:

Nguồn: www.habr.com

Thêm một lời nhận xét