SAP ABAP 中的外键

2025年3月17日 | 阅读 7 分钟

什么是外键?

  • 外键用于在 ABAP 数据字典中存在的不同表之间建立关系。
  • 我们可以使用外键为输入字段创建值检查。值检查是为了验证表中某些字段的值是否与不同表中其他字段的值匹配。
  • 包含外键的表称为外键表,而包含有效字段的另一个表称为值表。
  • 它通过将一个表的外键字段分配给另一个表的主键字段来连接两个表。
  • 下图显示了使用外键进行字段分配。
Foreign Key in SAP ABAP

以下是创建外键关系所需的两个要求

  • 用于验证的检查表中的字段必须是主键。
  • 值表中的外键字段和检查表中的主键字段必须具有相同的域,以确保这两个字段在数据类型和长度上兼容。

什么是主键?

主键是一个通过一个或多个列唯一标识表中行的字段。主键字段不能有 NULL 值或重复值。为了在两个表之间建立关系或链接表,第一个表(被引用表)的主键将被添加到另一个表(依赖表),它将成为第二个表的外键。

外键关系的概念

外键关系是为了**避免冗余和执行表验证**而在 ABAP 中关联或连接两个不同表的。

我们可以通过一个例子来理解它。假设有两个表;Table1(外键表或依赖表),Table2(检查表或被引用表)。表如下所示

Foreign Key in SAP ABAP

Table1 中的所有记录都已成功保存。下面我们将把记录保存在 Table2 中。

Foreign Key in SAP ABAP

正如我们所见,它有两个已成功保存的记录。但是如果我们尝试在此表中存储一个不在 Table1 中的新记录,例如 **5    Dept3       Assist. Manager**

然后由于外键关系,我们不允许在此表中添加此记录。

ABAP 中的表验证

表验证是一种技术,通过该技术我们可以限制表中无效的条目。在 ABAP 中执行表验证有两种方法

  • 字段级别验证:在此方法中,我们使用检查表概念执行字段级别验证。
  • 域级别验证:域级别验证可以通过使用该域的值表和域的固定值来限制域级别的条目。

注意:这里我们将通过检查表概念来理解字段级别验证。

检查表概念(字段级别验证)

在检查表概念中,我们考虑两个表;**检查表**和**外键表**。

检查表是存储主数据的表。

另一个表,它与检查表链接以验证其自身字段数据,称为**外键表**。值表是在域级别开发的,主要用于数据完整性和一致性。

在下图,我们可以理解检查表概念

Foreign Key in SAP ABAP

如上图所示,有两个表,T1(外键表)和 T2(检查表)。T2 表包含两个主键字段 Field5 和 Field6,T1 表包含两个外键字段 Field2 和 Field4,以及一个主键 Field1。

因此,我们可以将 T2 的主键(Field 5 和 Field 6)与 T1 的外键字段(Field 2 和 Field 3)连接起来。

这里需要记住一点,即所有链接字段的数据类型和长度应相同,这样才能维护外键关系。

输入检查如何工作?

可以通过理解以下概念来理解

触发外键

当我们在外键表中输入值时,外键会立即触发。外键的触发是通过 SELECT 语句实现的,该语句会检查检查表中匹配的行。如果表中没有匹配的行,它会显示一个标准消息,表明输入的值无效。除了 SELECT 语句,外键还可以通过功能键、按钮或菜单项来触发。

以下是与外键相关的其他一些概念

  • 复合外键
  • 泛型和常量外键
  • 外键的基数
  • 外键字段类型

复合外键

包含两个或多个字段的外键称为**复合外键**。要对复合外键应用检查,系统会将外键表中的两个字段与检查表中的两个字段进行比较。

定义复合外键的字段称为检查字段,它必须为空,否则复合外键将不会被触发。

泛型和常量外键

我们知道,要创建外键,检查表的所有主键都必须包含在外键关系中。但在某些情况下,我们只想针对选定的字段执行验证,而其他字段可以排除,因此对于这种情况,我们可以使用**泛型**外键。

我们还可以为检查表键字段分配常量值,这将允许我们针对**检查表的常量值**检查值。

外键的语义属性

可以通过定义**基数**和**外键字段类型**来更精确地指定两个表之间的外键关系。虽然提供此信息是可选的,并且不用于值检查。它主要用于文档目的。

外键的基数

外键的基数用于指定外键表中与检查表中对应值允许的行数。它是在创建外键关系时定义的。它可以表示为 **X: Y** 关系,其中 X 用于检查表,Y 用于外键表。

X 的可能值是

  • **X=1:**它指定检查表为外键表的每条记录都有一个记录。
  • **X=C:**它指定外键表中的记录可能不对应于检查表的任何记录。

Y 的值可以是

  • **Y=1:**它指定对于检查表的每条记录,外键表中只允许一条记录。
  • **Y=C:**它指定对于外键表,最多允许一条检查表记录。
  • **Y=N:**它指定对于检查表的每条记录,外键表至少应存在一条记录。
  • **Y=CN:**它指定对于检查表的每条记录,可以存在任意数量的外键表的独立记录。

**示例**:如果基数给定为 1:N,则表示对于外键表的每条记录,都存在一条记录。

外键字段类型

外键字段类型描述了外键表中外键字段的含义。以下是不同类型的外键字段

外键字段类型描述
  • 未指定
这可以选择为语义属性选项。但如果我们为维护视图、帮助视图或锁定对象定义外键,则需要选择以下选项之一。
  • 非键字段
它指定在外键表中,外键字段不是主键字段的一部分,也不能唯一标识外键表的行。
  • 键字段
它指定外键字段是外键表的主键字段的一部分。
  • 文本表的主键字段
它定义了外键表作为检查表的文本表,并包含值的语言描述。

在 ABAP 中创建外键

以下是在 ABAP 数据库表中创建外键关系的步骤

  • 通过输入事务码 SE11 或通过菜单路径打开数据字典初始屏幕。
  • 现在创建第一个数据库表作为检查表。
  • 接下来,我们需要创建另一个数据库表,我们称之为“ZEMPLOYEES”,它包含三个主要字段,分别是 EMPID、FULLNAME 和 DOB。
  • 成功创建两个表后,我们现在可以创建表之间的外键关系,请遵循给出的步骤
    • 首先,打开第二个表,即“ZEMPLOYEE”。
    • 从表中选择 EMPID 字段。
    • 现在点击屏幕上的**外键**按钮。请看下面的屏幕
      Foreign Key in SAP ABAP
    • 将弹出一个新窗口,其中提供**检查表**名称,该名称包含主数据。请看下图
      Foreign Key in SAP ABAP
    • 现在在下面的屏幕中,您可以看到**外键字段类型**的选项,其中包含四个选项。我们已经在上一节中解释了这些选项。
    • 现在点击**生成建议**按钮,然后点击复制按钮。
    • 最后,单击保存并激活它。
  • 单击单元测试以检查它是否正常工作,以下是此步骤
    • 转到表中的实用程序选项->表内容->创建。
    • 输入一个不同的名称或一个不在客户表中的错误名称,然后单击保存按钮。
    • 保存后,将显示一条错误消息。

自定义外键检查中的错误消息

如果检查表验证或外键检查失败,则会生成标准错误消息。可以使用**SE91 SAP 事务码**替换此错误消息。


下一个主题SAP 事务码