Domänenmodelle definieren

Objective

After completing this lesson, you will be able to grundlegende Domänenmodelle mit Core Data Services erfassen

Grundprinzipien von CDS-Modellen

Die Rolle von Core Data Services

Core Data Services (CDS) sind ein grundlegendes Konzept in CAP. Sie bieten die Möglichkeit, Datenmodelle und Servicemodelle deklarativ zu erfassen.

Sehen Sie sich das Video an, um den modellbasierten Ansatz zu verstehen.

In dieser Lektion konzentrieren wir uns auf Domänenmodelle. Servicemodelle werden in der nächsten Lektion behandelt.

Die Natur von Modellen

CDS-Modelle werden in Core Schema Notation (CSN) dargestellt. CSN (ausgesprochen wie "Saison") ähnelt dem JSON-Schema, geht jedoch über die Funktionen von JSON hinaus, um vollständige Entity-Relationship-Modelle und Erweiterungen zu erfassen.

Sehen Sie sich das Video an, um einen Überblick über die Quell- und Zielformate der CDS-Modelle zu erhalten.

In dieser Schulung definieren wir Modelle in .cds-Dateien.

Domänenentitäten

Wie bereits erwähnt, schauen wir uns nun an, wie Domänenmodelle mit CDL angelegt werden. Dazu legen wir im Ordner db des CAP-Projekts eine Datei mit der Erweiterung .cds an. Der Name der Datei ist beliebig, ein allgemeiner Dateiname ist z.B. schema.cds.

Zunächst geben wir eine einzelne Domänenentität namens Autoren in der Datei an (siehe Abbildung Eine einfache Domänenentität).

Domänenentitäten sind strukturierte Typen mit benannten und typisierten Elementen, die Datenmengen darstellen, die mit üblichen CRUD-Operationen gelesen und bearbeitet werden können. Bei der Übersetzung in Persistenzmodelle werden Entitäten zu Tabellen.

Hinweis

Namenskonventionen: Es wird empfohlen, Entitätsnamen in Großbuchstaben zu schreiben. Verwenden Sie auch die Pluralform für Entitätsnamen (z. Autoren). Beginnen Sie Elemente mit einem Kleinbuchstaben (z.B. Name).

Um die Elemente zu typisieren, wird CDS mit einem kleinen Satz eingebauter Typen ausgeliefert. Eine Liste der eingebauten Typen finden Sie in der CDS-Dokumentation.

Die in der Abbildung verwendete Syntax entity Authors ist äquivalent zu define entity Authors. Das Schlüsselwort define ist also optional.

Verwenden Sie das Schlüsselwort key , um ein oder mehrere Elemente anzugeben, die den Primärschlüssel einer Entität bilden.

Hinweis

Bevorzugen Sie einfache, technische Primärschlüssel, die nur aus einem einzigen Feld bestehen. Verwenden Sie ID als Namen für dieses einzelne Schlüsselfeld, und geben Sie ihn mit dem eingebauten Datentyp UUID ein. Primärschlüsselelemente vom Typ UUID werden beim INSERT automatisch gefüllt.

Namensräume

Sie können Namensräume definieren, die automatisch auf alle relevanten Namen in einer Datei angewendet werden. Im gezeigten Beispiel wird dem Entitätsnamen Autoren der Namensraum com.sap.learning vorangestellt, was com.sap.learning.Authors als vollständigen Entitätsnamen ergibt. Namensräume sind nur Präfixe – darüber hinaus gibt es nichts Besonderes. Namensräume sind optional. Verwenden Sie sie, wenn Ihre Modelle in anderen Projekten wiederverwendet werden könnten. Andernfalls können Sie auf sie verzichten.

Hinweis

Der Ansatz des umgekehrten Domänennamens funktioniert bei der Auswahl von Namensräumen gut.

Benutzerdefinierte Typen

Sie können benutzerdefinierte Typen für Elemente in Entitätsdefinitionen deklarieren. Bei den benutzerdefinierten Typen kann es sich um einfache Typen handeln, die von einem der eingebauten Typen, strukturierten Typen oder Assoziationen abgeleitet werden. Hier werden einfache Typen und strukturierte Typen behandelt. Assoziationen werden später in der Learning Journey behandelt.

Einfache Typen

In der Abbildung Beispiel für einen einfachen Typ wird ein einfacher Typ mit dem Namen NoOfBooks definiert. Er basiert auf dem eingebauten Datentyp Integer. Das bedeutet, dass sie, wo immer NoOfBooks verwendet wird, im Wesentlichen einen Integer -Wert darstellt.

Die angezeigte Entität Dokumentenmappen hat ein Bestandselement, das mit dem Typ NoOfBooks typisiert ist. Das bedeutet, dass der Datentyp dieses Elements im Wesentlichen Integerist.

Die Definition

Code Snippet
1
type NoOfBooks : Integer;
die in der Abbildung verwendet wird, entspricht Folgendem:
Code Snippet
1
define type NoOfBooks : Integer;
Das Schlüsselwort define ist also optional.

Notiz

