ABAP的表类型似乎我感觉只应该有2种,而不是大家说的3种。
从数据存储的原理上来看的。下面我做一个分析。
一般情况下,我们都说ABAP中有表有3种类型 :透明表 (transparent table)、簇表(cluster table)、 池表 (pool table)。
先来说下什么叫做透明表(transparent table):透明表是一种和数据库具有相同结构的表存储结构,假设我在SAP系统中,使用SE11创建了一个CUSTOMER TABLE 那么我创建的结构是怎么样的,在数据库的存储结构就是怎么样的,但是在SAP中,当我们对透明表调整结构的时候,不需要我们对数据库表也进行调整,这是SAP的方便的特点之一,这里需要说明我们会经常遇到的一种情况:当我们删除一行时候,保存激活会没有问题,但是为什么我们修改一行的时候,例如把DATA ELEMENT改了,怎么就不让激活了呢。遇到这种凡是对DATA ELEMENT 改变的操作,我们需要保存,然后去SE14中激活,要不然就在SE11中整行删掉重建.
什么是簇表和表簇?CLUSTER TABLE 和TABLE CLUSTER.
这俩名词,刚开始学的时候,真实很折磨人,根本不知道啥意思。但是随着对知识的进一步积累,慢慢的有些眉目了,也感到了它存在合理性。
什么是簇表?我们可以很直观的理解为,在DATABASE (数据层),除了我们定义的主键,然后把其他的内容都当成表格的一个字段存起来。也就是说这个表的结构可以理解为:主键+ 一个存储功能的字段的 组合。
然而在其中还会有PAGENO的这个字段,这就是说,一行空间不够(32KB)用,在主键相通的情况下,继续细分,用来将属于一个主键的内容联系起来的字段1、2、3.。。。。
要理解簇表,首先自己创建一个瞧瞧吧。
SE11,首先创建一张透明表,透明表的名字一定要少于10位。
然后点击 UTILITES->OTHER DICTIONARY OBJECTS
自定一个名字少于10位的表簇。(table CLUSTER)
表簇和簇表的区别和联系?
表簇,是该表在DATABASE的存储结构,
簇表,是该表在SAP DICTIONARY展现在我们眼前的结构。
于是我们就会知道为什么我们不能用NATIVE SQL去访问 这个簇表了。因为我们在SAP中的看到的字段,在DATABASE 是不存在的,是通过转化的才显示在我们SAP DICTINARY中的结构。
恩,然后就是在SAP中我们想看到什么样的结构 就要在簇表中创建一个什么样的结构。
簇表都是由透明表转化成的,要创建簇表,首先就要创建一个透明表,这个透明表的显示结构,就是我们想想在簇表中显示的结构,然后在SE11 进去看观看此透明表状态并且处于修改状态,点击EXTRAS -> CHANGE
table category. 选最后一个 (RADIO BUTTON) 复制簇表的选项,是个小对勾,这个点完了,系统会自动跳到SE11的界面,好像什么也没有发生。这时候我们去DELIVERY AND MAINTENANCE标签下面看,就会出现了一个POOL/CLUSTER的文本框,填入我们创建的表簇。激活保存。就搞定了。
注意,这里我们要在表簇中 手工将VARKEY 删掉,换成我们表的要显示的主键, 表簇主键为我要显示主键的子集。
而表池创建后激活就可以了。然后进入透明表CHANGE TABLE CATEGORY 中点第三个么再进去DELIVERY AND MAINTENANCE中 填入 表池,激活。
池表和簇表的创建过程相同。
但是池表和簇表还是有区别的。
INSERT 透明表 INTO 簇表。 只要透明的簇表的主键都在透明表里面就行。就是透明表主键多了也无所谓。
INSERT 透明表 INTO 池表. 透明表和池表的主键必须相同的。
池表和簇表的存储原理相同的。
所以我感觉,对于从原理上来分析,我们只需要将SAP 的表分成2类就OK了。