外键与一致性检查 (★★★★★)
#abap #abap-dictionary #abap-validation
概览表
| Concept (概念) |
Key Point (要点) |
| Foreign Key (外键) |
确保引用完整性 |
| Check Table (检表) |
提供允许值的参考表 |
| Cardinality (基数) |
描述记录对应关系 |
| Foreign Key Field Type |
键字段/非键字段候选 |
外键定义
外键建立外键表 (Foreign Key Table) 字段与检表 (Check Table) 字段之间的关联。
1 2 3 4 5 6 7 8 9 10 11
| 外键表 检表 ┌──────────────┐ ┌──────────────┐ │ ZEMPLOY## │ │ SCARR │ │ │ │ │ │ CARRIER ─────┼──FK────→│ CARRID │ 外键关系 │ │ │ CARRNAME │ │ ... │ │ ... │ └──────────────┘ └──────────────┘
外键字段: CARRIER (外键表) 检表字段: CARRID (检表)
|
创建外键
- 在表维护界面选择字段
- 点击键图标(Foreign Key)
- 输入检表名 → 系统自动提出字段分配建议
- 确认基数和字段类型
- 激活
基数 (Cardinality)
基数描述检表记录与外键表记录的对应关系:
1 2 3 4 5 6 7 8
| Cardinality = N : M
N (检表侧) — 始终为 1 M (外键表侧) — 可以是: 1 → 每个检表记录必须对应1条外键记录 C → 每个检表记录对应0或1条外键记录 N → 每个检表记录对应多条外键记录(必须) CN → 每个检表记录对应0或多条外键记录(可选)
|
| Cardinality |
Meaning |
Example |
| 1:1 |
必须一一对应 |
员工必须有唯一部门 |
| 1:C |
可选对应 |
员工可能有办公室 |
| 1:N |
必须一对多 |
部门有多个员工 |
| 1:CN |
可选一对多 |
机场可能有员工 |
基数的第一个数字始终为 1(从检表角度看,每条检表记录)
外键字段类型
| Type (类型) |
Description (描述) |
| Key fields / candidates |
外键字段是检表的键字段(或候选键) |
| Non-key fields / candidates |
外键字段是检表的非键字段 |
| Key fields of a text table |
文本表专用类型 |
| No key fields / candidates |
非键非候选 |
字段分配原则
- 外键表字段与检表字段按位置对应
- 系统会自动提出建议(基于字段名/类型匹配)
- 可以手动调整对应关系
外键对输入帮助的影响
1 2 3 4
| 外键定义 → 自动提供 F4 帮助: ├── 显示检表的键字段 ├── 如有文本表 → 显示第一个字符型非键字段 └── 可在检表上附加搜索帮助自定义显示
|
特殊场景
自引用外键
表可以引用自身作为检表:
1 2
| ZEMPLOY##-MANAGER → ZEMPLOY##-EMP_NUM (经理也是员工)
|
复合外键
多个字段组合成一个外键:
1
| ZEMPLOY##: CLIENT + CARRIER → SCARR: MANDT + CARRID
|
考试/测试模式
| Scenario/Keyword (场景/关键词) |
Answer (答案) |
| “基数 1:CN 含义?” |
一条检表记录对应 0 或多条外键记录 |
| “基数第一个数字?” |
始终为 1 |
| “外键字段类型 key fields 含义?” |
外键字段是检表的键字段 |
| “外键自动提供什么?” |
F4 输入帮助(检表键+文本) |