Ansicht
Dokumentation

ABENCDS_SIMPLE_ASSOCIATION_V2 - CDS SIMPLE ASSOCIATION V2

ABENCDS_SIMPLE_ASSOCIATION_V2 - CDS SIMPLE ASSOCIATION V2

TXBHW - Original Tax Base Amount in Local Currency   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- CDS-View-Entität, ASSOCIATION

... ASSOCIATION $[ [min..max] $] TO target $[AS _assoc$] ON cds_cond
                $[ WITH DEFAULT FILTER cds_cond $] ...


Zusätze:

1. ... [min..max]

2. ... AS _assoc

3. ... ON cds_cond

4. ... WITH DEFAULT FILTER cds_cond

Wirkung

Definition einer CDS-Assoziation des Namens _assoc in einer SELECT-Anweisung einer CDS-View-Entität. Eine CDS-Assoziation assoziiert die aktuelle CDS-View-Entität mit einer ON-Bedingung cds_cond als Assoziationsquelle mit dem Assoziationsziel target. Das Assoziationsziel target kann eine DDIC-Datenbanktabelle, eine andere CDS-View-Entität, eine CDS-Projektionsview, eine , eine Tabellenfunktion, eine Hierarchie, eine abstrakte Entität, oder eine Custom-Entität sein. Wenn target eine nicht-SQL-CDS-Entität ist, schränkt dies die Verwendung der CDS-Assoziation ein.

Verwendung von Assoziationen in der SELECT-Liste: Alle Anwendungsfälle einer CDS-Assoziation sind im Abschnitt CDS DDL - CDS-Assoziationen und Joins beschrieben.

Assoziationen und Joins: In einigen Fällen wird eine CDS-Assoziation intern in ein Join umgewandelt. Alle Anwendungsfälle von CDS-Assoziationen und Informationen zu den Joins, die auf der Datenbank angelegt wurden, finden Sie im Abschnitt CDS DDL - CDS-Assoziationen und Joins.

Der automatisch generierte Join-Typ kann durch die Angabe eines anderen Join-Typs in den Attributen eines Pfadausdrucks geändert werden, siehe Abschnitt CDS DDL - path_expr, join_type.

Einschränkungen

  • CDS-Assoziationen, deren Assoziationsziel eine CDS-Projektionsview ist, können nicht in Pfadausdrücken verwendet werden. Es ist auch nicht möglich, ein Feld aus dem Assoziationsziel zur Elementliste hinzuzufügen.

Hinweise

  • In einer SELECT-Anweisung einer CDS-View-Entität können CDS-Assoziationen und Join-Ausdrücke gemeinsam verwendet werden. Ein Pfadausdruck kann sogar aus einer Mischung aus Joins und Assoziationen bestehen. Beim Zugriff werden die Assoziationen und Joins zusammengeführt.
  • Für CDS-Assoziationen in mit Mengenoperatoren vereinigten SELECT-Anweisungen gelten spezielle Regeln.
  • Bei der Verwendung von CDS-Assoziationen sollten zyklische Abhängigkeiten vermieden werden, um Probleme bei der Massenaktivierung von CDS-Entitäten zu vermeiden.
  • Eine Selbstassoziation, bei der das Assoziationsziel gleich der Assoziationsquelle ist, kann in der CDS-View-Entität, in der sie definiert ist, nicht als Join definiert werden. Deswegen ist die Verwendung einer Selbstassoziation an einer Position, an der ein Join generiert wird, nicht erlaubt.

Beispiel

Die im Folgenden gezeigte CDS-View-Entität DEMO_SALES_CDS_INV_HEADER gibt Informationen zur Kundenfaktura zurück und arbeitet mit den DDIC-Datenbanktabellen DEMO_SO_INV_HE, DEMO_SALES_ORDER, DEMO_SALES_BUPA, und DEMO_SALES_SO_I.

Es werden zwei CDS-Assoziationen definiert:

  • _buyer steht für einen Join zwischen der aktuellen View und dem Assoziationsziel DEMO_SALES_BUPA.
  • _invoice_items steht für einen Join zwischen der aktuellen View und dem Assoziationsziel DEMO_SALES_SO_I.

Die in der ON-Bedingung verwendeten Assoziationsquelle-Felder, buyer_id und so_key, sind Teil der SELECT-Liste.

  • Die CDS-Assoziation _buyer ist nicht in der SELECT-Liste exponiert und kann nur in Pfadausdrücken der aktuellen SELECT-Anweisung verwendet werden. Wegen der Kardinalität [1..1] kann sie in der WHERE-Bedingung angegeben werden.
  • Auf die CDS-Assoziation _invoice_items wird nicht in Pfadausdrücken der aktuellen SELECT-Anweisung zugegriffen. Sie wird aber in der SELECT-Liste exponiert und kann damit in Pfadausdrücken anderer CDS-Views verwendet werden. Wegen der Kardinalität [1..*] kann sie nicht in einer WHERE-Bedingung angegeben werden.

