外键与一致性检查 (★★★★★)

外键与一致性检查 (★★★★★)

#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 (检表)

创建外键

  1. 在表维护界面选择字段
  2. 点击键图标(Foreign Key)
  3. 输入检表名 → 系统自动提出字段分配建议
  4. 确认基数和字段类型
  5. 激活

基数 (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 输入帮助(检表键+文本)