Die bisherige Serie:

  1. SQL Server-Diagrammdatenbanken – Teil 1: Einführung
  2. SQL Server-Diagrammdatenbanken – Teil 2: Abfragen von Daten in einer Diagrammdatenbank
  3. SQL Server-Diagrammdatenbanken – Teil 3: Ändern von Daten in einer Diagrammdatenbank
  4. SQL Server-Diagrammdatenbanken – Teil 4: Arbeiten mit hierarchischen Daten in einer Diagrammdatenbank
  5. SQL Server-Diagrammdatenbanken – Teil 5: Importieren relationaler Daten in eine Diagrammdatenbank

Mit der Veröffentlichung von SQL Server 2017 hat Microsoft Unterstützung für Diagrammdatenbanken hinzugefügt, um Datensätze, die komplexe Entitätsbeziehungen enthalten, besser verarbeiten zu können, z. B. den von einer Social-Media-Site generierten Datentyp. Diagrammdatenbanken verwenden dieselben Tabellenstrukturen wie herkömmliche SQL Server-Datenbanken und unterstützen dieselben Tools und T-SQL-Anweisungen, enthalten jedoch auch Funktionen zum Speichern und Navigieren in komplexen Beziehungen.

Dieser Artikel ist der erste in einer Reihe über SQL Server Graph-Datenbanken. Der Artikel führt Sie in grundlegende Diagrammkonzepte ein und zeigt, wie Sie Diagrammtabellen mit SQL Server Management Studio (SSMS) und einer lokalen Instanz von SQL Server 2017 erstellen und füllen. In den folgenden Artikeln werden wir uns mit dem Abfragen einer Diagrammdatenbank und dem Ändern ihrer Daten befassen, aber für diesen Artikel beginnen wir mit den Grundlagen.

Die SQL Server-Diagrammdatenbank

Die Diagrammdatenbanken von SQL Server können den Prozess der Modellierung von Daten vereinfachen, die komplexe Viele-zu-Viele- und hierarchische Beziehungen enthalten. Im Grunde genommen ist eine Diagrammdatenbank eine Sammlung von Knoten und Kanten, die zusammenarbeiten, um verschiedene Arten von Beziehungen zu definieren. Ein Knoten ist eine Entität wie eine Person oder ein Ort. Eine Kante ist eine Beziehung zwischen zwei Entitäten. Beispielsweise, Eine Beziehung könnte zwischen einem Ort wie Toledo und einer Person namens Chris bestehen, wer lebt in Toledo. Chris und Toledo sind die Entitäten, und ‚lives in‘ ist die Beziehung zwischen den beiden.

Eine Knotentabelle in SQL Server ist eine Sammlung ähnlicher Entitäten, und eine Kantentabelle ist eine Sammlung ähnlicher Beziehungen. Um zu verstehen, wie dies funktioniert, Betrachten Sie das in der folgenden Abbildung gezeigte Diagrammmodell, das auf einem fiktiven Forum für Fischliebhaber basiert. Das Modell enthält drei Knoten (FishSpecies, FishLover und FishPost) und drei Kanten (Likes, Posts und LinksTo).

Die Rechtecke stellen die Knoten dar, und die Pfeile, die die Knoten verbinden, stellen die Kanten dar, wobei die Pfeile in Richtung der Beziehung zeigen. Beispielsweise können die gleichen Kanten eine der folgenden Beziehungen definieren:

  • Ein Fischliebhaber mag eine Fischart.
  • Ein Fischliebhaber mag einen Beitrag über Fisch.
  • Ein Fischliebhaber mag einen anderen Fischliebhaber.

