Graphique de l’Architecture SQLSQL Graph Architecture

S’APPLIQUE À : ouiSQL Server (à partir de 2017) ouiAzure SQL Database nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2017) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Découvrez l’architecture de graphe SQL.Learn how SQL Graph is architected. Le fait de connaître les principes de base rend plus facile à comprendre les autres articles de graphe SQL.Knowing the basics will make it easier to understand other SQL Graph articles.

Base de données de graphique SQLSQL Graph Database

Les utilisateurs peuvent créer un graphique par base de données.Users can create one graph per database. Un graphique est une collection de tables de nœuds et d’arêtes.A graph is a collection of node and edge tables. Les tables de nœuds ou d’arêtes peuvent être créés sous n’importe quel schéma dans la base de données, mais elles appartiennent à un graphique de logique.Node or edge tables can be created under any schema in the database, but they all belong to one logical graph. Une table de nœuds est la collection de type similaire de nœuds.A node table is collection of similar type of nodes. Par exemple, une table de nœuds Person conserve tous les nœuds de personne appartenant à un graphique.For example, a Person node table holds all the Person nodes belonging to a graph. De même, un tableau de bord est une collection d’un type similaire de bords.Similarly, an edge table is a collection of similar type of edges. Par exemple, une table d’arêtes Friends conserve tous les bords qui se connectent une personne à une autre personne.For example, a Friends edge table holds all the edges that connect a Person to another Person. Dans la mesure où les nœuds et les bords sont stockés dans les tables, la plupart des opérations prises en charge sur les tables normales est pris en charge sur les tables de nœuds ou d’arêtes.Since nodes and edges are stored in tables, most of the operations supported on regular tables are supported on node or edge tables.

SQL-graph-architecturesql-graph-architecture  

Figure 1 : Architecture de base de données de graphe SQLFigure 1: SQL Graph database architecture

Table de nœudsNode Table

Une table de nœuds représente une entité dans un schéma de graphique.A node table represents an entity in a graph schema. Chaque fois qu’une table de nœuds est créée, ainsi que les colonnes définies par l’utilisateur, implicite $node_id colonne est créée, qui identifie de façon unique un nœud donné dans la base de données.Every time a node table is created, along with the user-defined columns, an implicit $node_id column is created, which uniquely identifies a given node in the database. Les valeurs dans $node_id sont générées automatiquement et sont une combinaison de object_id de cette table de nœud et une valeur bigint généré en interne.The values in $node_id are automatically generated and are a combination of object_id of that node table and an internally generated bigint value. Toutefois, lorsque la $node_id colonne est sélectionnée, une valeur calculée sous la forme d’une chaîne JSON s’affiche.However, when the $node_id column is selected, a computed value in the form of a JSON string is displayed. En outre, $node_id est une pseudo-colonne, qui est mappé à un nom interne avec une chaîne hexadécimale qu’il contient.Also, $node_id is a pseudo column, that maps to an internal name with hex string in it. Lorsque vous sélectionnez $node_id à partir de la table, le nom de colonne s’affiche en tant que $node_id_<hex_string>.When you select $node_id from the table, the column name will appear as $node_id_<hex_string>. À l’aide des noms de colonnes pseudo-aléatoire dans les requêtes est la méthode recommandée de l’interrogation interne $node_id colonne et à l’aide du nom interne avec une chaîne hexadécimale doivent être évitées.Using pseudo-column names in queries is the recommended way of querying the internal $node_id column and using internal name with hex string should be avoided.

Il est recommandé que les utilisateurs créer une contrainte unique ou un index sur la $node_id colonne au moment de la création de table de nœud, mais si une n’est pas créée, une valeur par défaut des index non cluster unique est créé automatiquement.It is recommended that users create a unique constraint or index on the $node_id column at the time of creation of node table, but if one is not created, a default unique, non-clustered index is automatically created. Toutefois, n’importe quel index sur une colonne de pseudo graphique est créé sur les colonnes sous-jacentes internes.However, any index on a graph pseudo column is created on the underlying internal columns. Autrement dit, un index créé sur le $node_id colonne, apparaîtra sur interne graph_id_<hex_string> colonne.That is, an index created on the $node_id column, will appear on the internal graph_id_<hex_string> column.

