单元 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]
文本表的键结构必须满足什么条件?
📌显示答案
文本表的键结构必须包含:
- 主表的所有键字段
- Language 字段(使用域 SPRAS)
Language 字段必须引用表 T002(语言表),外键类型为 “Key fields of a text table”。文本字段是第一个字符型非键字段。
问题 7 - 文本表自动使用 [recall]
文本表在什么场景下会被自动使用?
📌显示答案
文本表在以下场景被自动使用:
- F4 帮助:自动显示当前登录语言的文本
- SELECT:
text_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)
- 外键检查(优先级 2)
- 程序内检查(优先级 3)
域固定值先于外键检查执行。如果检表的值与域固定值冲突(即检表中存在不在域固定值列表中的值),那么这些值不会被接受——域固定值检查会首先拒绝它们。因此在设计时,应避免在同一字段上同时使用域固定值和外键检查,除非两者完全一致。通常选择其中一种机制即可。
📌模式总结(点击展开)
| Keyword (关键词) | Answer (答案) |
|---|---|
| 固定值定义位置 | 域的 Value Range 选项卡 |
| 固定值自动效果 | 成为 F4 帮助候选值 |
| 固定值 vs 检表 | 少量稳定用固定值,大量可变用检表 |
| 外键作用 | 确保引用完整性 |
| 基数第一个数字 | 始终为 1 |
| 1:CN 含义 | 一条检表记录对应 0 或多条外键记录 |
| 文本表键结构 | 主表键 + Language (SPRAS) |
| 语言引用检表 | T002 |
| 自引用外键 | 表引用自身作为检表 |
| 输入检查优先级 | 域固定值 > 外键检查 > 程序检查 |