Benutzerdefinierte Typen können die semantische Ausdruckskraft Ihrer Modelle erhöhen. Vermeiden Sie jedoch eine übermäßige Verwendung solcher Typen. Sie sind wertvoll, wenn Sie ein angemessenes Maß an Wiederverwendung haben. Ohne Wiederverwendung werden Ihre Modelle nur schwieriger zu lesen und zu verstehen, da Sie immer nach den relevanten Typdefinitionen suchen müssen.

Strukturierte Typen

Strukturierte Typen sind benutzerdefinierte Datentypen, die ein oder mehrere zugehörige Elemente unter einem einzelnen Typ kombinieren. Sie ermöglichen es, komplexe Datenstrukturen anzulegen und sie innerhalb von Entitäten zu verwenden.

Die in der Abbildung „Beispiel für einen strukturierten Typ" gezeigte Entität „Bücher" hat ein Preiselement vom Typ Price, bei dem es sich um einen separat definierten strukturierten Typ handelt.

Der Typ Price hat zwei Elemente: amount des eingebauten Typs Decimal und Währung des eingebauten Typs String mit einer maximalen Länge von 3 Zeichen.

Hinweis

Namenskonventionen: Es wird empfohlen, Typnamen wie Entitätsnamen in Großbuchstaben zu schreiben. Verwenden Sie jedoch im Gegensatz zu Entitätsnamen die Singularform für Typnamen (z. Preis). 

Aufzählungen

Aufzählungen (kurz Enumerationen) können verwendet werden, um Code lesbarer und selbsterklärend zu machen, da sie es ermöglichen, kryptische Werte durch Symbole in der Anwendungslogik zu ersetzen.

Sie können Aufzählungswerte für einen Typ als durch Semikola getrennte Liste von Symbolen mit zugeordneten entsprechenden Werten angeben. Bei Zeichenkettentypen ist die Zuweisung von tatsächlichen Werten optional; wenn weggelassen, sind die tatsächlichen Werte die Zeichenketten-Gegenstücke der Symbole.

Die Entität Dokumentenmappen in der Abbildung Beispiel für Enums enthält ein Element namens Genre vom Typ Genre, bei dem es sich um einen benutzerdefinierten Typ mit Aufzählungswerten handelt.

Der Typ Genre basiert auf dem eingebauten Typ Integer , was bedeutet, dass jedes Symbol in der Aufzählung einem Integer -Wert entspricht.

Die Enumeration Genre enthält zwei Symbole: fiction, die Integer value 1 entspricht, und non_fiction, die Integer value 2 entspricht.

Modelle werden kompiliert

DDL-Dateien generieren

Wenn Sie cds watch im Terminal ausführen, um einen Server zu starten, wird Ihr Domänenmodell, das im Ordner db des Projekts definiert ist, automatisch in ein Persistenzmodell übersetzt und in der konfigurierten Datenbank implementiert. Das bedeutet, dass entsprechende SQL-DDL-Anweisungen auf der Grundlage Ihres CDS-Modells generiert und ausgeführt werden.

Sie können diese SQL-DDL-Anweisungen auch manuell mit dem folgenden Befehl im Terminal generieren:

Code Snippet
1
cds compile <models> [<options>]
Eine detaillierte Beschreibung dieses Befehls erhalten Sie, indem Sie
Code Snippet
1
cds compile ?
im Terminal.

Um ein SQL-DDL-Skript für ein Domänenmodell zu generieren, das in einer Datei namens schema.cds im Ordner db des CAP-Projekts enthalten ist, führen Sie den folgenden Befehl im Wurzelverzeichnis des Projekts aus:

Code Snippet
1
cds compile db/schema.cds --to sql

Das SQL-DDL-Skript in der Abbildung „Kompiliertes CDS-Modell" wurde auf diese Weise generiert.

Hinweis

Anstatt den obigen Befehl im Terminal einzugeben, können Sie auch den folgenden Eintrag im Kontextmenü der .cds-Datei auswählen: CDS PreviewPreview as sql. Dies erzeugt die gleiche Ausgabe wie der Kommandozeilenbefehl.

Sehen Sie sich das Video an, um die Regeln zu verstehen, die für die generierte SQL-DDL-Ausgabe gelten.

Später sehen wir, dass projizierte Entitäten als Views generiert werden. Wir werden auch sehen, dass Fremdschlüsselfelder automatisch in generierten Datenbanktabellen angelegt werden, um bestimmte Assoziationen widerzuspiegeln, die zwischen Entitäten definiert werden können.

Demonstration & Übung: DomainModel erfassen

Notiz

Führen Sie als Übung die Schritt-für-Schritt-Anleitung in der folgenden Demonstration selbst im SAP Business Application Studio durch.

Sie finden den Quelltext aus der Simulation in den Branches main und 2_domain_model des folgenden GitHub-Repositorys:

https://github.com/SAP-samples/cap-development-learning-journey

Der Hauptzweig stellt die initiale Vorlage für die Demonstration bereit, während der Zweig 2_domain_model auch die in der Simulation angelegten Quellen enthält.

Detaillierte Informationen zum Inhalt des Repositorys und dessen Verwendung finden Sie hier.

Sehen Sie sich das Video an, um zu sehen, wie Sie ein Domänenmodell aufnehmen.