Tableau de bordEdge Table

Un tableau de bord représente une relation dans un graphique.An edge table represents a relationship in a graph. Bords sont toujours dirigées et connecter les deux nœuds.Edges are always directed and connect two nodes. Un tableau de bord permet aux utilisateurs de modéliser des relations plusieurs-à-plusieurs dans le graphique.An edge table enables users to model many-to-many relationships in the graph. Un tableau de bord peut, ou peut-être pas tous les attributs définis par l’utilisateur qu’il contient.An edge table may or may not have any user-defined attributes in it. Chaque fois qu’un tableau de bord est créé, ainsi que les attributs définis par l’utilisateur, les trois colonnes implicites sont créés dans le tableau de bord :Every time an edge table is created, along with the user-defined attributes, three implicit columns are created in the edge table:

Nom de colonneColumn name DescriptionDescription
$edge_id Identifie de façon unique un bord donné dans la base de données.Uniquely identifies a given edge in the database. Il n’est généré et la valeur est une combinaison d’object_id de la table d’arêtes et une valeur bigint généré en interne.It is a generated column and the value is a combination of object_id of the edge table and a internally generated bigint value. Toutefois, lorsque la $edge_id colonne est sélectionnée, une valeur calculée sous la forme d’une chaîne JSON s’affiche.However, when the $edge_id column is selected, a computed value in the form of a JSON string is displayed. $edge_id est une pseudo-colonne, qui est mappé à un nom interne avec une chaîne hexadécimale qu’il contient.$edge_id is a pseudo-column, that maps to an internal name with hex string in it. Lorsque vous sélectionnez $edge_id à partir de la table, le nom de colonne s’affiche en tant que $edge_id_\<hex_string>.When you select $edge_id from the table, the column name will appear as $edge_id_\<hex_string>. À l’aide des noms de colonnes pseudo-aléatoire dans les requêtes est la méthode recommandée de l’interrogation interne $edge_id colonne et à l’aide du nom interne avec une chaîne hexadécimale doivent être évitées.Using pseudo-column names in queries is the recommended way of querying the internal $edge_id column and using internal name with hex string should be avoided.
$from_id Stocke le $node_id du nœud, à partir de l’origine de la périphérie.Stores the $node_id of the node, from where the edge originates.
$to_id Stocke le $node_id du nœud, à laquelle se termine le bord.Stores the $node_id of the node, at which the edge terminates.

Les nœuds auxquels un bord donné peut se connecter est régie par les données insérées dans la $from_id et $to_id colonnes.The nodes that a given edge can connect is governed by the data inserted in the $from_id and $to_id columns. Dans la première version, il n’est pas possible de définir des contraintes sur la table du bord, afin de le restreindre de se connecter à n’importe quel type de deux nœuds.In the first release, it is not possible to define constraints on the edge table, to restrict it from connecting any two type of nodes. Autrement dit, une arête peut se connecter les deux nœuds dans le graphique, quels que soient leurs types.That is, an edge can connect any two nodes in the graph, regardless of their types.

Similaire à la $node_id colonne, il est recommandé que les utilisateurs créent un index unique ou une contrainte sur la $edge_id colonne au moment de la création de la table du bord, mais si une n’est pas créée, une valeur par défaut des index non cluster unique est automatiquement créé sur Cette colonne.Similar to the $node_id column, it is recommended that users create a unique index or constraint on the $edge_id column at the time of creation of the edge table, but if one is not created, a default unique, non-clustered index is automatically created on this column. Toutefois, n’importe quel index sur une colonne de pseudo graphique est créé sur les colonnes sous-jacentes internes.However, any index on a graph pseudo column is created on the underlying internal columns. Autrement dit, un index créé sur le $edge_id colonne, apparaîtra sur interne graph_id_<hex_string> colonne.That is, an index created on the $edge_id column, will appear on the internal graph_id_<hex_string> column. Il est également recommandé pour les scénarios OLTP, que les utilisateurs créent un index sur ($from_id, $to_id) colonnes, pour les recherches plus rapides dans la direction du bord.It is also recommended, for OLTP scenarios, that users create an index on ($from_id, $to_id) columns, for faster lookups in the direction of the edge.