In einem ABAP-Programm kann mit einer einfachen SELECT-Anweisung von auf die CDS-View-Entität zugegriffen werden.

SELECT id, birth_name, family_name
       FROM demo_sales_cds_inv_header
       INTO TABLE @DATA(itab).

Die Komplexität der eigentlichen Query ist für den Anwendungsprogrammierer transparent in der CDS-View-Entität verschalt. Während des Zugriffs wird der durch die CDS-Assoziation _invoice_items definierte Join zwischen DEMO_SO_INV_HE und DEMO_SALES_SO_I nicht gebildet, da in keinem Pfadausdruck auf ihn zugegriffen wird.

Die zuvor gezeigte CDS-View-Entität DEMO_SALES_CDS_INV_HEADER wird als Datenquelle in der Definition der CDS-View-Entität DEMO_SALES_CDS_SO_ITEM verwendet. Diese Datenquelle wird für den Zugriff auf die exponierte CDS-Assoziation _invoice_items verwendet. In dieser View wird auf die Elemente der CDS-Assoziation zugegriffen. Es gibt visuelle Hinweise darauf, dass es sich dabei um ein Ergebnis eines Joins handelt. Dieser Join zwischen DEMO_SALES_CDS_INV_HEADER und DEMO_SALES_SO_I wird bei Aktivierung der CDS-View-Entität DEMO_SALES_CDS_SO_ITEM angelegt. Ein Zugriff auf die andere CDS-Assoziation _buyer der CDS-View-Entität DEMO_SALES_CDS_INV_HEADER ist nicht möglich.

Zusatz 1

... [min..max]

Wirkung

Definiert die Kardinalität des Assoziationsziels einer mit CDS-Assoziation ASSOCIATION definierten CDS-View-Entität. Die eckigen Klammern [ ] sind Teil der Syntax. Für min und max sind positive ganze Zahlen inklusive 0 oder ein Stern (*) wie folgt möglich:

  • max darf nicht 0 sein.
  • Ein Stern * für max bedeutet beliebig viele Zeilen.
  • min kann weggelassen werden und wird dann auf 0 gesetzt.
  • min darf nicht * sein.
  • Für eine CDS-Assoziation, die in einer WHERE-Bedingung verwendet wird, muss für max 1 angegeben sein.

Wenn die Kardinalität nicht explizit definiert wird, wird implizit eine Kardinalität "zu 1" ([min..1]) verwendet.

Die Angabe der Kardinalität dient zum einen der Dokumentation der Semantik des Datenmodells, wird zum anderen aber auch von manchen Datenbanksystemen für Optimierungen verwendet. Auf solchen Datenbanksystemen erhalten Left-Outer-Joins (LEFT OUTER JOIN), die bei der Ausprägung eines Pfadausdrucks entstehen, bei einer expliziten oder impliziten Kardinalität "zu 1" einen Zusatz TO ONE und bei anderen Kardinalität einen Zusatz TO MANY. Diese Zusätze wirken wie bei ihrer expliziten Angabe bei einem LEFT OUTER JOIN. D.h. es wird versucht eine Optimierung auszuführen und das Ergebnis kann undefiniert sein, wenn die Ergebnismenge nicht der Kardinalität entspricht.

Hinweise

  • Um undefiniertes und plattformabhängiges Verhalten zu vermeiden, sollte die Kardinalität immer passend zu den zu lesenden Daten definiert werden.
  • Die Angabe der Kardinalität wird von der Syntaxprüfung für Pfadangaben in der CDS DDL von CDS oder in ausgewertet. Eine unpassende Kardinalität führt in der Regel zu einer Warnung von der Syntaxprüfung.

Beispiel

Falsche Angabe der Kardinalität einer CDS-Assoziation. Die folgende CDS-View-Entität verknüpft die Datenbanktabellen SCARR und SPFLI in einer CDS-Assoziation _spfli ohne explizite Angabe der Kardinalität. Die implizit gesetzte Kardinalität ist "zu 1". Bei Verwendung der CDS-Assoziation in einer Pfadangabe der SELECT-Liste wird diese auf manchen Datenbanksystemen, wie z.B. der SAP-HANA-Datenbank, als Left-Outer-Join mit dem impliziten Zusatz TO ONE implementiert. Die tatsächliche Kardinalität der Daten ist aber TO MANY.

Das Programm DEMO_CDS_WRONG_CARDINALITY_1 greift mit unterschiedlichen SELECT-Anweisungen auf die View zu. Auf Datenbanksystemen, die versuchen zu optimieren, wie z.B. die SAP-HANA-Datenbank, geben die beiden Zugriffe eine unterschiedliche Anzahl von Zeilen zurück, was eventuell unerwartet ist.