Sie können alle drei Beziehungen als Daten in einer einzelnen Kantentabelle in der Diagrammdatenbank darstellen, wobei jede Beziehung in einer eigenen Zeile steht. Eine Knotentabelle funktioniert ähnlich, außer dass sie für jede Entität eine Zeile enthält. Sie können auch Eigenschaften mit Knoten und Kanten verknüpfen. Eine Eigenschaft ist ein Schlüsselwertattribut, das als Spalte in einer Knoten- oder Kantentabelle definiert ist. Beispielsweise kann der Knoten FishSpecies Eigenschaften zum Speichern der allgemeinen und wissenschaftlichen Namen jeder Art enthalten. Die Eigenschaften werden als benutzerdefinierte Spalten in der Tabelle FishSpecies erstellt. Wenn Sie eine Knotentabelle erstellen, müssen Sie mindestens eine Eigenschaft einschließen.

Für die meisten Vorgänge funktionieren Knoten- und Kantentabellen wie jede andere benutzerdefinierte SQL Server-Tabelle. Obwohl es einige Einschränkungen gibt, z. B. die Möglichkeit, temporäre Tabellen oder Tabellenvariablen nicht als Knoten— oder Kantentabellen zu deklarieren, werden Sie meistens feststellen, dass die Arbeit mit Diagrammtabellen vertrautes Terrain ist.

Wenn die Dinge etwas unklar werden, liegt das an der Diagrammdatenbank selbst. Obwohl der Name darauf hindeutet, dass Sie einen neuen Datenbankobjekttyp erstellen, ist dies nicht der Fall. Eine Diagrammdatenbank ist lediglich ein logisches Konstrukt, das in einer benutzerdefinierten Datenbank definiert ist und nicht mehr als eine Diagrammdatenbank unterstützen kann. Die Existenz der Graph-Datenbank ist relativ transparent von außen und, zum größten Teil, ist nicht etwas, worüber Sie besorgt sein müssen. Wenn Sie mit Diagrammdatenbanken arbeiten, liegt Ihr Hauptaugenmerk auf den Diagrammtabellen und den darin enthaltenen Daten.

Im Allgemeinen bietet eine Diagrammdatenbank keine Funktionen, die Sie mit herkömmlichen relationalen Funktionen nicht erreichen können. Das Versprechen der Graphdatenbank liegt darin, bestimmte Datentypen effizienter organisieren und abfragen zu können. Microsoft empfiehlt, unter den folgenden Umständen die Implementierung einer Diagrammdatenbank in Betracht zu ziehen:

  • Sie müssen stark miteinander verbundene Daten und die Beziehungen zwischen diesen Daten analysieren.
  • Sie unterstützen Daten mit komplexen Viele-zu-Viele-Beziehungen, die sich ständig weiterentwickeln.
  • Sie arbeiten mit hierarchischen Daten, während Sie versuchen, durch die Einschränkungen des Datentyps HierarchyID zu navigieren.

Die Graph-Datenbankfunktionen von SQL Server sind vollständig in das Datenbankmodul integriert und nutzen Komponenten wie den Abfrageprozessor und das Speichermodul. Aufgrund dieser Integration können Sie Diagrammdatenbanken in Verbindung mit einer Vielzahl von Komponenten verwenden, darunter Columnstore-Indizes, Machine Learning Services, SSMS und verschiedene andere Funktionen und Tools.

Definieren von Diagrammknotentabellen

Um eine Diagrammdatenbank basierend auf dem in der vorherigen Abbildung gezeigten Modell zu erstellen, müssen Sie drei Knotentabellen und drei Kantentabellen erstellen. Microsoft hat die CREATE TABLE-Anweisung in SQL Server 2017 aktualisiert, um Optionen zum Definieren eines der beiden Tabellentypen einzuschließen. Wie bereits erwähnt, können Sie die Tabellen in beliebigen benutzerdefinierten Datenbanken erstellen. Für die Beispiele in diesem Artikel habe ich eine Basisdatenbank namens FishGraph erstellt, wie im folgenden T-SQL-Code gezeigt:

1
2
3
4
5
6

USE master;
GO
DATENBANK LÖSCHEN, FALLS VORHANDEN FishGraph;
GEHE ZU
DATENBANK ERSTELLEN FishGraph;
GEHE ZU

Wie Sie sehen, ist hier nichts Besonderes los. Sie erstellen die Datenbank wie jede andere benutzerdefinierte Datenbank. Sie müssen nichts Besonderes tun, um eine Diagrammdatenbank zu unterstützen.