Figure 2 montre comment les tables de nœuds et d’arêtes sont stockées dans la base de données.Figure 2 shows how node and edge tables are stored in the database.

tables de personne amisperson-friends-tables  

Figure 2 : Représentation sous forme de table nœuds et d’arêtesFigure 2: Node and edge table representation

MétadonnéesMetadata

Utilisez ces vues de métadonnées pour voir les attributs d’une table de nœuds ou d’arêtes.Use these metadata views to see attributes of a node or edge table.

sys.tablessys.tables

Les nouveaux, suivants type bit, les colonnes seront ajoutées à SYS. TABLES.The following new, bit type, columns will be added to SYS.TABLES. Si is_node est défini sur 1, ce qui indique que la table est une table de nœuds et si is_edge est défini sur 1, ce qui indique que la table est une table d’arêtes.If is_node is set to 1, that indicates that the table is a node table and if is_edge is set to 1, that indicates that the table is an edge table.

Nom de la colonneColumn Name Type de donnéesData Type DescriptionDescription
is_nodeis_node bitbit 1 = il s’agit d’une table de nœuds1 = this is a node table
is_edgeis_edge bitbit 1 = il s’agit d’une table d’arêtes1 = this is an edge table

sys.columnssys.columns

Le sys.columns vue contient des colonnes supplémentaires graph_type et graph_type_desc, qui indiquent le type de la colonne dans les tables de nœuds et d’arêtes.The sys.columns view contains additional columns graph_type and graph_type_desc, that indicate the type of the column in node and edge tables.

Nom de la colonneColumn Name Type de donnéesData Type DescriptionDescription
graph_typegraph_type INTint Colonne interne avec un ensemble de valeurs.Internal column with a set of values. Les valeurs sont comprises entre 1-8 pour les colonnes de graphique et de valeur NULL pour d’autres.The values are between 1-8 for graph columns and NULL for others.
graph_type_descgraph_type_desc nvarchar(60)nvarchar(60) colonne interne avec un ensemble de valeursinternal column with a set of values

Le tableau suivant répertorie les valeurs valides pour graph_type colonneThe following table lists the valid values for graph_type column

Valeur de colonneColumn Value DescriptionDescription
11 GRAPH_IDGRAPH_ID
22 GRAPH_ID_COMPUTEDGRAPH_ID_COMPUTED
33 GRAPH_FROM_IDGRAPH_FROM_ID
44 GRAPH_FROM_OBJ_IDGRAPH_FROM_OBJ_ID
55 GRAPH_FROM_ID_COMPUTEDGRAPH_FROM_ID_COMPUTED
66 GRAPH_TO_IDGRAPH_TO_ID
77 GRAPH_TO_OBJ_IDGRAPH_TO_OBJ_ID
88 GRAPH_TO_ID_COMPUTEDGRAPH_TO_ID_COMPUTED

sys.columns stocke également des informations sur les colonnes implicites créées dans les tables de nœuds ou d’arêtes.sys.columns also stores information about implicit columns created in node or edge tables. Informations suivantes peuvent être récupérées à partir de sys.columns, toutefois, les utilisateurs ne peuvent pas sélectionner ces colonnes à partir d’une table de nœuds ou d’arêtes.Following information can be retrieved from sys.columns, however, users cannot select these columns from a node or edge table.

Colonnes implicites dans une table de nœudsImplicit columns in a node table

Nom de la colonneColumn Name Type de donnéesData Type is_hiddenis_hidden CommentaireComment
graph_id_<hex_string>graph_id_<hex_string> bigintBIGINT 11 interne graph_id colonneinternal graph_id column
$node_id_<hex_string>$node_id_<hex_string> NVARCHARNVARCHAR 00 Nœud externe node_id colonneExternal node node_id column

