ABAP 开发人员每天都会和事务码 SE11 里的透明表(Transparent Table)打交道。
笔者入门 ABAP 编程很长一段时间后,都没有去留意过透明二字的含义。
SAP 开发中确实有很多概念就是这样,就算理解得似是而非,一知半解,表面上看起来,也不会对手头的日常工作有什么影响。
透明表给 ABAP 开发人员最直接的印象,就是其用途:存储应用程序数据。
透明表不仅仅是 SAP 系统内部的表结构,更是应用程序与底层数据库之间的桥梁。
透明表的名称,反映了其关键特性:在应用层和数据库层面表的结构是完全一致的。
这意味着,透明表在 ABAP 数据字典即 SE11 事务码中的定义,与应用服务器连接的数据库中表的实际物理结构相同。透明表通过 SAP 系统与应用程序逻辑紧密集成。
在 SAP 系统中,透明表具有以下特点:
每个透明表都有一个唯一的名称和定义,与数据库中的物理表一一对应。 透明表的字段在数据字典中定义,并映射到实际的数据库字段。 可以通过 ABAP OPEN SQL 语句查询或修改透明表中的数据。
从两个层面理解透明的含义
1. 透明表在数据库和应用层面之间的透明性。
透明表是应用程序层直接可见,且与数据库中的表结构一致,数据处理和存储过程对开发者来说是透明的,这就使得应用程序可以使用透明表进行数据存储和检索,而不需要担心数据库层的额外处理或转化。
ABAP 开发人员可以回忆一下自己的日常工作场景。当需要新建数据库表或者调整现有数据库表的结构时,是不是从来不需要用额外的开发工具,登录底层的数据库进行操作?
除了数据库表本身的修改,读取数据库表中的业务数据,也仅仅通过简单的 OPEN SQL 即可实现。不需要像 Java 程序那样,读取数据之前先要和数据库建立连接,读取结束之后要关闭连接。
ABAP 开发人员享受到的这一切便利,都离不开下图高亮区域所示的 Kernel Service 和 Database management system 背后的默默工作。
ABAP 应用程序不会直接同数据库打交道,而是通过 ABAP 应用服务器的 Kernel Service 提供的 Database Interface,同数据库的 Database management System 交互。这种交互机制可以看做 ABAP 应用程序和底层数据库服务器之间的一个中间层,负责将 ABAP SE11 事务码里触发的透明表操作,翻译成数据库原生的 DDL(Data Definition Language).
在数据库管理系统中,DDL 是一组用于定义和管理数据库对象的语句。这些语句可以定义表的结构、指定数据类型、定义主键、外键约束等。例如,CREATE、ALTER 和 DROP 这类语句都属于 DDL。DDL 操作的结果通常会立即生效,并会影响数据库的元数据(metadata)。这些元数据保存着数据库结构的描述,比如表的列信息、数据类型、索引等。
比如我们在一台 ABAP 应用服务器上使用事务码 SE11,创建一张新的透明表。该 ABAP 服务器连接的是 HANA 数据库。
激活这张表时,会触发 HANA 数据库的 DDL 操作,HANA 数据库通过 CREATE TABLE 这个 SQLScript 创建数据库表,具体过程包括:
生成元数据(Metadata Generation):数据库会生成与表相关的元数据。这些元数据包括表的名称、列的数量和数据类型、约束等信息。 存储空间分配(Storage Allocation):系统会为新创建的表分配一定的物理存储空间。这包括表的数据页、索引页的分配,以及系统内部如何组织这些存储块。 执行(Execution):数据库系统执行 CREATE TABLE 的实际操作,创建表并将其元数据存储在系统目录中(system catalog). 这些系统目录是存储所有表、列、索引等信息的数据库表。 提交(Commit):Commit 表示表结构创建操作已经永久保存到数据库中。
ABAP 程序中的 OPEN SQL 语句,也会被 Database Interface 转换成数据库原生的 SQL,即 Database Manipulation language(DML) 的映射。
DML 的基本操作分为数据的插入、更新、删除和查询,这些操作在几乎所有主流数据库系统中都是核心功能,例如 SAP HANA、MySQL、PostgreSQL、Oracle、SQL Server 等等。
ABAP 透明表可以类别成设计模式中的门面模式(Facade Pattern), 封装了底层数据库的 DDL 和 DML 细节,确保了这些与业务逻辑编写无关的操作,对开发人员完全透明。
2. 透明表相对于其他类型表的直观性
万物有阳就有阴,既然有透明表,也有不透明的表,那就是 pooled table 和 cluster table.
这两种表与透明表的区别在于,它们在数据库中的存储方式与在 ABAP 数据字典中的定义并不直接对应,和透明表相比其管理性和维护性较差,对 ABAP 开发人员来说不透明。笔者实际工作中没有直接使用过这两种表。
总之,透明表的透明性不仅在于其结构的一致性和直观性,还在于它的优秀的系统集成能力。在数据库操作时,透明表与 OPEN SQL 语句无缝结合,使得 ABAP 开发人员无需特别考虑复杂的表连接或数据压缩问题,可以专注于业务逻辑的实现。
关于 ABAP 系统组件的详细介绍,请参与笔者之前的文章: