Teilen über


Verwalten von Beziehungen in der Fabric API für GraphQL

Beziehungen transformieren Ihre GraphQL-API von einfachem Datenzugriff in ein leistungsfähiges Diagramm, das widerspiegelt, wie Ihre Geschäftsentitäten tatsächlich eine Verbindung herstellen. Anstatt Clients zu zwingen, mehrere Roundtrip-Aufrufe auszuführen und Daten manuell zusammenzuheften, ermöglichen Beziehungen es Ihnen, tief geschachtelte, verwandte Daten in einer einzigen Abfrage abzurufen – einen Kunden abzurufen, dessen Bestellungen, die Produkte in diesen Bestellungen und Produktkategorien auf einmal.

Ohne Beziehungen würde Ihre API isolierte Daten zurückgeben, die Clients selbst verknüpfen müssen. Mit Beziehungen definieren Sie diese Verbindungen einmal in Ihrem Schema, und GraphQL behandelt die Durchquerung automatisch. Beispielsweise kann eine Abfrage, die mit einem Produkt beginnt, durch Bestellungen navigieren, um alle Kunden zu finden, die sie gekauft haben, oder von einem Kunden zu beginnen, um alle Produkte anzuzeigen, die sie jemals bestellt haben – alles in einer effizienten Anforderung.

Die Fabric-API für GraphQL unterstützt drei Beziehungsmuster, die alle gängigen Datenmodellierungsszenarien abdecken:

  • 1:1 (1:1): Jeder Datensatz eines Typs bezieht sich auf genau einen Datensatz eines anderen Typs (Beispiel: Produkt → Produktkategorie, wobei jedes Produkt genau eine Kategorie hat)
  • 1:n (1:N):Jeder Datensatz in einem Typ bezieht sich auf mehrere Datensätze in einem anderen Typ (Beispiel: ProductCategory → Product, wobei jede Kategorie viele Produkte enthält)
  • Viele-zu-viele (M:N): Datensätze in beiden Typen können sich auf mehrere Datensätze im anderen Typ beziehen (Beispiel: SalesOrderHeader ↔ Produkt, wobei Bestellungen mehrere Produkte enthalten und Produkte in mehreren Bestellungen erscheinen)

Indem Sie diese Beziehungen in Ihrem GraphQL-Schema modellieren, erstellen Sie eine intuitive API, die Ihr Domänenmodell widerspiegelt und Clientanwendungscode erheblich vereinfacht.

Voraussetzungen

Bevor Sie Beziehungen erstellen, benötigen Sie Folgendes:

  • Mindestens zwei Typen, die im GraphQL-API-Schema definiert sind. Wenn Sie beispielsweise AdventureWorks-Beispieldaten verwenden, können Sie Typen wie Product, ProductCategory, , SalesOrderHeaderund SalesOrderDetail bereits aus Ihren Lakehouse- oder Warehouse-Tabellen erstellt haben. Wenn Sie noch keine Typen haben, sehen Sie Erstellen einer API für GraphQL in Fabric und Daten hinzufügen.

  • Übereinstimmende Felder (Fremdschlüssel) zwischen den Typen, die Sie verknüpfen möchten. Für eine 1:1- oder 1:n-Beziehung benötigen Sie ein gemeinsames Feld in beiden Typen, z. B. ProductCategoryID, das in sowohl in Product als auch in ProductCategory erscheint. Diese Felder dienen als Verbindungspunkte für die Beziehung.

  • Ein Verknüpfungstyp (Verknüpfungstabelle) für m:n-Beziehungen. Wenn Sie eine viele-zu-viele-Beziehung erstellen, benötigen Sie eine dritte Entität, die die beiden anderen verbindet. Wenn Sie zum Beispiel SalesOrderHeader und Product in eine n:n-Beziehung setzen möchten, benötigen Sie SalesOrderDetail als Verknüpfungstyp. Dieser Verknüpfungstyp muss Fremdschlüssel aufweisen, die auf beide Typen verweisen, die Sie in Beziehung setzen möchten (z.B. SalesOrderID und ProductID). Erfahren Sie mehr über m:n-Beziehungen.

Erstellen einer neuen 1:1-Beziehung

Eine 1:1-Beziehung verbindet zwei Typen, bei denen sich jeder Datensatz in einem Typ auf genau einen Datensatz im anderen Typ bezieht. Dies ist nützlich, wenn Sie verwandte Daten haben, die sich möglicherweise in derselben Tabelle befinden, aber aus Organisatorischen oder Leistungsgründen getrennt sind. Beispielsweise kann ein Product über ein ProductCategory Feld zu genau einem ProductCategoryID in Beziehung stehen.