Wenn Sie diese Beispiele selbst ausprobieren möchten, können Sie die FishGraph-Datenbank oder eine Datenbank Ihrer Wahl verwenden. Wie auch immer Sie sich entscheiden, der nächste Schritt besteht darin, die Knotentabelle FishSpecies mit der folgenden Anweisung CREATE TABLE zu erstellen:

1
2
3
4
5
6
7
8
9

USE FishGraph;
GO
DROP TABLE IF EXISTS FishSpecies;
GO
CREATE TABLE FishSpecies (
FishID INT IDENTITY PRIMÄRSCHLÜSSEL,
CommonName NVARCHAR(100) NICHT NULL,
ScientificName NVARCHAR(100) NOT NULL
) ALS KNOTEN;

Die Spaltendefinitionen sollten ziemlich einfach sein. Wichtig ist hier die AS NODE-Klausel, die Sie zum Erstellen einer Knotentabelle einschließen müssen. Wenn Sie diese Klausel angeben, fügt das Datenbankmodul der Tabelle zwei Spalten hinzu (auf die wir in Kürze eingehen werden) und erstellt einen eindeutigen, nicht gruppierten Index für eine dieser Spalten.

Sie können überprüfen, ob die Tabelle als Knotentabelle erstellt wurde, indem Sie das sys abfragen.tabellen anzeigen. Mit der Veröffentlichung von SQL Server 2017 hat Microsoft die Ansicht aktualisiert, um die Bitspalten is_node und is_edge einzuschließen. Wenn es sich bei der Tabelle um eine Knotentabelle handelt, wird der Spaltenwert is_node auf 1 und der Spaltenwert is_edge auf 0 gesetzt. Wenn eine Kantentabelle, werden die Werte umgekehrt. Im folgenden Beispiel wird die Ansicht verwendet, um zu bestätigen, dass die Tabelle FishSpecies korrekt definiert wurde:

1
2

WÄHLEN SIE is_node, is_edge AUS sys.tabellen
WHERE name = ‚Fischart‘;

Die SELECT-Anweisung gibt die in der folgenden Abbildung gezeigten Ergebnisse zurück, die angeben, dass FishSpecies als Knotentabelle erstellt wurde.

Microsoft hat auch das sys aktualisiert.spaltenansicht, um die Spalten graph_type und graph_type_desc einzuschließen. Sie können die Ansicht und die neuen Spalten verwenden, um mehr über die Fischartentabelle zu erfahren:

1
2
3

WÄHLEN SIE name, graph_type, graph_type_desc
AUS sys.spalten
WOBEI object_id = OBJECT_ID(‚FishSpecies‘);

Die folgende Abbildung zeigt die Spalten, die für die Tabelle FishSpecies erstellt wurden.

Wenn Sie eine Knotentabelle erstellen, fügt das Datenbankmodul die Spalten graph_id_<hex_string> und $node_id_<hex_string> hinzu und erstellt einen eindeutigen, nicht gruppierten Index für die Spalte $node_id. Das Datenbankmodul verwendet die erste Spalte für interne Vorgänge und stellt die zweite Spalte für den externen Zugriff zur Verfügung. Die Spalte $node_id speichert eine eindeutige Kennung für jede Entität, die Sie beim Abfragen der Daten anzeigen können. Dies ist die einzige Spalte der beiden, mit der Sie sich befassen müssen. Wenn Sie die Tabelle direkt abfragen würden, würden Sie nur die Spalte $node_id sehen, nicht die Spalte graph_id.

Die von sys zurückgegebenen Spalten graph_type und graph_type_desc.die Spaltenansicht ist spezifisch für die automatisch generierten Spalten in einer Diagrammtabelle. Die Spalten geben die Spaltentypen an, die das Datenbankmodul generiert hat. Der Typ wird durch einen vordefinierten numerischen Wert und die zugehörige Beschreibung angezeigt. Microsoft bietet nicht viele Einzelheiten zu diesen Codes und Beschreibungen, aber Sie können einige Details in der Microsoft Document SQL Graph-Architektur finden. Auch hier liegt Ihr Hauptanliegen in der Spalte $ node_id und den darin enthaltenen Daten.

