R/3中有种数据表:
- Transparent Tables
- Pooled Tables
- Cluster Tables
第一种Transparent Tables就是最常用的数据表,这种数据表是由一个数据库数据表对应一个ABAP数据表,这个所谓的对应意思就是最ABAP程序员看来是一个表,而在底层数据库里存储也是一个表,而且字段数和表结构是一样的。
第二种Pooled Tables和第三种Cluster Tables类似的,都是一个数据库数据表对应多个ABAP数据表,而前者可能会有很多的数据库表,而后者少一些。
R/3的表(tables)是由各个字段(fields)组成的,而每一个字段都需要一个数据元素(Data Element),而每一个数据元素,又需要去关联一个域(Domain)。
所谓的Data Element和Domain是干嘛用的呢?
Domain来定义一个数据的数据类型以及他的格式,而Data Element则是一个具体数据,而放在字段里面,就是这个数据在不同表的出现。
举个例子,电话号码可以定义成为一个11位的char类型,只有数字组成,这个要定义在Domain里面,而这种电话可能分为工作电话,家庭电话,传真,这些都满足这个格式,所以这三个分别作为三个Data Element被定义出来。
接下来这个例子用来解释Data Element和Fields的关系,比如人名这个数据,我定义一个Domain是人名,比如为四个汉字的大小,而在Data Element会有比如客户名字,员工名字之类的,我们就分别定义这几个名字,而一个员工名字可能会在不同的表里面出现,这样就出现不同的Fileds。
R/3把数据类型的定义提到了一个Domain的层次,Domain我理解就是Oracle或者SQL Server中的自定义类型,在Domain里面要限制数据的类型,以及数据的上下限,与Oracle等不同的是,这种定义是强制的,也就是你必须为自己的字段定义一个Domain(通过字段所关联的Data Element定义的Domain实现)。
这么做的好处是,把相关的格式的定义提到了一个地方,比如我们的电话升级了位数,原来的11位不够用了,那么我们只需要在电话号码domain里面做修改,就可以把数据库里所有的数据格式升级,而不需一项一项的去改。