Die folgenden Schritte zeigen, wie Sie eine 1:1-Beziehung erstellen:

  1. Wählen Sie im Bereich "Schema-Explorer " die Auslassungspunkte neben einem Typ und dann die Option "Beziehungen verwalten" aus. Der Bildschirm "Beziehungen verwalten" wird angezeigt.

    Screenshot, der zeigt, wo neue Beziehung im Bereich

  2. Wählen Sie Neue Beziehung aus. In diesem Beispiel erstellen wir eine neue 1:1-Beziehung zwischen dem Produkttyp und dem ProductCategory-Typ , basierend auf dem Feld "ProductCategoryID ", das in beiden Typen vorhanden ist. Wir wählen "Ein" für "Kardinalität" aus, wählen die Typen "Von" und "An" und dann die Felder "Von" und "An" für diese Beziehung aus.

    Screenshot mit Beispielen für Auswahlen für die fünf erforderlichen Felder für eine neue Beziehung.

Hinweis

Sie können mehrere Felder in den Auswahlfeldern "Von" und "An" auswählen. Mit diesem Feature können Sie Beziehungen erstellen, die mehrere Felder enthalten.

  1. Wählen Sie Beziehung aktualisieren aus. Ihre Liste der Beziehungen zeigt nun die neu erstellte Beziehung an.

  2. Wählen Sie das X in der oberen rechten Ecke aus, um den Bildschirm "Beziehungen verwalten" zu schließen.

1:1-, 1:n- und m:n-Beziehungen

Während 1:1-Beziehungen unkompliziert sind, verarbeiten 1:n- und n:n-Beziehungen komplexere Datenmuster, die in realen Anwendungen üblich sind. Der Prozess zum Erstellen dieser Beziehungen ähnelt 1:1, die Kardinalitätsauswahl bestimmt jedoch, wie GraphQL die Beziehung interpretiert und verfügbar macht.

1:n-Beziehungen (1:N)

Eine Eins-zu-viele-Beziehung verbindet einen einzelnen Datensatz in einem Typ mit mehreren Datensätzen in einem anderen Typ. Beispielsweise enthält ein einzelner ProductCategory Datensatz viele Product Datensätze, aber jeder Product gehört nur zu einer Kategorie.

Wenn Sie eine 1:n-Beziehung zwischen ProductCategory und Product erstellen möchten, wählen Sie eins zu viele als Kardinalität. Führen Sie dieselben Schritte wie bei 1:1-Beziehungen aus, aber die Kardinalitätseinstellung teilt GraphQL mit, dass eine Kategorie sich auf viele Produkte bezieht.

M:N-Beziehungen (M:N)

Eine m:n-Beziehung verbindet Datensätze, bei denen auf beiden Seiten mehrere verwandte Datensätze enthalten sein können. Beispielsweise kann ein SalesOrderHeader mehrere Product-Datensätze enthalten, und jedes Product kann in mehreren Anordnungen vorkommen. Für diese Beziehungen ist ein Verknüpfungstyp (Verknüpfungstabelle) erforderlich, um die Verbindungen zwischen den beiden Haupttypen zu speichern.

Um eine m:n-Beziehung zwischen SalesOrderHeader und Product zu erstellen, benötigen Sie den Verknüpfungstyp SalesOrderDetail. Dieser Verknüpfungstyp enthält Fremdschlüssel, die auf beide Typen verweisen, die Sie verknüpfen möchten.

Um die Viele-zu-Viele-Beziehung zu erstellen,

  1. Wählen Sie im Bereich "Schema-Explorer " die Auslassungspunkte neben einem Typ und dann die Option "Beziehungen verwalten" aus. Der Bildschirm "Beziehungen verwalten" wird angezeigt.
  2. Wählen Sie Neue Beziehung aus.
  3. Kardinalität: Wählen Sie "Many to Many " aus, und die zusätzlichen Felder für die Verknüpfung werden angezeigt. Screenshot des Dialogfelds
  4. Von Typ: Wählen Sie SalesOrderHeader aus (eine Seite der Beziehung)
  5. Verknüpfungstyp: Select SalesOrderDetail (die Verknüpfungstabelle, die Bestellungen mit Produkten verbindet)
  6. Aus Feld(er): Wählen Sie SalesOrderID (das Feld in SalesOrderHeader, das mit dem Verknüpfungstyp verknüpft ist)
  7. Verknüpfen von Feldern: Select SalesOrderID (das übereinstimmende Feld in SalesOrderDetail, das eine Verbindung mit SalesOrderHeader herstellt)
  8. So geben Sie Folgendes ein: Produkt auswählen (die andere Seite der Beziehung)
  9. Zu Feld(er): Wählen Sie ProduktID (das Feld in 'Produkt', das mit dem Verknüpfungstyp verbunden ist)
  10. Verknüpfen mit Feldern: Select ProductID (das übereinstimmende Feld in SalesOrderDetail, das eine Verbindung mit Product herstellt)

Das Schlüsselkonzept: Der Verknüpfungstyp (SalesOrderDetail) verfügt über zwei Fremdschlüssel – ein Schlüssel, der auf jeden der Typen zeigt, die Sie verknüpfen möchten. Die "Verknüpfung aus Feldern" und "Verknüpfen mit Feldern" sind beide Felder im Verknüpfungstyp, während "Von Feld(er)" und "Zu Feld(er)" in den verwandten Typen sind.

Einfachere Konfiguration für n:n-Beziehungen