Nachdem Sie Ihre Tabelle erstellt haben, können Sie mit dem Hinzufügen von Daten beginnen. Das Ausführen einer INSERT-Anweisung für eine Knotentabelle funktioniert wie jede andere Tabelle. Sie geben die Zielspalten und deren Werte an, wie im folgenden Beispiel gezeigt:

1
2
3
4
5
6
7
8
9
10
11

INSERT INTO FishSpecies (CommonName, ScientificName) VALUES
(‚Atlantic halibut‘, ‚Hippoglossus hippoglossus‘),
(‚Chinook salmon‘, ‚Oncorhynchus tshawytscha‘),
(‚European seabass‘, ‚Morone (Decentrarchus) labrax‘),
(‚Gizzard shad‘, ‚Dorosoma cepedianum‘),
(‚Japanese striped knife jaw‘, ‚Oplegnathus faciatus‘),
(‚ Northern pike‘, ‚Esox lucius‘),
(‚ Pazifischer Hering‘, ‚Clupea pallasi‘),
(‚ Regenbogenforelle‘, ‚Oncorhynchus mykiss‘),
(‚ Seezunge (Dover)‘, ‚Solea solea‘),
(‚ Weißer Bass‘, ‚Morone chrysops‘);

Natürlich können Sie jede Fischart hinzufügen, für die Sie eine besondere Vorliebe haben. Meine Entscheidungen hier waren völlig willkürlich. Wenn Sie sich jedoch an meine Daten halten und dann die Fischartentabelle abfragen, sollten Ihre Ergebnisse denen in der folgenden Abbildung ähneln.

Wie oben erwähnt, wird die Spalte graph_id nicht in den Ergebnissen angezeigt, die Spalte $ node_id jedoch mit automatisch generierten Werten. Das Datenbankmodul erstellt jeden Wert als JSON-Zeichenfolge, die den Typ (Knoten oder Kante), das Schema, die Tabelle und einen für jede Zeile eindeutigen BIGINT-Wert bereitstellt. Wie erwartet gibt das Datenbankmodul auch die Werte in den benutzerdefinierten Spalten zurück, genau wie eine typische relationale Tabelle.

Der nächste Schritt besteht darin, die FishLover-Knotentabelle mit dem folgenden T-SQL-Code zu erstellen und zu füllen:

1
2
3
4
5
6
7
8
9
10
11
12

DROP TABLE IF EXISTS FishLover;
GO
TABELLE ERSTELLEN FishLover (
FishLoverID INT IDENTITY PRIMÄRSCHLÜSSEL,
Benutzername NVARCHAR(50) NOT NULL,
) ALS KNOTEN;
IN FishLover (Benutzername) WERTE EINFÜGEN
(‚powerangler‘),
(‚ lingerie98‘),
(‚ süchtig‘),
(‚ deepdive‘),
(‚ underwatercasey‘);

Die Tabelle enthält nur zwei benutzerdefinierte Spalten – FishLoverID und UserName —, aber Sie können beliebig viele Spalten definieren. Je nach Art der Anwendung können Sie beispielsweise Vor- und Nachnamen, Kontaktinformationen und andere Details angeben. Nachdem Sie die Tabelle erstellt haben, können Sie eine Abfrage ausführen, um die Daten zu überprüfen. Ihre Ergebnisse sollten denen in der folgenden Abbildung ähnlich aussehen.

Sie können dann die gleichen Schritte ausführen, um die FishPost-Tabelle zu erstellen und zu füllen, Indem Sie den gewünschten Nachrichtentext übergeben:

1
2
3
4
5
6
7
8
9
10
11
12
13