Beispiel

Richtige Angabe der Kardinalität einer CDS-Assoziation. Die folgende CDS-View-Entität verknüpft die Datenbanktabellen SCARR und SPFLI in einer CDS-Assoziation _spfli und gibt dabei explizit die Kardinalität an. Bei Verwendung der CDS-Assoziation in einer Pfadangabe der SELECT-Liste wird diese auf manchen Datenbanksystemen, wie z.B. der SAP-HANA-Datenbank, als Left-Outer-Join mit dem impliziten Zusatz TO MANY implementiert, was auch der tatsächlichen Kardinalität der Daten entspricht.

Das Programm DEMO_CDS_EXPLICIT_CARD_1 greift mit unterschiedlichen SELECT-Anweisungen auf die View zu. Die beiden Zugriffe sollten auf allen Datenbanksystemen die gleiche Anzahl von Zeilen zurückgeben.

Zusatz 2

... AS _assoc

Wirkung

Definition den Namen _assoc einer CDS-Assoziation Falls kein expliziter Name mit AS definiert wird, wird _assoc implizit auf den Namen des Assoziationsziels gesetzt. Der Name _assoc muss den Namensregeln für Bezeichner folgen.

Hinweis

Als Namenskonvention wird für den Namen einer CDS-Assoziation als erstes Zeichen ein Unterstrich _ empfohlen.

Zusatz 3

... ON cds_cond

Wirkung

Für die Angabe der ON-Bedingung gelten folgende Regeln:

  • Feldern der Assoziationsquelle muss der Name der Datenquelle vorangestellt werden. Wenn ein Aliasname zugeordnet wurde, muss dieser als Präfix verwendet werden.
  • Den Feldern des Assoziationsziels muss der Name der CDS-Assoziation vorangestellt werden (durch einen Punkt getrennter Präfix _assoc).
  • Feldern, die in der SELECT-Liste der aktuellen View-Entität aufgeführt sind muss $projection vorangestellt werden.
  • Wenn der Präfix $projection einen Pfadausdruck, ein Literal, oder einen Ausdruck der SELECT-List referenziert, dann kann die aktuelle CDS-Assoziation nicht in der SELECT-Liste exponiert werden, um ungültige Join-Ausdrücke zu vermeiden.
  • Wenn die CDS-Assoziation in der SELECT-Liste der aktuellen SELECT-Anweisung exponiert wird, müssen die Felder der Assoziationsquelle, die in der ON-Bedingung angegeben sind, auch in der SELECT-Liste aufgeführt sein. Dadurch wird sichergestellt, dass ein Join-Ausdruck aus der CDS-Assoziation gebaut werden kann (bei Verwendung in einem Pfadausdruck).

Es gelten die folgenden Regeln für die Operanden und Syntax der ON-Bedingung:

  • Alle relationalen Operatoren sind erlaubt. Dies bedeutet, dass alle Vergleichsoperatoren sowie BETWEEN, LIKE, IS [NOT] NULL und IS [NOT] INITIAL erlaubt sind.
  • Die Booleschen Operatoren NOT, AND und OR sind erlaubt.
  • lhs kann ein Feld einer der beiden Datenquellen data_source der CDS-Assoziation sein. Wenn als Operator ein Vergleichsoperator verwendet wird, kann lhs auch ein untypisiertes Literal sein.
Typisierte Literale werden aktuell in dieser Position nicht unterstützt
Typisierte Literale werden aktuell in dieser Position nicht unterstützt
  • Pfadausdrücke sind nicht erlaubt.
  • CDS-DDL-Ausdrücke sind nicht erlaubt.

Zusatz 4

... WITH DEFAULT FILTER cds_cond

Wirkung

Definiert eine Standardfilterbedingung für einen Pfadausdruck.

  • Wenn bei Verwendung der CDS-Assoziation in einem Pfadausdruck keine Filterbedingung angegeben ist, wird die mit DEFAULT FILTER angegebene Bedingung cds_cond als Filterbedingung verwendet und in eine erweiterte Bedingung für den Join umgesetzt . Für die Standardfilterbedingung gelten die gleichen Regeln wie für eine als Attribut angegebene Filterbedingung.
  • Wenn bei Verwendung der CDS-Assoziation in einem Pfadausdruck eine Filterbedingung angegeben ist, wird diese statt der Standardfilterbedingung verwendet.

Hinweis

Bei der Auswertung einer mit [min..max] angegebenen Kardinalität in der Syntaxprüfung wird die Standardfilterbedingung zusätzlich zur ON-Bedingung berücksichtigt.






General Material Data   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 27793 Date: 20240523 Time: 183415     sap01-206 ( 312 ms )