单元 4:输入检查练习(10 道题)

单元 4:输入检查练习(10 道题)

#practice #abap #abap-dictionary #abap-validation

相关概念

📌关键模式(点击展开)
Keyword (关键词) Answer (答案)
固定值定义位置 域的 Value Range 选项卡
固定值与 F4 帮助 自动成为 F4 候选值
基数第一个数字 始终为 1
基数 1:CN 一条检表记录对应 0 或多条外键记录
文本表键结构 主表键字段 + Language (SPRAS)
文本表语言引用 T002

问题 1 - 域固定值检查 [recall]

域的固定值(Fixed Values)定义在哪里?它如何影响使用该域的字段?

📌显示答案
固定值定义在域的 Value Range 选项卡中。影响方式:
  • 所有使用该域的数据元素都会受到约束
  • 固定值自动成为 F4 帮助的候选值
  • 修改域的固定值会影响所有引用该域的字段
  • 固定值适用于少量且稳定的值(如状态码 A/F/S)

问题 2 - 固定值 vs 检表 [recall]

什么时候应该使用域固定值,什么时候应该使用外键检表?

📌显示答案
  • 域固定值:少量、稳定的值(如状态码 A=Admin, F=Flight, S=Service)
  • 外键检表:大量、可能增长的值(如客户列表、产品列表)
  • 固定值定义在域上,检表通过外键关系定义

问题 3 - 外键定义 [recall]

什么是外键?它建立了哪两个表之间的关系?

📌显示答案
外键建立外键表 (Foreign Key Table) 的字段与检表 (Check Table) 的字段之间的关联。外键确保引用完整性——用户只能输入检表中存在的值。创建外键时,系统会自动提出字段分配建议。

问题 4 - 基数 [recall]

解释基数 (Cardinality) 的含义。1:CN 表示什么?

📌显示答案
基数描述检表记录外键表记录的对应关系,格式为 N:M。
  • N(检表侧):始终为 1
  • M(外键表侧)
    • 1 → 必须一一对应
    • C → 0 或 1 条(可选)
    • N → 多条(必须)
    • CN → 0 或多条(可选)

1:CN 表示:一条检表记录对应 0 或多条外键记录。


问题 5 - 外键字段类型 [recall]

外键字段类型有哪些?分别表示什么?

📌显示答案
类型 含义
Key fields / candidates 外键字段是检表的键字段(或候选键)
Non-key fields / candidates 外键字段是检表的非键字段
Key fields of a text table 文本表专用类型
No key fields / candidates 非键非候选

问题 6 - 文本表结构 [recall]

文本表的键结构必须满足什么条件?

📌显示答案
文本表的键结构必须包含:
  1. 主表的所有键字段
  2. Language 字段(使用域 SPRAS

Language 字段必须引用表 T002(语言表),外键类型为 “Key fields of a text table”。文本字段是第一个字符型非键字段


问题 7 - 文本表自动使用 [recall]

文本表在什么场景下会被自动使用?

📌显示答案
文本表在以下场景被自动使用:
  • F4 帮助:自动显示当前登录语言的文本
  • SELECTtext_table 的文本自动关联
  • 维护视图:语言字段自动填入登录语言
  • 当主表字段有检表(且该检表有文本表)时,F4 帮助自动显示检表键字段 + 文本表中当前语言的文本

问题 8 - 自引用外键 [application]

员工表中有一个 MANAGER 字段,需要确保经理也是该表中的员工。如何实现这种检查?

📌显示答案
使用自引用外键:将 MANAGER 字段定义为引用同一张表的外键:
1
ZEMPLOY##-MANAGER → ZEMPLOY##-EMP_NUM

表引用自身作为检表,确保经理编号必须是该表中已存在的员工编号。


问题 9 - 基数应用 [application]

一个航空公司表 (SCARR) 和一个航班表 (SFLIGHT) 之间的关系:每个航空公司可以有多个航班,但也可能有一个新成立的航空公司暂时没有航班记录。SCARR 作为 SFLIGHT 的检表时,基数应该设为什么?

📌显示答案
基数应设为 1:CN
  • 1(检表 SCARR 侧):每条航空公司记录(始终为 1)
  • CN(外键表 SFLIGHT 侧):一个航空公司可以有 0 或多条航班记录
  • C = 可选(可能没有航班),N = 多条(也可能有很多航班)
  • 这符合 “新成立的航空公司可能还没有航班” 的场景

问题 10 - 输入检查层次分析 [analysis]

一个字段同时有域固定值检查和外键检查。哪个优先?如果检表的值与域固定值冲突,会发生什么?

📌显示答案
输入检查按优先级执行:
  1. 域固定值(优先级 1)
  2. 外键检查(优先级 2)
  3. 程序内检查(优先级 3)

域固定值先于外键检查执行。如果检表的值与域固定值冲突(即检表中存在不在域固定值列表中的值),那么这些值不会被接受——域固定值检查会首先拒绝它们。因此在设计时,应避免在同一字段上同时使用域固定值和外键检查,除非两者完全一致。通常选择其中一种机制即可。


📌模式总结(点击展开)
Keyword (关键词) Answer (答案)
固定值定义位置 域的 Value Range 选项卡
固定值自动效果 成为 F4 帮助候选值
固定值 vs 检表 少量稳定用固定值,大量可变用检表
外键作用 确保引用完整性
基数第一个数字 始终为 1
1:CN 含义 一条检表记录对应 0 或多条外键记录
文本表键结构 主表键 + Language (SPRAS)
语言引用检表 T002
自引用外键 表引用自身作为检表
输入检查优先级 域固定值 > 外键检查 > 程序检查