Colonnes implicites dans un tableau de bordImplicit columns in an edge table

Nom de la colonneColumn Name Type de donnéesData Type is_hiddenis_hidden CommentaireComment
graph_id_<hex_string>graph_id_<hex_string> bigintBIGINT 11 interne graph_id colonneinternal graph_id column
$edge_id_<hex_string>$edge_id_<hex_string> NVARCHARNVARCHAR 00 externe edge_id colonneexternal edge_id column
from_obj_id_<hex_string>from_obj_id_<hex_string> INTINT 11 interne à partir du nœud object_idinternal from node object_id
from_id_<hex_string>from_id_<hex_string> bigintBIGINT 11 interne à partir du nœud graph_idInternal from node graph_id
$from_id_<hex_string>$from_id_<hex_string> NVARCHARNVARCHAR 00 externe à partir du nœud node_idexternal from node node_id
to_obj_id_<hex_string>to_obj_id_<hex_string> INTINT 11 interne au nœud object_idinternal to node object_id
to_id_<hex_string>to_id_<hex_string> bigintBIGINT 11 interne au nœud graph_idInternal to node graph_id
$to_id_<hex_string>$to_id_<hex_string> NVARCHARNVARCHAR 00 externe au nœud node_idexternal to node node_id

Fonctions systèmeSystem Functions

Les fonctions intégrées suivantes sont ajoutées.The following built-in functions are added. Ces fonctionnalités aideront les utilisateurs extraire des informations à partir des colonnes générées.These will help users extract information from the generated columns. Notez que, ces méthodes ne validera pas l’entrée de l’utilisateur.Note that, these methods will not validate the input from the user. Si l’utilisateur spécifie un non valide sys.node_id la méthode extraire la partie appropriée et renvoyez-le.If the user specifies an invalid sys.node_id the method will extract the appropriate part and return it. Par exemple, OBJECT_ID_FROM_NODE_ID prendra un $node_id comme entrée et retourne l’object_id de la table, ce nœud appartient.For example, OBJECT_ID_FROM_NODE_ID will take a $node_id as input and will return the object_id of the table, this node belongs to.

IntégréBuilt-in DescriptionDescription
OBJECT_ID_FROM_NODE_IDOBJECT_ID_FROM_NODE_ID Extraire l’object_id à partir d’un node_idExtract the object_id from a node_id
GRAPH_ID_FROM_NODE_IDGRAPH_ID_FROM_NODE_ID Extraire le graph_id à partir d’un node_idExtract the graph_id from a node_id
NODE_ID_FROM_PARTSNODE_ID_FROM_PARTS Construire un node_id à partir d’un object_id et un graph_idConstruct a node_id from an object_id and a graph_id
OBJECT_ID_FROM_EDGE_IDOBJECT_ID_FROM_EDGE_ID Extraire object_id à partir de edge_idExtract object_id from edge_id
GRAPH_ID_FROM_EDGE_IDGRAPH_ID_FROM_EDGE_ID Extraire l’identité à partir de edge_idExtract identity from edge_id
EDGE_ID_FROM_PARTSEDGE_ID_FROM_PARTS Construire edge_id de object_id et identitéConstruct edge_id from object_id and identity

Informations de référence sur Transact-SQLTransact-SQL reference

Découvrez le Transact-SQLTransact-SQL extensions introduites dans SQL Server et de la base de données SQL Azure, qui activer la création et l’interrogation des objets graphiques.Learn the Transact-SQLTransact-SQL extensions introduced in SQL Server and Azure SQL Database, that enable creating and querying graph objects. Les extensions de langage de requête vous aider à la requête et parcourent le graphique à l’aide de la syntaxe d’art ASCII.The query language extensions help query and traverse the graph using ASCII art syntax.

Instructions de langage de définition (DDL) de donnéesData Definition Language (DDL) statements

