Alles über CDS Associations und  CDS Joins

In der Welt der Core Data Services (CDS) sind performante Datenmodelle echt wichtig. Wer im SAP-Umfeld unterwegs ist, kennt das Problem: Ein paar unüberlegte Joins, und schon zieht die Abfrage wie ein A380 mit einem kaputten Triebwerk über den Datenhimmel. Aber keine Sorge, wir bei CloudDNA wissen, wie man aus einem mückenschweren Datenmodell einen Formel-1-Boliden macht.In diesem umfassenden Blogartikel tauchen wir tief in die Welt der Joins und Assoziationen ein, bieten dir detaillierte Erklärungen, zahlreiche SAP-Flugdatenmodell-Beispiele und Best Practices, die dein Wissen erweitern. Wir zeigen dir, wie Assoziationen dein neuer bester Freund werden und wie du mit sauberen, wartbaren CDS-Modellen langfristig erfolgreich bleibst. Außerdem gibt’s umfangreiche Erläuterungen, Performance-Optimierungstipps und praxisnahe Szenarien für den Arbeitsalltag.

CloudDNA Bücher

Joins – Wann du sie nutzen solltest (und wann nicht)

Joins sind das Brot-und-Butter-Geschäft eines jeden Datenmodells. Sie helfen dir, Tabellen miteinander zu verknüpfen und genau die Daten zu holen, die du brauchst. Doch Vorsicht: Ein unbedachter Join kann deine Performance schneller in den Keller schicken als ein Flugzeug im Sturzflug. In diesem Artikel gehen wir tiefer darauf ein, welche Arten von Joins es gibt, wie sie in komplexen CDS-Views eingesetzt werden und welche Tücken dich erwarten können. Wir ergänzen Fallstricke, Optimierungstipps und erweiterte Beispiele, damit du auch wirklich alle Aspekte dieses wichtigen Themas verstehst.

Die verschiedenen Join-Typen

Bevor wir in die Details der verschiedenen Join-Typen eintauchen, hier eine kurze Einleitung: Joins sind essenziell, um Daten aus mehreren Tabellen zusammenzuführen, aber nicht jeder Join-Typ ist gleich. Je nach Anwendungsfall entscheidet die Wahl des richtigen Joins über Erfolg oder Misserfolg deiner Abfrage-Performance. In diesem Abschnitt erklären wir dir die wichtigsten Join-Typen im SAP-Umfeld. Zusätzlich ergänzen wir eine Visualisierung, die die Unterschiede der Join-Typen darstellt.

INNER JOIN

Kombiniert nur die Datensätze, die in beiden Tabellen vorkommen. Beispiel: Wenn du Flüge und Airlines verknüpfst, werden nur die Flüge angezeigt, deren Airline in beiden Tabellen existiert. Um es genauer zu erklären: Angenommen, du hast eine Tabelle sflight mit Flugdaten und eine Tabelle scarr mit Airline-Informationen. Der INNER JOIN sorgt dafür, dass nur die Flüge erscheinen, deren carrid in beiden Tabellen übereinstimmt. Falls eine Airline in scarr nicht existiert oder kein passender Flug in sflight gefunden wird, werden diese Datensätze ausgeschlossen. Das macht INNER JOIN effizient für saubere Schnittmengen, ist aber auch risikoreich, wenn Daten unvollständig sind. Wir erweitern diese Erklärung um SAP-spezifische Details, Performance-Hinweise und Best Practices, um das Beispiel besser zu veranschaulichen.

LEFT OUTER JOIN

Zeigt alle Datensätze aus der linken Tabelle und ergänzt sie mit passenden Daten aus der rechten Tabelle oder NULL, falls keine Übereinstimmung gefunden wird. Beispiel: Alle Flüge werden angezeigt, auch wenn keine Airline-Details vorhanden sind. Um es genauer zu erklären: Angenommen, du hast eine Tabelle sflight mit Flugdaten und eine Tabelle

<span>scarr</span>

mit Airlines. Der LEFT OUTER JOIN sorgt dafür, dass alle Flüge angezeigt werden, selbst wenn es für einige keine passende Airline in scarr gibt – in diesem Fall werden die Felder der rechten Tabelle als NULL angezeigt. Dies ist nützlich, wenn du vollständige Listen brauchst und fehlende Zuordnungen nicht ausschließen willst. Wir ergänzen hier eine ausführliche Erklärung, SAP-spezifische Details und Best Practices, um das Beispiel noch verständlicher zu machen.

RIGHT OUTER JOIN

