透明表与 Include 结构 (★★★★)

透明表与 Include 结构 (★★★★)

#abap #abap-dictionary #abap-tables

概览表

Concept (概念) Key Point (要点)
Transparent Table (透明表) Dictionary 定义 = 数据库结构,同名同字段
Two-Level Domain Concept 域(技术) → 数据元素(语义) → 字段
Include Structure 避免冗余,可传递外键定义
Currency/Quantity Fields 必须指定引用表和引用字段

透明表 (Transparent Table)

透明表在激活时自动在数据库中创建,Dictionary 与数据库的对应关系:

Dictionary Database
同名 同名
同字段名 同字段名
Dictionary 数据类型 转换为对应 DB 数据类型
💡字段顺序
Dictionary 中的字段顺序可以与数据库中的不同。这允许插入新字段而不转换表(ALTER TABLE 添加新列)。

两级域概念 (Two-Level Domain Concept)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
           ┌─────────┐
│ Domain │ 技术属性(类型、长度、值域)
│ S_AIRPID │
└────┬─────┘
┌─────────┴─────────┐
┌─────┴──────┐ ┌─────┴──────┐
│ Data Element│ │ Data Element│ 语义属性(含义、标签)
│ S_FROMAIRP │ │ S_TOAIRP │
│ (出发机场) │ │ (到达机场) │
└─────┬──────┘ └─────┬──────┘
│ │
┌─────┴──────┐ ┌─────┴──────┐
│ AIRPFROM │ │ AIRPTO │ 表字段
│ (SPFLI 表) │ │ (SPFLI 表) │
└────────────┘ └────────────┘
  • 同一个域(S_AIRPID)可被不同数据元素复用
  • 不同数据元素赋予不同的语义含义(出发 vs 到达)

表字段定义

Component (要素) Description (描述)
Key Fields (键字段) 主键,唯一标识每条记录
Data Elements (数据元素) 定义字段的语义和技术属性
Built-in Type 可直接指定类型(不经过域/数据元素)
Currency/Quantity CURR/QUAN 类型必须指定引用表和引用字段
⚠️货币/数量字段引用
CURR 字段 → 引用表中的 CUKY 字段
QUAN 字段 → 引用表中的 UNIT 字段
引用字段在运行时才关联,不是定义时。

Include 结构

规则

Rule (规则) Detail (详情)
用途 避免冗余结构定义
链中数据库表 只能有一个(表本身)
嵌套 Include Include 中可以包含 Include
外键传递 Include 中的外键定义会传递到父表
整表 Include 必须包含整个表

操作方式

  1. 菜单方式: Edit → Include → Insert
  2. 手动方式: 在 Component 列输入 .INCLUDE(注意前面的点),然后指定结构名
1
2
3
4
5
6
7
8
9
10
11
ZEMPLOY## 表
├── CLIENT (S_CLIENT)
├── CARRIER (S_CARR_ID) ← Key
├── EMP_NUM (ZEMP_NUM##) ← Key
├── FIRST_NAME (S_FNAME)
├── LAST_NAME (S_LNAME)
├── .INCLUDE ZCHANGE## ← Include 结构
│ ├── CHANGED_BY
│ └── CHANGED_DATE
├── SALARY (ZSALARY##)
└── CURRENCY (S_CURRCODE)

表的透明表 vs 结构

Feature Transparent Table Structure
数据库对象 有(自动创建)
可存数据 否(仅类型定义)
用途 数据存储 + 类型定义 仅定义类型