Wenn Sie eine m:n-Beziehung erstellen, hängt das, was GraphQL automatisch generiert, davon ab, ob Ihr Verknüpfungstyp zusätzliche Felder neben den beiden Fremdschlüsseln hat.

Allgemeine Regel:

  • Wenn der Verknüpfungstyp zusätzliche Felder enthält, die über die Fremdschlüssel hinausgehen (am häufigsten), erstellt GraphQL vier Eins-zu-viele-Beziehungen, um den Verknüpfungstyp verfügbar zu machen. Dadurch können Sie auf diese zusätzlichen Felder in Ihren Abfragen zugreifen und zwischen Typen in beiden Richtungen navigieren.
  • Wenn der Verknüpfungstyp nur die beiden Fremdschlüssel aufweist (weniger häufig), erstellt GraphQL nur die direkte n:n-Beziehung. Sie können direkt zwischen den beiden Haupttypen abfragen, ohne auf den Verknüpfungstyp zu verweisen.

Verknüpfen des Typs mit zusätzlichen Feldern (typisches Szenario)

In den meisten realen Szenarien verfügt Ihr Verknüpfungstyp über Felder, die über die beiden Fremdschlüssel hinausgehen. Verbindungstabellen speichern in der Regel Informationen über die Beziehung selbst – nicht nur die Datensätze, sondern Details zur Beziehung.

Wenn Sie eine Viele-zu-Viele-Beziehung erstellen, generiert die API vier Beziehungen, die in Ihrer Beziehungsliste angezeigt werden. Warum vier? Da Sie bidirektionale Navigation zwischen allen drei Typen benötigen.

Wenn SalesOrderDetail beispielsweise zusätzliche Felder wie OrderQty, UnitPriceoder UnitPriceDiscount (über nur SalesOrderID und ProductIDhinaus ) enthält, werden diese vier Beziehungen im Portal angezeigt:

  • SalesOrderHeaderSalesOrderDetail (1:n): Beginnen Sie von einer Bestellung und listen Sie alle Positionen auf, um Mengen und Preise anzuzeigen.
  • SalesOrderDetailSalesOrderHeader (n:1): Beginnen Sie von einem Posten und navigieren Sie zurück, um zu erkennen, zu welcher Bestellung er gehört.
  • ProduktSalesOrderDetail (1:n): Starten Sie mit einem Produkt und sehen Sie alle Bestellungen, in denen es mit den jeweiligen Mengen vorkommt.
  • SalesOrderDetailProdukt (n:1): Beginnen Sie mit einem Artikel, und navigieren Sie zu sehen, welches Produkt bestellt wurde.

Diese vier Beziehungen bieten Ihnen vollständige Flexibilität, um von jedem Typ (SalesOrderHeader, Product oder SalesOrderDetail) zu beginnen und zu einem beliebigen anderen Typ zu navigieren, während Sie auf die zusätzlichen Felder OrderQty und UnitPrice zugreifen, die nur im Verknüpfungstyp vorhanden sind.

Verknüpfungstyp nur mit Fremdschlüsseln

Wenn SalesOrderDetail nur und enthält (und keine anderen Felder), erstellt die API zwei 1:n-Beziehungen, die im Portal sichtbar sind.

  • SalesOrderHeaderSalesOrderDetail (1:n)
  • ProductSalesOrderDetail (eins-zu-mehreren)

In diesem Szenario können Abfragen direkt von Bestellungen zu Produkten (und umgekehrt) navigieren, ohne explizit auf den Verknüpfungstyp in Ihren GraphQL-Abfragen zu verweisen. Der Verknüpfungstyp ist vorhanden, fügt aber keinen Wert hinzu, da er keine zusätzlichen Daten enthält.

Beziehung löschen

Sie können Beziehungen entfernen, die nicht mehr benötigt oder falsch erstellt wurden. Durch das Löschen einer Beziehung werden die Typen selbst nicht gelöscht– sie entfernt nur die Verbindung zwischen ihnen.

So löschen Sie eine Beziehung:

  1. Wählen Sie im Bereich "Schema-Explorer" die Auslassungspunkte neben einem Typ mit Beziehungen aus, und wählen Sie dann "Beziehungen verwalten" aus. Der Bildschirm "Beziehungen verwalten " wird mit allen Beziehungen für den ausgewählten Typ angezeigt.

  2. Aktivieren Sie das Kontrollkästchen neben jeder Beziehung, die Sie löschen möchten. Sie können mehrere Beziehungen auswählen, um sie in einem einzigen Vorgang zu löschen.

  3. Klicken Sie auf der Symbolleiste auf Löschen.

  4. Bestätigen Sie den Löschvorgang, wenn Sie dazu aufgefordert werden. Die Beziehung wird aus Ihrem GraphQL-Schema entfernt.

Tipp

Wenn Sie eine m:n-Beziehung erstellt haben und sie entfernen möchten, denken Sie daran, dass Sie alle vier Beziehungen löschen müssen (oder zwei Beziehungen, wenn der Verknüpfungstyp nur Fremdschlüssel enthält), die erstellt wurden. Jede Beziehung wird als separater Eintrag in der Beziehungsliste angezeigt.