DROP-TABELLE, WENN VORHANDEN FishPost;
GEHE ZU
TABELLE ERSTELLEN FishPost (
postId INT IDENTITY PRIMÄRSCHLÜSSEL,
Titel NVARCHAR(50) NICHT NULL,
messageText NVARCHAR(800) NICHT NULL
) ALS KNOTEN;
INSERT INTO FishPost (Title, messageText) VALUES
(‚Derjenige, der entkommen ist‘, ‚Unser Team ist verfügbar, bitte kontaktieren Sie uns. Aeneas Vorteil vorbehalten Bedürfnisse.‘),
(‚ Eine Studie über Fische‘, ‚penatibus venenatis, nascetur ridiculus mus.‘),
(‚ Haken, Linie und Platinen ‚, ‚Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.‘),
(‚ So viele Fische, so wenig Zeit‘, ‚Nullam dictum felis eu pede mollis pretium. Ganzzahl tincidunt.‘),
(‚ Mein Lieblingsfisch‘, ‚Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim.‘);

Die folgende Abbildung zeigt die Ergebnisse, die Sie sehen würden, wenn Sie sich an die Lorem Ipsum-Daten halten würden.

Das ist alles, um Ihre Knotentabellen zu erstellen und zu füllen. Mit Ausnahme der AS NODE-Klausel in der CREATE TABLE-Anweisung ist fast alles andere wie gewohnt.

Definieren von Diagrammkantentabellen

Das Erstellen einer Kantentabelle ähnelt dem Erstellen einer Knotentabelle, mit der Ausnahme, dass Sie die AS EDGE-Klausel anstelle der AS NODE-Klausel angeben müssen. Um beispielsweise die Posts-Tabelle zu erstellen, verwenden Sie die folgende CREATE TABLE-Anweisung:

1
2
3
4
5

DROP-TABELLE, WENN VORHANDEN.;
GEHE ZU
Tabelleneinträge ERSTELLEN (
ImportantFlag BIT NOT NULL DEFAULT 0
) ALS RAND;

Die Tabellendefinition ähnelt einer Knotentabelle, außer dass sie keine Primärschlüsselspalte enthält (und natürlich die AS EDGE-Klausel verwendet). In diesem Fall ist ein Primärschlüssel nicht erforderlich, aber wenn Sie irgendwann feststellen, dass Sie einen Primärschlüssel benötigen, können Sie sicherlich einen hinzufügen. (Sie werden in Kürze sehen, warum Primärschlüssel für die Knotentabellen nützlich sind.)

Beachten Sie, dass die Tabellendefinition auch die ImportantFlag-Spalte enthält. Ich habe dies hauptsächlich aufgenommen, um zu demonstrieren, dass Sie Ihrer Edge-Tabelle benutzerdefinierte Spalten hinzufügen können, genau wie bei Knotentabellen. Es ist jedoch nicht ungewöhnlich, eine Edge-Tabelle ohne benutzerdefinierte Spalten zu erstellen, im Gegensatz zu einer Knotentabelle, die mindestens eine benutzerdefinierte Spalte enthalten muss.

Nachdem Sie die Kantentabelle erstellt haben, können Sie überprüfen, ob sie korrekt definiert wurde, indem Sie das sys abfragen.tabellenansicht, wie Sie zuvor gesehen haben:

1
2

WÄHLEN SIE is_node, is_edge AUS sys.tabellen
WHERE name = ‚Beiträge‘;

Wenn Sie alles richtig gemacht haben, sollten Ihre Ergebnisse wie in der folgenden Abbildung aussehen.

Sie können auch das sys abfragen.tabellenansicht zum Überprüfen der Spaltendetails, genau wie zuvor:

1
2
3

WÄHLEN SIE name, graph_type, graph_type_desc
AUS sys.spalten
WOBEI object_id = OBJECT_ID(‚Posts‘);

Die folgende Abbildung zeigt die auf meinem System zurückgegebenen Ergebnisse.