TâcheTask Article connexeRelated Article RemarquesNotes
CREATE TABLECREATE TABLE CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL) CREATE TABLE est désormais étendue pour prendre en charge la création d’une table en tant que nœud ou AS EDGE.CREATE TABLE is now extended to support creating a table AS NODE or AS EDGE. Notez que le tableau de bord peut ou ne peut pas avoir tous les attributs définis par l’utilisateur.Note that an edge table may or may not have any user-defined attributes.
ALTER TABLEALTER TABLE ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL) Les tables de nœuds et d’arêtes peuvent être modifiées de la même façon qu’une table relationnelle, en utilisant le ALTER TABLE.Node and edge tables can be altered the same way a relational table is, using the ALTER TABLE. Les utilisateurs peuvent ajouter ou modifier les colonnes définies par l’utilisateur, les index ou contraintes.Users can add or modify user-defined columns, indexes or constraints. Toutefois, comme la modification des colonnes graphiques internes, $node_id ou $edge_id, entraîne une erreur.However, altering internal graph columns, like $node_id or $edge_id, will result in an error.
CREATE INDEXCREATE INDEX CREATE INDEX (Transact-SQL)CREATE INDEX (Transact-SQL) Les utilisateurs peuvent créer des index sur les pseudo colonnes et les colonnes définies par l’utilisateur dans les tables de nœuds et d’arêtes.Users can create indexes on pseudo-columns and user-defined columns in node and edge tables. Tous les types d’index sont pris en charge, y compris les index columnstore en cluster et non-cluster.All index types are supported, including clustered and non-clustered columnstore indexes.
CRÉER DES CONTRAINTES D’ARÊTECREATE EDGE CONSTRAINTS EDGE CONSTRAINTS (Transact-SQL)EDGE CONSTRAINTS (Transact-SQL) Les utilisateurs peuvent maintenant créer les contraintes d’arête sur des tableaux de bord pour appliquer la sémantique spécifique et également de maintenir l’intégrité des donnéesUsers can now create edge constraints on edge tables to enforce specific semantics and also maintain data integrity
DROP TABLEDROP TABLE DROP TABLE (Transact-SQL)DROP TABLE (Transact-SQL) Les tables de nœuds et d’arêtes peuvent être supprimés de la même façon qu’une table relationnelle, en utilisant le DROP TABLE.Node and edge tables can be dropped the same way a relational table is, using the DROP TABLE. Toutefois, dans cette version, il n’existe aucune contrainte pour s’assurer qu’aucun bords ne pointent vers un nœud supprimé et suppression en cascade des bords, après la suppression d’un nœud ou d’une table de nœud n’est pas pris en charge.However, in this release, there are no constraints to ensure that no edges point to a deleted node and cascaded deletion of edges, upon deletion of a node or node table is not supported. Il est recommandé que si une table de nœud est supprimée, les utilisateurs déposer des bords connectés aux nœuds de cette table de nœud manuellement pour maintenir l’intégrité du graphique.It is recommended that if a node table is dropped, users drop any edges connected to the nodes in that node table manually to maintain the integrity of the graph.

Instructions de langage de manipulation de donnéesData Manipulation Language (DML) statements

