Introduction aux bases de données de graphes SQL Server 2017

Avant le début du cours "Développeur MS SQL Server" Nous avons préparé une autre traduction utile pour vous.

Les bases de données de graphes sont une technologie importante pour les professionnels des bases de données. J'essaie de suivre les innovations et les nouvelles technologies dans ce domaine et après avoir travaillé avec des bases de données relationnelles et NoSQL, je vois que le rôle des bases de données de graphes devient de plus en plus important. Lorsque vous travaillez avec des données hiérarchiques complexes, non seulement les bases de données traditionnelles, mais également NoSQL sont inefficaces. Souvent, avec une augmentation du nombre de niveaux de liaison et de la taille de la base de données, les performances diminuent. Et à mesure que les relations deviennent plus complexes, le nombre de JOINs augmente également.

Bien sûr, dans le modèle relationnel, il existe des solutions pour travailler avec des hiérarchies (par exemple, en utilisant des CTE récursifs), mais ce sont toujours des solutions de contournement. Dans le même temps, la fonctionnalité des bases de données de graphes SQL Server facilite la gestion de plusieurs niveaux de hiérarchie. Le modèle de données et les requêtes sont simplifiés, et donc leur efficacité est augmentée. Réduit considérablement la quantité de code.

Les bases de données de graphes sont un langage expressif pour représenter des systèmes complexes. Cette technologie est déjà assez largement utilisée dans l'industrie informatique dans des domaines tels que les réseaux sociaux, les systèmes anti-fraude, l'analyse des réseaux informatiques, les recommandations sociales, les recommandations de produits et de contenus.

La fonctionnalité de base de données graphique dans SQL Server convient aux scénarios où les données sont fortement interconnectées et ont des relations bien définies.

Modèle de données graphique

Un graphe est un ensemble de sommets (nœuds, nœud) et d'arêtes (relations, arête). Les sommets représentent des entités et les arêtes représentent des liens dont les attributs peuvent contenir des informations.

Une base de données de graphes modélise des entités sous forme de graphe tel que défini dans la théorie des graphes. Les structures de données sont des sommets et des arêtes. Les attributs sont des propriétés des sommets et des arêtes. Une connexion est une connexion de sommets.

Contrairement aux autres modèles de données, les bases de données de graphes donnent la priorité aux relations entre les entités. Par conséquent, il n'est pas nécessaire de calculer les relations à l'aide de clés étrangères ou d'une autre manière. Il est possible de créer des modèles de données complexes en utilisant uniquement des abstractions de sommets et d'arêtes.

Dans le monde d'aujourd'hui, la modélisation des relations nécessite des techniques de plus en plus sophistiquées. Pour modéliser les relations, SQL Server 2017 offre des fonctionnalités de base de données de graphes. Les sommets et les arêtes du graphe sont représentés sous la forme de nouveaux types de tables : NODE et EDGE. Les requêtes de graphe utilisent une nouvelle fonction T-SQL appelée MATCH(). Étant donné que cette fonctionnalité est intégrée à SQL Server 2017, elle peut être utilisée dans vos bases de données existantes sans nécessiter de conversion de base de données.

Avantages du modèle graphique

De nos jours, les entreprises et les utilisateurs exigent des applications qui fonctionnent avec de plus en plus de données, tout en exigeant des performances et une fiabilité élevées. La représentation graphique des données offre un moyen pratique de gérer des relations complexes. Cette approche résout de nombreux problèmes et permet d'obtenir des résultats dans un contexte donné.

Il semble que de nombreuses applications bénéficieront des bases de données de graphes à l'avenir.

Modélisation des données : de la modélisation relationnelle à la modélisation graphique

Introduction aux bases de données de graphes SQL Server 2017
Exemple

Prenons un exemple de structure organisationnelle avec une hiérarchie d'employés : un employé relève d'un responsable, un responsable relève d'un cadre supérieur, etc. Selon l'entreprise spécifique, il peut y avoir n'importe quel nombre de niveaux dans cette hiérarchie. Mais à mesure que le nombre de niveaux augmente, le calcul des relations dans une base de données relationnelle devient de plus en plus difficile. Il est assez difficile d'imaginer la hiérarchie des employés, la hiérarchie dans le marketing ou les connexions aux médias sociaux. Voyons comment SQL Graph peut résoudre le problème de la gestion des différents niveaux de hiérarchie.

Pour cet exemple, créons un modèle de données simple. Créer une table des employés EMP avec identifiant EMPNO et colonne MGRA qui pointe vers l'ID du chef (manager) de l'employé. Toutes les informations sur la hiérarchie sont stockées dans cette table et peuvent être interrogées à l'aide de colonnes EMPNO и MGR.

Introduction aux bases de données de graphes SQL Server 2017
Le diagramme suivant montre également le même modèle d'organigramme avec quatre niveaux d'imbrication sous une forme plus familière. Les employés sont les sommets du graphique du tableau EMP. L'entité « employé » est liée à elle-même par la relation « soumet » (ReportsTo). En termes de graphe, un lien est une arête (EDGE) qui relie des nœuds (NODE) ​​d'employés.