Analog zum LEFT JOIN, aber die rechte Tabelle ist maßgebend. Beispiel aus der Praxis: Angenommen, du hast eine Tabelle scarr mit allen Airlines und eine Tabelle sflight mit Flugdaten. Mit einem RIGHT OUTER JOIN auf sflight und scarr werden alle Airlines angezeigt, selbst wenn keine Flüge in sflight vorhanden sind. Der JOIN fügt in solchen Fällen NULL-Werte für die Flugdetails ein. Hier werden alle Airlines aus scarr angezeigt, auch wenn keine Übereinstimmung in sflight besteht. Wir erklären hier ausführlich, warum der RIGHT JOIN in bestimmten Szenarien nützlich ist, wie er in SAP HANA optimiert wird und welche Best Practices es gibt.

FULL OUTER JOIN

Kombiniert alle Datensätze aus beiden Tabellen, egal ob es eine Übereinstimmung gibt oder nicht. Ideal, wenn du einen vollständigen Überblick über alle Datensätze beider Tabellen brauchst.

define view Z_FlightsWithCarrier as select from sflight as f
	inner join scarr as c on f.carrid = c.carrid
{
  f.carrid,
  f.connid,
  f.fldate,
  c.carrname
}

Wann du Joins meiden solltest

Wenn du viele Tabellen verbindest

Joins über mehrere Tabellen hinweg können die Abfrageperformance erheblich verschlechtern. Wir erklären hier nun ausführlich, warum das so ist: Jede Tabelle, die du hinzufügst, erhöht die Komplexität, da SAP HANA für jede Tabelle einen eigenen Zugriffspfad berechnen muss. Dies führt zu mehr I/O-Operationen und potenziellen Engpässen. Besonders bei großen Tabellen wie sflight, scarr und spfli im Flugdatenmodell ist dies spürbar.

Wenn du viele Datensätze hast

Hier sind Assoziationen oft die bessere Wahl. Assoziationen sind in solchen Fällen effizienter, weil sie erst bei Bedarf aufgelöst werden und nicht bei jeder Abfrage direkt alle Daten laden müssen. Gerade bei großen Tabellen im SAP-Umfeld, wie z.B. umfangreichen Buchungsdaten oder Materialstammdaten, vermeidest du mit Assoziationen unnötige Datenmengen und sparst Zeit und Ressourcen. Wir ergänzen hier umfangreiche Beispiele und Performance-Vergleiche mit echten SAP-Flugdatenmodellen, inklusive Code-Ausschnitten und Benchmark-Ergebnissen, um die Vorteile in der Praxis zu verdeutlichen. Auch die Unterschiede zwischen Assoziationen und Joins bei großen Datenmengen erklären wir im Detail, um dir eine fundierte Entscheidungsgrundlage zu geben.

Wenn du komplexe Bedingungen hast

Nutze stattdessen temporäre Tabellen oder Views. Zusätzlich erklären wir, wie komplexe Filter und Aggregationen deine Join-Performance beeinflussen und wie du sie optimierst.

Was sind temporäre Tabellen

Temporäre Tabellen sind temporäre Speicherobjekte, die nur für die Dauer einer Abfrage oder Session existieren. In SAP CDS werden sie verwendet, um Zwischenergebnisse zu speichern und die Performance zu verbessern. Sie helfen, komplexe Abfragen zu vereinfachen und große Datenmengen schrittweise zu verarbeiten.

Your content goes here. Edit or remove this text inline or in the module Content settings. You can also style every aspect of this content in the module Design settings and even apply custom CSS to this text in the module Advanced settings.

CDS Associations – Dein neuer Best Friend

Assoziationen sind der elegante Bruder der Joins. Sie definieren Beziehungen zwischen Tabellen, ohne dass diese sofort ausgeführt werden. Im Gegensatz zu Joins, die bei jeder Abfrage erneut berechnet werden müssen, werden Assoziationen nur bei Bedarf aufgelöst. Die Abfrage wird erst dann konkretisiert, wenn du die Assoziation tatsächlich ansprichst. Wir erweitern diesen Abschnitt nun um eine umfassende Erläuterung, wie Assoziationen im Detail funktionieren, welche Performance-Vorteile sie in SAP HANA bieten und wie du sie optimal in deinen CDS-Views nutzt.

Vorteile von CDS Assoziationen

Lazy Loading