Wie Sie sehen, fügt das Datenbankmodul einer Edge-Tabelle acht Spalten hinzu und nicht die beiden, die Sie bei Knotentabellen gesehen haben. Beschreibungen der einzelnen Spaltentypen finden Sie im Dokument SQL Graph Architecture. Die meisten dieser Spalten werden vom Datenbankmodul für interne Vorgänge verwendet. Sie müssen sich hauptsächlich mit den folgenden drei Spalten befassen:

  • Die Spalte $edge_id_<hex_string> identifiziert jede Beziehung eindeutig.
  • Die Spalte $from_id_<hex_string> speichert den Wert $node_id, der der Entität in der Tabelle zugeordnet ist, aus der die Beziehung stammt.
  • Die Spalte $to_id_<hex_string> speichert den Wert $node_id, der der Entität in der Tabelle zugeordnet ist, in der die Beziehung endet.

Wie bei der Spalte $node_id in einer Knotentabelle generiert das Datenbankmodul automatisch Werte für die Spalte $edge_id. Sie müssen jedoch den Spalten $from_id und $to_id Werte hinzufügen, um eine Beziehung zu definieren. Um zu demonstrieren, wie dies funktioniert, beginnen wir mit einem einzelnen Datensatz:

1
2
3

IN Posts EINFÜGEN ($from_id, $to_id) WERTE (
(WÄHLEN SIE $node_id VON FishLover WHERE FishLoverID = 1),
( WÄHLEN SIE $ node_id VON FishPost WO postId = 3));

Die INSERT-Anweisung definiert eine Beziehung in der Posts-Tabelle zwischen einer FishLover-Entität, deren FishLoverID-Wert 1 ist, und einer FishPost-Entität, deren postId-Wert 3 ist. Beachten Sie, dass Sie die Aliase $ node_id, $ from_id und $to_id verwenden können, um auf die Zielspalten zu verweisen, ohne die hexadezimalen Zeichenfolgen erstellen zu müssen.

Um der Spalte $from_id Daten hinzuzufügen, müssen Sie den Wert $node_id angeben, der der Entität FishLover zugeordnet ist. Eine Möglichkeit, diesen Wert abzurufen, besteht darin, eine Unterabfrage einzuschließen, die auf die Entität abzielt, wobei der Primärschlüsselwert verwendet wird. Sie können den gleichen Ansatz für die Spalte $from_id .

Das Einfügen der Daten auf diese Weise zeigt, warum es nützlich ist, den Knotentabellen Primärschlüssel hinzuzufügen, für die Kantentabellen jedoch nicht. Die Primärschlüssel in den Knotentabellen erleichtern die Bereitstellung des Werts $ node_id für die INSERT-Anweisung erheblich.

Wenn Sie nun die Posts-Tabelle abfragen, sollten Ihre Ergebnisse ähnlich denen in der folgenden Abbildung aussehen.

Die Tabelle sollte die neue Beziehung enthalten, wobei ImportantFlag standardmäßig auf 0 gesetzt ist. Sie können nun mit den folgenden INSERT-Anweisungen einige weitere Zeilen hinzufügen:

1
2
3
4
5
6
7
8
9
10
11
12

IN Posts EINFÜGEN ($from_id, $to_id) WERTE (
(WÄHLEN SIE $node_id VON FishLover WHERE FishLoverID = 3),
( WÄHLEN SIE $node_id AUS FishPost WOBEI postId = 2));
IN Posts EINFÜGEN ($from_id, $to_id) WERTE (
(WÄHLEN SIE $node_id VON FishLover WO FishLoverID = 2),
( WÄHLEN SIE $ node_id VON FishPost WO postId = 5));
INSERT INTO Posts ($from_id, $to_id, ImportantFlag) WERTE (
(WÄHLEN SIE $node_id VON FishLover WO FishLoverID = 5),
( WÄHLEN SIE $node_id AUS FishPost WOBEI postId = 4), 1);
INSERT INTO Posts ($from_id, $to_id, ImportantFlag) VALUES (
(SELECT $node_id FROM FishLover WHERE FishLoverID = 4),
( WÄHLEN SIE $ node_id VON FishPost WO postId = 1), 1);