Introduction aux bases de données de graphes SQL Server 2017

Créons une table régulière EMP et y ajouter des valeurs selon le schéma ci-dessus.

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)

La figure ci-dessous montre les employés :

  • employé avec EMPNO 7369 est subordonné à 7902 ;
  • employé avec EMPNO 7902 subordonné à 7566
  • employé avec EMPNO 7566 subordonné à 7839

Introduction aux bases de données de graphes SQL Server 2017
Regardons maintenant la représentation des mêmes données sous la forme d'un graphique. Le nœud EMPLOYEE possède plusieurs attributs et est lié à lui-même par une relation "submits" (EmplReportsTo). EmplReportsTo est le nom de la relation.

La table des bords (EDGE) peut également avoir des attributs.

Introduction aux bases de données de graphes SQL Server 2017
Créer une table de nœuds EmpNode

La syntaxe pour créer un nœud est assez simple : à l'expression CREER LA TABLE ajouté à la fin COMME NŒUD.

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

Convertissons maintenant les données d'un tableau normal en un graphique. Suivant INSERT insère des données d'une table relationnelle EMP.

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

Introduction aux bases de données de graphes SQL Server 2017
Dans la table de nœuds dans une colonne spéciale $node_id_* l'ID d'hôte est stocké au format JSON. Les colonnes restantes de ce tableau contiennent les attributs du nœud.

Créer des arêtes (EDGE)

La création d'une table de bord est très similaire à la création d'une table de nœuds, sauf que le mot-clé COMME BORD.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Introduction aux bases de données de graphes SQL Server 2017

Définissons maintenant les relations entre les employés à l'aide de colonnes EMPNO и MGR. L'organigramme montre clairement comment écrire 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);

La table des bords a trois colonnes par défaut. D'abord, $edge_id — identifiant de bord sous la forme de JSON. Les deux autres ($from_id и $to_id) représentent la relation entre les nœuds. De plus, les arêtes peuvent avoir des propriétés supplémentaires. Dans notre cas, cela Numéro de service.

Vues système

Dans la vue système sys.tables Il y a deux nouvelles colonnes :

  1. est_bord
  2. est_node

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

Introduction aux bases de données de graphes SQL Server 2017

SMS

Les objets liés aux graphes se trouvent dans le dossier Graph Tables. L'icône de la table de nœuds est marquée d'un point et l'icône de la table des bords est marquée de deux cercles connectés (qui ressemblent un peu à des lunettes).

Introduction aux bases de données de graphes SQL Server 2017

Expression CORRESPONDANCE

Expression MATCH tiré de CQL (Cypher Query Language). C'est un moyen efficace d'interroger les propriétés d'un graphe. CQL commence par une expression MATCH.

syntaxe

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

Exemples

Regardons quelques exemples.

La requête ci-dessous affiche les employés dont Smith et son responsable relèvent.

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'

Introduction aux bases de données de graphes SQL Server 2017
La requête suivante permet de rechercher des employés et des responsables de deuxième niveau pour Smith. Si vous supprimez l'offre , tous les employés seront affichés en conséquence.

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'

Introduction aux bases de données de graphes SQL Server 2017
Et enfin, une demande d'employés et de gestionnaires de troisième niveau.

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'

Introduction aux bases de données de graphes SQL Server 2017
Changeons maintenant de direction pour obtenir les patrons de 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)

Introduction aux bases de données de graphes SQL Server 2017

Conclusion

SQL Server 2017 s'est imposé comme une solution d'entreprise complète pour une variété de besoins informatiques d'entreprise. La première version de SQL Graph est très prometteuse. Même malgré certaines limitations, il existe déjà suffisamment de fonctionnalités pour explorer les possibilités des graphes.

La fonctionnalité SQL Graph est entièrement intégrée à SQL Engine. Cependant, comme déjà mentionné, SQL Server 2017 présente les limitations suivantes :

Pas de support pour le polymorphisme.

  • Seuls les liens unidirectionnels sont pris en charge.
  • Les dispositifs Edge ne peuvent pas mettre à jour leurs colonnes $from_id et $to_id via UPDATE.
  • Les fermetures transitives ne sont pas prises en charge, mais elles peuvent être obtenues à l'aide de CTE.
  • Prise en charge limitée des objets OLTP en mémoire.
  • Les tables temporelles (System-Versioned Temporal Table), les tables temporaires locales et globales ne sont pas prises en charge.
  • Les types de table et les variables de table ne peuvent pas être déclarés comme NODE ou EDGE.
  • Les requêtes entre bases de données ne sont pas prises en charge.
  • Il n'existe aucun moyen direct ou une sorte d'assistant (assistant) pour convertir des tableaux normaux en tableaux graphiques.
  • Il n'y a pas d'interface graphique pour afficher les graphiques, mais Power BI peut être utilisé.

Introduction aux bases de données de graphes SQL Server 2017

Lire la suite:

Source: habr.com

Ajouter un commentaire