单元 2:透明表练习(8 道题)
单元 2:透明表练习(8 道题)
#practice #abap #abap-dictionary #abap-tables
相关概念
📌关键模式(点击展开)
| Keyword (关键词) | Answer (答案) |
|---|---|
| 透明表激活后 | 自动在数据库中创建同名表 |
| 两级域概念 | 域(技术) → 数据元素(语义) → 字段 |
| Include 链中的数据库表 | 只能有一个(表本身) |
| CURR/QUAN 引用 | 运行时关联引用字段 |
| 日志生效条件 | 技术设置勾选 + rec/client 配置 |
问题 1 - 透明表与数据库对应 [recall]
透明表在激活后与数据库之间的对应关系是什么?
📌显示答案
透明表激活时自动在数据库中创建对应的数据库表:
- 同名:Dictionary 中的表名 = 数据库中的表名
- 同字段名:字段名一一对应
- 类型转换:Dictionary 数据类型自动转换为对应 DB 数据类型
- 字段顺序可以不同(允许插入新字段而不转换表)
问题 2 - 两级域概念 [recall]
解释两级域概念 (Two-Level Domain Concept),并举一个例子说明同一个域如何为不同字段提供不同语义。
📌显示答案
两级域概念将字段的属性分为技术和语义两层:
- 域 (Domain):定义技术属性(数据类型、长度、值域)
- 数据元素 (Data Element):定义语义属性(字段标签、含义)
示例:域 S_AIRPID 定义机场 ID 的技术属性,通过数据元素 S_FROMAIRP(出发机场)和 S_TOAIRP(到达机场)分别赋予不同语义。同一个域被不同数据元素复用,不同数据元素赋予不同的语义含义。
问题 3 - Include 结构规则 [recall]
在透明表中使用 Include 结构时,有哪些规则和限制?
📌显示答案
| 规则 | 详情 |
|---|---|
| 用途 | 避免冗余结构定义 |
| Include 链中的数据库表 | 只能有一个(表本身) |
| 嵌套 Include | Include 中可以包含 Include |
| 外键传递 | Include 中的外键定义会传递到父表 |
| 整表 Include | 必须包含整个表 |
| 插入方式 | 菜单 Edit → Include → Insert 或手动输入 .INCLUDE |
问题 4 - 货币/数量字段引用 [recall]
CURR 和 QUAN 类型的字段在定义时有什么特殊要求?
📌显示答案
- CURR(货币)字段:必须指定引用表中的 CUKY 字段
- QUAN(数量)字段:必须指定引用表中的 UNIT 字段
- 引用字段在运行时才关联,不是定义时
- 系统使用引用字段来确定小数位数(如 JPY 无小数,USD 两位小数)
问题 5 - 技术设置要素 [recall]
透明表的技术设置包含哪些主要配置项?
📌显示答案
| 设置 | 目的 |
|---|---|
| Data Class(数据类) | 决定物理存储区域(APPL0 主数据/APPL1 事务数据/APPL2 组织数据) |
| Size Category(大小类别) | 决定扩展(Extent)大小(0-4 级) |
| Buffering(缓冲) | 读性能优化 |
| Logging(日志) | 变更记录 |
问题 6 - 日志生效条件 [application]
一个开发者在透明表的技术设置中勾选了 Logging,但发现日志并未记录。可能的原因是什么?如何解决?
📌显示答案
日志生效需要两个条件缺一不可:
- 技术设置中勾选 Logging ✓
- Profile 参数 rec/client 必须正确设置:
rec/client = ALL→ 记录所有客户端rec/client = 000[...]→ 记录指定客户端rec/client = OFF→ 不记录
最可能的原因是 rec/client 设置为 OFF 或未包含当前客户端。需要系统管理员修改 Profile 参数。查看日志使用事务 SCU3。
问题 7 - 池表与簇表对比 [application]
你需要判断一个 SAP 标准表是透明表、池表还是簇表。如果该表不能用于 JOIN、不能用 Append 结构、且与同组的其他表共享相同的簇键,这是什么类型的表?有什么特点?
📌显示答案
这是簇表 (Cluster Table)。特点:
- 与其他簇表共享簇键(功能相关)
- 数据压缩存储在表簇 (Table Cluster) 中
- 不能用于 JOIN / View / Append 结构
- 仅支持 Open SQL
- WHERE 条件仅簇键字段传递到数据库
- 优点:功能相关数据联合读取,减少数据库访问;压缩存储节省空间
问题 8 - 池表与簇表区别分析 [analysis]
比较池表 (Pooled Table) 和簇表 (Cluster Table) 的本质区别。在什么情况下 SAP 会选择使用簇表而不是池表?
📌显示答案
| 对比项 | 池表 | 簇表 |
|---|---|---|
| 表间关系 | 无功能依赖 | 有功能依赖(共享簇键) |
| 合并基础 | 只是合并小表 | 功能相关的数据合并 |
| 键字段 | 必须是 C 类型 | 共享簇键的交集 |
| 数据压缩 | 仅非键字段 | 全部数据 |
SAP 选择簇表的场景:多个表之间有功能依赖关系(如主数据+明细数据),经常需要联合读取,且共享相同的键字段。池表仅用于将多个不相关的小逻辑表合并存储到一个物理表中。
📌模式总结(点击展开)
| Keyword (关键词) | Answer (答案) |
|---|---|
| 透明表激活 | 自动创建同名数据库表 |
| 两级域概念 | 域(技术) → 数据元素(语义) |
| Include 链中数据库表 | 只能有一个 |
| CURR/QUAN 引用 | 运行时关联 |
| 日志两条件 | 技术设置 + rec/client |
| 池表特点 | 无功能依赖,键字段须 C 类型 |
| 簇表特点 | 有功能依赖,共享簇键 |
| 池表/簇表限制 | 不能 JOIN、Append,仅 Open SQL |