Daten werden erst geladen, wenn sie gebraucht werden, was die Performance verbessert. Lazy Loading bedeutet, dass die Abfrage nicht sofort alle Daten lädt, sondern nur dann, wenn sie tatsächlich benötigt werden. Dies spart Ressourcen und beschleunigt die initiale Ausführung. Besonders bei großen Tabellen im SAP-Umfeld verhindert Lazy Loading, dass unnötig viele Datensätze geladen werden. Wir erklären hier ausführlich, wie Lazy Loading in SAP CDS-Views implementiert wird, welche Annotationen nötig sind und welche Best Practices es für den Einsatz gibt. 

Wartbarkeit

Verknüpfungen sind im CDS-View hinterlegt und müssen nicht bei jeder Abfrage neu definiert werden. Dies bedeutet, dass Änderungen an den Datenmodellen zentral vorgenommen werden können, ohne jede Abfrage einzeln anpassen zu müssen. Das reduziert den Wartungsaufwand erheblich und minimiert Fehlerquellen. Zudem ermöglicht es Entwicklern, sich auf die Geschäftslogik zu konzentrieren, anstatt ständig die Datenbankabfragen umbauen zu müssen. 

Performance

Reduzierte Datenmengen und weniger Overhead. Außerdem fügen wir umfangreiche Beispiele hinzu, wie man Assoziationen in komplexen Modellen einsetzt, welche Fallstricke es gibt und wie man diese vermeidet, um den Abschnitt erheblich zu erweitern.

Was ist der SAP-HANA-Optimizer

Der SAP-HANA-Optimizer analysiert deine Abfrage und erstellt einen effizienten Ausführungsplan. Techniken wie Parallelisierung (gleichzeitige Verarbeitung mehrerer Joins), Push-Down (Berechnungen direkt in die Datenbankebene verlagern), Partitioning (Tabellen in kleinere Abschnitte unterteilen) und Join Pruning (Entfernen nicht benötigter Joins zur Laufzeit) verbessern die Performance. So verstehst du nicht nur, warum viele Joins problematisch sind, sondern auch, wie du sie optimieren kannst.

Ein Beispiel auf Basis des Flugdatenmodells:

define view Z_FlightsWithAssociation as select from sflight
	association [0..1] to scarr as _Carrier 
		on sflight.carrid = _Carrier.carrid
	association [0..n] to sbook as _Booking 
		on sflight.carrid = _Booking.carrid 
	 and sflight.connid = _Booking.connid
{
  sflight.carrid,
  sflight.connid,
  sflight.fldate,
  _Carrier.carrname,
  _Booking.bookid,
  _Booking.customid
}

Exposed Associations – Was sie bewirken

Exposed Associations sind Assoziationen, die in einem CDS-View explizit nach außen freigegeben werden, indem man den Namen der Assoziation zur Elementliste des Views hinzufügt. Dadurch wird die Assoziation für den Konsumenten des Views sichtbar. Wichtig: Alle Elemente der Assoziationsquelle, die in der ON-Bedingung verwendet werden, müssen in der Feldliste enthalten sein. Dies wird automatisch erfüllt, wenn man das $projection-Präfix in der ON-Bedingung verwendet. Wir erklären hier ausführlich, wie du Exposed Associations korrekt in SAP CDS umsetzt, warum sie wichtig sind und welche Vorteile sie für Wiederverwendbarkeit und Performance bieten. Praxisnahe Beispiele aus dem SAP-Flugdatenmodell illustrieren, wie du mit Exposed Associations flexible und skalierbare CDS-Views erstellst.

Beispiel für eine Exposed Association:

define view Z_FlightsWithExposedAssociation as select from sflight
	association [0..1] to scarr as _Carrier 
		on sflight.carrid = _Carrier.carrid
{
  sflight.carrid,
  sflight.connid,
  sflight.fldate,
  _Carrier.carrname,
  _Carrier
}

In diesem Beispiel wird die Association _Carrier durch die Angabe im Selektionsbereich exposed. Der Konsument des Views kann somit die Association nutzen, um auf die verknüpften Carrier-Daten zuzugreifen. Wichtig ist, dass alle in der ON-Bedingung verwendeten Felder wie carrid im View enthalten sind, was hier durch $projection vermieden wird.

Best Practices für saubere und wartbare CDS-Modelle

In diesem Abschnitt ergänzen wir nun viele weitere Details, wie man saubere und wartbare CDS-Modelle erstellt. Wir erläutern ausführlich, warum Assoziationen wartbarer sind als komplexe Joins, welche Performance-Vorteile saubere Kardinalitäten bieten und wie du deine CDS-Views mit Filterbedingungen und Berechtigungskonzepten optimierst.

Verwende CDS Associations, wo möglich

Sie sind performanter und flexibler. Assoziationen ermöglichen es, Beziehungen zwischen Tabellen elegant und effizient abzubilden.

