定义域模型

Objective

After completing this lesson, you will be able to 使用核心数据服务捕获基本域模型

CDS 模型的基本原则

核心数据服务的角色

核心数据服务 (CDS) 是 CAP 中的基本概念。它们提供了声明捕获数据模型和服务模型的方法。

观看视频,了解基于模型的方法。

在本课中,我们将重点介绍域模型。服务模型将在下一课中介绍。

模型的性质

CDS 模型以核心模式表示法 (CSN) 表示。CSN(发音类似于"季节")类似于 JSON 模式,但超出 JSON 的功能以捕获完全实体-关系模型和扩展。

观看视频以获取 CDS 模型的源格式和目标格式的概览。

在本学习中,我们将在 .cds 文件中定义模型。

域实体

如前所述,现在我们来看看如何使用 CDL 创建域模型。为此,我们在 CAP 项目的 db 文件夹中创建扩展名为 .cds 的文件。文件名是任意的,公用文件名为 schema.cds

首先,我们在 文件中指定一个名为 作者 的单个域实体(请参阅图 简单域实体 )。

域实体是具有命名和类型化元素的结构化类型,表示可以使用常规 CRUD 操作读取和操作的数据集。转换为持久性模型时,实体成为表。

提示

命名规则:建议将实体名称大写。同时对实体名称使用复数形式(例如作者)。以小写字母开头元素(例如,名称)。

为键入元素,CDS 附带了一小组内置类型。可在 CDS 文档中找到内置类型的列表。

图中使用的语法 entity Authors 等效于 define entity Authors。这意味着关键字 define 是可选的。

使用关键字 key 指定构成实体主键的一个或多个元素。

提示

首选仅由单个字段组成的简单、技术主键。使用标识作为此单个关键字段的名称并使用内置数据类型 UUID 键入。类型为 UUID 的主键元素在 INSERT 时自动填充。

命名空间

您可以定义自动应用于文件中所有相关名称的命名空间。在所示示例中,实体名称作者以命名空间 com.sap.learning 为前缀,从而生成 com.sap.learning.Authors 作为完整实体名称。命名空间只是前缀 - 除此之外,它们没有任何特殊之处。命名空间是可选的 - 如果您的模型可以在其他项目中重用,请使用它们;否则可以在没有它们的情况下执行此操作。

提示

反向域名方法非常适合选择命名空间。

自定义类型

您可以为实体定义中的元素声明自定义类型。自定义类型可以是简单类型,即派生自内置类型、结构化类型或关联之一。在此,我们将处理简单类型和结构化类型。关联将在稍后的学习旅程中介绍。

简单类型

NoOfBooks"简单类型示例"图中,定义了名为 的简单类型。它基于内置数据类型 Integer。这意味着无论在何处使用 NoOfBooks,它本质上都代表 Integer 值。

显示的 Books 实体具有使用 NoOfBooks 类型键入的 stock 元素。这意味着此元素的数据类型本质上是 Integer

定义

Code Snippet
1
type NoOfBooks : Integer;
图中使用的等效于以下内容:
Code Snippet
1
define type NoOfBooks : Integer;
这意味着关键字 define 是可选的。

注意

自定义类型可以提高模型的语义表达性。但是,请避免过度使用此类类型。如果您有适当的重用级别,则它们非常有用。如果不重用,模型将变得更加难以读取和理解,因为您始终必须查找相关类型定义。

结构化类型

结构化类型是自定义数据类型,将一个或多个相关元素组合在单一类型下。这样便可以创建复杂的数据结构并在实体中使用。

"结构化类型示例"图中显示的Books 实体具有类型为 Price的价格元素,该价格元素是单独定义的结构化类型。

Price 类型有两个元素:内置类型 Decimal的数量和内置类型 String的货币,最大长度为 3 个字符。

提示

命名规则:建议按照与实体名称相同的方式将类型名称大写。但是,与实体名称相反,对类型名称使用单数形式(例如,价格)。 

枚举

枚举(或简称为 enums)可用于使代码更加可读且易于说明,因为它们允许您使用应用程序逻辑中的符号替换加密值。

可以将类型的枚举值指定为以分号分隔的符号列表,并为其分配相应的值。对于字符串类型,实际值的分配是可选的;如果省略,则实际值是符号的字符串对应项。

"枚举示例"图中的 Books 实体有一个名为 genre 的元素,类型为 Genre,它是具有枚举值的自定义类型。

Genre 类型基于内置 Integer 类型,这意味着 枚举中的每个符号都对应一个 Integer 值。

Genre 枚举包含两个符号:虚构(与 Integer 值 1 对应)和 non_fiction(对应于 Integer 值 2)。

编译模型

生成 DDL 文件

在终端中执行 cds watch 启动服务器时,将在项目的 db 文件夹中定义的域模型自动转换为持久性模型并部署到已配置的数据库。这意味着基于 CDS 模型生成和执行相应的 SQL DDL 语句。

还可以在终端中使用以下命令手动生成这些 SQL DDL 语句:

Code Snippet
1
cds compile <models> [<options>]
通过执行 ,可获得此命令的详细描述。
Code Snippet
1
cds compile ?
在终端中。

要为 CAP 项目的 db 文件夹中名为 schema.cds 的文件中包含的域模型生成 SQL DDL 脚本,请在 项目的根目录中执行以下命令:

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

"编译的 CDS 模型"图中的 SQL DDL 脚本是通过这种方式生成的。

提示

除了在终端中输入上述命令外,您还可以在 .cds 文件的上下文菜单中选择以下条目: CDS 预览作为 sql 预览 。这将生成与命令行命令相同的输出。

观看视频,了解适用于生成的 SQL DDL 输出的规则。

稍后,我们将看到预计实体作为视图生成。我们还将看到在生成的数据库表中自动创建外键字段,以反映可在实体之间定义的特定关联。

演示和练习:捕获域模型

注意

在练习中,在 SAP Business Application Studio 中自行执行以下演示中的分步说明。

您可以在以下 GitHub 资源库的 main 分支和 2_domain_model 分支中找到模拟中的源代码:

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

分支为演示提供初始模板,而 2_domain_model 分支还包含模拟中创建的源。

有关资源库内容及其使用方法的详细信息,可在此处找到。

观看视频,了解如何捕获域模型。