Beachten Sie, dass die letzten beiden INSERT-Anweisungen auch einen Wert für die ImportantFlag-Spalte bereitstellen. Wenn Sie die Posts-Tabelle abfragen, sollten Ihre Ergebnisse jetzt alle fünf Zeilen enthalten.

Der nächste Schritt besteht darin, die Likes-Tabelle mit dem folgenden T-SQL-Code zu erstellen und zu füllen:

1
2
3
4
5
6
7
8
9
10
11
12

DROP TABLE IF EXISTS Likes;
GO
CREATE TABLE Likes AS EDGE;
INSERT INTO Likes ($from_id, $to_id) VALUES (
(SELECT $node_id FROM FishLover WHERE FishLoverID = 3),
( WÄHLEN SIE $node_id AUS FishSpecies WOBEI FishID = 8));
INSERT INTO Likes ($from_id, $to_id) WERTE (
(WÄHLEN SIE $node_id VON FishLover WO FishLoverID = 5),
( WÄHLEN SIE $ node_id VON FishPost WO postId = 4));
INSERT INTO Likes ($from_id, $to_id) WERTE (
(WÄHLEN SIE $node_id VON FishLover WO FishLoverID = 1),
( WÄHLEN SIE $node_id VON FishLover WO FishLoverID = 4));

Sie können natürlich beliebige Beziehungen definieren. Der wichtige Punkt, den Sie hier beachten sollten, ist, dass Sie nicht auf einen Satz von Knoten beschränkt sind. Beispielsweise erstellt die erste INSERT-Anweisung eine Beziehung zwischen FishLover und FishSpecies, die zweite Anweisung erstellt eine Beziehung zwischen FishLover und FishPost und die dritte Anweisung erstellt eine Beziehung zwischen FishLover und FishLover. Dies gibt uns die in der folgenden Abbildung gezeigten Abfrageergebnisse.

Sie können den gleichen Ansatz verwenden, wenn Sie die LinksTo-Tabelle erstellen und auffüllen:

1
2
3
4
5
6
7
8
9
10
11
12

DROP TABLE WENN VORHANDEN LinksTo;
GO
CREATE TABLE LinksTo AS EDGE;
INSERT INTO LinksTo ($from_id, $to_id) VALUES (
(SELECT $node_id FROM FishPost WHERE postId = 2),
( WÄHLEN SIE $node_id AUS FishSpecies WOBEI FishID = 6));
INSERT INTO LinksTo ($from_id, $to_id) VALUES (
(SELECT $node_id FROM FishPost WHERE postId = 4),
( WÄHLEN SIE $node_id VON FishLover WO FishLoverID = 1));
FÜGEN SIE IN LinksTo ($from_id, $to_id) WERTE EIN (
(WÄHLEN SIE $node_id AUS FishPost WHERE postId = 3),
( WÄHLEN SIE $ node_id VON FishPost WO postId = 5));

Die folgende Abbildung zeigt, wie die Daten nach dem Hinzufügen zur Tabelle aussehen sollten, vorausgesetzt, Sie haben das Beispiel befolgt.

Mit einer Diagrammdatenbank können Sie eine Vielzahl von Beziehungen zwischen Ursprungs- und Endknoten hinzufügen. Sie können auch problemlos Änderungen am Diagrammmodell vornehmen. Beispielsweise können Sie eine FishRecipes-Knotentabelle zum Speichern der Fischrezepte hinzufügen, die Benutzer im Forum veröffentlichen.

Vorwärts mit Diagrammdatenbanken

Da Microsoft die Diagrammdatenbankfunktionen als Teil des SQL Server-Datenbankmoduls enthält, können Sie sie problemlos ausprobieren, ohne Komponenten installieren oder neu konfigurieren zu müssen. Das Beste ist, dass Sie dieselben Tools und Prozeduren verwenden können, die Sie schon immer verwendet haben, um Knoten- und Kantentabellen zu erstellen und zu füllen. In den folgenden Artikeln erfahren Sie, wie Sie Diagrammdaten abfragen und ändern und wie Sie mit hierarchischen Daten arbeiten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.