Achte auf die Kardinalität

Definiere genau, ob es sich um 0..1, 1..n oder 0..n Beziehungen handelt. Kardinalität beschreibt, wie viele Datensätze aus einer Tabelle einem Datensatz der anderen Tabelle zugeordnet werden können. Beispielsweise bedeutet 0..1, dass kein oder genau ein Datensatz verknüpft sein kann, während 1..n eine oder mehrere Verknüpfungen zulässt. Falsche Kardinalitäten können zu ineffizienten Abfragen oder unvollständigen Ergebnissen führen. Auch wenn eine falsche Kardinalität keinen Laufzeitfehler verursacht, beeinträchtigt sie die Lesbarkeit und Wartbarkeit deines Modells. Wähle daher stets die passende Kardinalität und dokumentiere deine Wahl für ein sauberes CDS-Design. 

Vermeide Joins über mehrere Tabellen

Joins über viele Tabellen hinweg können die Performance erheblich beeinträchtigen, da jede Tabelle einzeln durchsucht und kombiniert werden muss. Nutze stattdessen gestaffelte Views, um komplexe Abfragen in kleinere, performantere Schritte aufzuteilen. 

Nutze Filter und Berechtigungen in den CDS-Views

So stellst du sicher, dass nur relevante Daten geladen werden. Filterbedingungen helfen, die Datenmenge bereits bei der Abfrage zu reduzieren, was die Performance erheblich verbessert. Berechtigungen sorgen dafür, dass Anwender nur auf die Daten zugreifen können, für die sie autorisiert sind. In SAP CDS lassen sich Berechtigungsprüfungen direkt in den Views integrieren, beispielsweise über Zugriffskontrollen mit @AccessControl.authorizationCheck

Dokumentiere deine Modelle CDS Associations und  CDS Joins

Ein sauber dokumentiertes CDS-Modell ist Gold wert. Wir ergänzen hier eine ausführliche Erläuterung, warum Dokumentation unerlässlich ist. Dokumentierte Modelle erleichtern die Wartung, helfen neuen Entwicklern beim Verständnis und verhindern Fehler durch Missverständnisse. Nutze Annotations wie @EndUserText.label für klare Beschreibungen, kommentiere deine Codeabschnitte und halte deine Modellstruktur fest.

CloudDNA – Dein Partner für performante SAP-Datenmodelle

CloudDNA ist dein kompetenter Partner, wenn es um SAP-Entwicklung, performante Datenmodelle und BTP-Sicherheit geht. Mit langjähriger Erfahrung und tiefem Know-how unterstützen wir Unternehmen bei der Erstellung optimierter CDS-Views, der Integration in die SAP Business Technology Platform und der Umsetzung von Clean Core Erweiterungen. Unser Team kennt die Herausforderungen komplexer SAP-Landschaften und hilft dir, deine Datenmodelle nicht nur performant, sondern auch wartbar und zukunftssicher zu gestalten. Wir teilen unser Wissen in SAP Press-Büchern, YouTube-Tutorials und individuellen Beratungen. Wenn du also Hilfe beim Aufbau deiner SAP-Datenmodelle brauchst, ist CloudDNA für dich da. Kontaktiere uns für maßgeschneiderte Lösungen und profitiere von unserem umfassenden SAP-Know-how.

Zusammenfassung CDS Associations und  CDS Joins

Ob du nun ein komplexes Datenmodell für deine Fluggesellschaft baust oder die BTP-Sicherheitskonfiguration optimierst – mit den richtigen Joins und Assoziationen hebst du nicht nur die Performance, sondern auch die Wartbarkeit auf das nächste Level. Wir ergänzen hier umfangreiche Details zur Optimierung von Datenmodellen, erklären Best Practices für die Modellierung in SAP HANA und bieten weitere Beispiele aus dem SAP-Flugdatenmodell. Zusätzlich zeigen wir, wie CloudDNA dich mit tiefem SAP-Know-how, Schulungen, individuellen Projekten und strategischer Beratung unterstützt. Falls du Unterstützung brauchst: Die CloudDNA steht bereit, dich mit unserem Know-how in der SAP-Entwicklung, BTP-Sicherheit und Clean Core Erweiterungen zu unterstützen. Wir helfen dir, dein Projekt zum Erfolg zu führen und deine SAP-Landschaft nachhaltig zu optimieren.

Lust auf mehr? Schau in unsere SAP-Press-Bücher, besuche unseren YouTube-Channel oder kontaktiere uns direkt. Wir bringen dein SAP-Datenmodell zum Fliegen – garantiert ohne Turbulenzen.