单元 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,但发现日志并未记录。可能的原因是什么?如何解决?

📌显示答案
日志生效需要两个条件缺一不可
  1. 技术设置中勾选 Logging
  2. 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