网上关于Sap簇表的内容很多,但是我觉得都不太准确,有些还是错误的。所以写下这篇内容供大家参考。
首先需要搞清定义,簇表是和透明表一个级别的定义,但是簇表没有实体表,就只是一个结构。表簇是另一个概念,它在数据库中有对应的实体表。多个簇表可以对应一个表簇(如BSEG,BSEC对应RFLBG,实际就是bseg,bsec的内容存在数据库rflbg表中)。
以下内容就以BSEG为例。BSEG是一个经常使用的簇表,它在数据库中没有对应的实体表,它的数据来源于表簇RFBLG (这里注意区分簇表和表簇)。
RFBLG是一个表簇,它在数据库中有实体表。
从关键字可以看出,同一个凭证所有行内容存到RFBLG中的一行中。
RFBLG和BSEG格式互相转换,是由sap引擎自动完成的。任何对BSEG的增删改查都会转为对RFBLG的增删改查,这个操作对程序员和数据库是隐藏的。所以这就是查询bseg慢的原因,尤其是查询非索引字段的时候。
下面的测试案例,数据库引擎没有进行字段筛选。
RFBLG和BSAS、BSIS、BSAK、BSIK、BSAD、BSID这6张表,在物理上,它们没有任何关系,它们是不同的实体表。系统生成凭证时,是分别写入RFBLG和其他6张表的。实际中会发现有的数据在其他6张表中都不存在,有的列在其他6张表中也不存在。