TâcheTask Article connexeRelated Article RemarquesNotes
INSERTINSERT INSERT (Transact-SQL)INSERT (Transact-SQL) Insertion dans une table de nœud n’est pas différent de l’insertion dans une table relationnelle.Inserting into a node table is no different than inserting into a relational table. Les valeurs de $node_id colonne est générée automatiquement.The values for $node_id column is automatically generated. Tentative d’insertion d’une valeur dans $node_id ou $edge_id colonne entraîne une erreur.Trying to insert a value in $node_id or $edge_id column will result in an error. Les utilisateurs doivent fournir des valeurs pour $from_id et $to_id colonnes lors de l’insertion dans une table d’arêtes.Users must provide values for $from_id and $to_id columns while inserting into an edge table. $from_id et $to_id sont le $node_id valeurs des nœuds qui se connecte un bord donné.$from_id and $to_id are the $node_id values of the nodes that a given edge connects.
SuppressionDELETE DELETE (Transact-SQL)DELETE (Transact-SQL) Données à partir des tables de nœuds ou d’arêtes peuvent être supprimées dans la même façon, car elle est supprimée à partir de tables relationnelles.Data from node or edge tables can be deleted in same way as it is deleted from relational tables. Toutefois, dans cette version, il n’existe aucune contrainte pour s’assurer qu’aucun bords ne pointent vers un nœud supprimé et suppression en cascade des bords, après la suppression d’un nœud n’est pas pris en charge.However, in this release, there are no constraints to ensure that no edges point to a deleted node and cascaded deletion of edges, upon deletion of a node is not supported. Il est recommandé que chaque fois qu’un nœud est supprimé, tous les bords qui se connectés à ce nœud sont également supprimés, pour préserver l’intégrité du graphique.It is recommended that whenever a node is deleted, all the connecting edges to that node are also deleted, to maintain the integrity of the graph.
UPDATEUPDATE UPDATE (Transact-SQL)UPDATE (Transact-SQL) Valeurs des colonnes définies par l’utilisateur peuvent être mis à jour à l’aide de l’instruction de mise à jour.Values in user-defined columns can be updated using the UPDATE statement. La mise à jour les colonnes de graphique interne, $node_id, $edge_id, $from_id et $to_id n’est pas autorisée.Updating the internal graph columns, $node_id, $edge_id, $from_id and $to_id is not allowed.
MERGEMERGE MERGE (Transact-SQL)MERGE (Transact-SQL) MERGE instruction est prise en charge sur une table de nœuds ou d’arêtes.MERGE statement is supported on a node or edge table.

Instructions de requêteQuery Statements

TâcheTask Article connexeRelated Article RemarquesNotes
SELECTSELECT SELECT (Transact-SQL)SELECT (Transact-SQL) Nœuds et les bords sont stockées en interne en tant que tables, par conséquent, la plupart des opérations prises en charge sur une table dans SQL Server ou de la base de données SQL Azure est pris en charge sur les tables de nœuds et d’arêtesNodes and edges are stored as tables internally, hence most of the operations supported on a table in SQL Server or Azure SQL Database are supported on the node and edge tables
MATCHMATCH MATCH (Transact-SQL)MATCH (Transact-SQL) CORRESPONDANCE intégré est introduit pour prendre en charge les critères spéciaux et traversée par le biais du graphique.MATCH built-in is introduced to support pattern matching and traversal through the graph.

Limitations et problèmes connusLimitations and known issues

Il existe certaines limitations sur les tables de nœuds et d’arêtes dans cette version :There are certain limitations on node and edge tables in this release:

  • Les tables temporaires locales ou globales ne peut pas être des tables de nœuds ou d’arêtes.Local or global temporary tables cannot be node or edge tables.
  • Types de tables et des variables de table ne peut pas être déclarées comme une table de nœuds ou d’arêtes.Table types and table variables cannot be declared as a node or edge table.
  • Impossible de créer des tables de nœuds et d’arêtes comme tables temporelles avec version gérée par le système.Node and edge tables cannot be created as system-versioned temporal tables.
  • Les tables de nœuds et d’arêtes ne peut pas être des tables optimisées en mémoire.Node and edge tables cannot be memory optimized tables.
  • Les utilisateurs ne peuvent pas mettre à jour le $from_id et $to_id colonnes d’un bord à l’aide d’instruction de mise à jour.Users cannot update the $from_id and $to_id columns of an edge using UPDATE statement. Pour mettre à jour les nœuds qui se connecte un bord, les utilisateurs devront insérer le nouveau bord pointant vers les nouveaux nœuds et supprimer des précédent.To update the nodes that an edge connects, users will have to insert the new edge pointing to new nodes and delete the previous one.
  • Entre la base de données les requêtes sur les objets graphiques ne sont pas pris en charge.Cross database queries on graph objects are not supported.

Étapes suivantesNext Steps

Pour vous familiariser avec la nouvelle syntaxe, consultez SQL Database de graphique - exempleTo get started with the new syntax, see SQL Graph Database - Sample