본문 바로가기

Easy Abap 2.0

[1주차] Chapter 7 ABAP Dictionary Part 2

1. Table Field 속성

 

테이블은 데이터를 유일하게 구분할 수 있는 Key Field 와 
이외의 내용을 저장하는 Generic Field로 구성되어 있다.
테이블에 255문자 이상 장문의 내용을 저장해야 할 경우 STRING 타입을 이용할 수 있다.
테이블은 총 3개의 STRING필드를 가질 수 있으며, 하나의 테이블이 포함할 수 있는 필드의 크기가 ABAP Dictionary 레벨에서 제한되어 있다.

 

Key Field와 Initial Values

 

1.1 Key Field

 

Key 필드는 테이블의 데이터를 유일하게 구분할 수 있는 필드들로 구성하는 것이 바람직하다.

즉 Employee 테이블에서 중복된 사원번호(EMP_NO)가 존재하지 않는 다면,
사원 번호 필드 하나만 Key 필드로 설정하면 된다. 

만약 사원 번호가 중복될 수도 있다면 이름도 포함하여 2개의 필드를 Key로 설정할 수도 있다

 

 

Key 필드 주요사항
1) 테이블의 총 Key 필드 수는 16개까지 가능
2) Key 필드의 길이는 모두 합해서 최대 120자까지 가능
3) Key 필드는 Initial Value가 기본으로 선택됨
4) Key로 선택된 필드는 Primary Index로 자동 생성됨

 

 

1.2 Initial Value

 

Initial Value는 값이 존재하지 않으면 Null 값이 아니라 초기값을 가지게 한다는 NOT NULL 강제값을 의미함.

 

<Null 과 Initial Value의 차이점>

 

Null Initial Value
값이 존재하지 않은 것-> 메모리 점유X 값이 존재-> 메모리 점유 ㅇ
0,", ' ', SPACE, 공백 같은 것이 표현될 수 X 0,", ' ', SPACE, 공백 같은 것이 표현될 수 ㅇ
할당, 연산 ,비교할 수 없는 대상 할당, 연산 ,비교할 수 있는 대상
ABAP 언어에는 IS NULL, IS NOT NULL 비교연산자를 SQL구문에서 사용 가능 ABAP 언어에는 IS INITIAL, IS NOT INITIAL 비교연산자를 SQL구문에서 사용 가능

 

 

2. 테이블 대량 데이터 생성 방법

 

T-CODE: SE16N을 넣고 테이블 이름에 만들었던 테이블 이름 넣고 Enter 하면
아래 그림처럼 나온다.

 

테이블 이름 넣고 Enter 친 다음 왼쪽 위 칸에 실행 버튼 누른다.

 

 

생성 눌러서 위 그림처럼 데이터 입력 후 저장 버튼 누른다. 
SE16N에서 데이터를 수정한 로그는 SE16N_CD_KEY와 SE16N_CD_DATA 테이블에 저장된다.

 

 

3. Foreign Key

 

<Foreign Key 정의 및 속성>

  • Foreign Key는 관계형 데이터베이스에서 테이블 간의 연결을 정의
  • Data Integrity(데이터 무결성) 및 Data Consistency(데이터 일관성)을 보장하기 위해 사용됨.
  • ABAP 영역에서 사용하는 Foreign Key는 ABAP Dictionary에만 정의되어있고,
    실제로 데이터베이스에는 존재하지 않음.
    이러한 이유 때문에라도 DBMS에서 직접 테이블에 데이터를 추가하는 작업은 금지되어야함.
  • Foreign Key로 연결된 필드는 두 테이블 간에 필드명이 달라고 같은 Data Type과 길이를 가져야 하고,
    또한 같은 Domain을 사용한 필드도 가능.  

 

3.1 Check 필드와 Value Check

 

Foreign Key가 Check Field와 연결되어있다는 것은
Foreign Key 필드에 입력되는 값은 Check 테이블(점검 테이블)에 값이 있는 지 확인 과정을 거치게 된다는 것을 의미함. 

 

Check 테이블(점검 테이블)에 값이 없으면 Foreign key 필드에 값이 입력되지 않음.

 

 

3.2 Generic과 Constant Foreign Key

 

1) Genenic Foreign Key (일반 Foreign Key)

 

Check 테이블에 여러 개의 Key 필드가 있을 때 그 중 체크할 필요가 없는 필드에 Generic Key를 설정하면 
Check 테이블에서 필드의 값을 무시하고 체크하게 된다.

즉, SELECT문이 수행될 때 조건절에서 Generic 필드의 조건이 삭제된다.

 

2) Constant Foreign Key (상수 Foreign Key)

 

Foreign Key를 위해서 상수 값을 지정해서 사용할 수 있다.
이 필드의 값이 상수 값과 일치하면 Foreign Key 에 값이 입력되고, 일치하지 않으면 입력되지 않는다.

 

 

3.3 Foreign Key 생성 과정

1) T-CODE: SE11에서 사원 자격증 테이블(여기에서는 ZEMPCERT050)  입력하고 Change 버튼을 선택한다.


2) 사원이 취득한 자격증 테이블의 데이터는 기본적으로 자격증 정보가 존재하는 데이터만 추가 되어야한다.
아래 그림처럼 CERTID 필드에 커서를 두고 외부키 버튼을 누른다.

 

외부키 버튼을 누른 후 해당 점검 테이블 이름 넣고 CREATE PROPOSAL 버튼 누르기

 

시스템이 자동으로 제안한 Foreign Key가 문제없다고 하면 복사 버튼 클릭.

 

이러한 과정으로 테이블의 Foreign Key 를 생성하게 된다. 
그리고 Key 필드 이외의 일반 필드에도 같은 방법으로 Foreign Key를 추가할 수 있다.
Foreign Key가 필요 없으면 휴지통 버튼을 선택해서 삭제하면 된다.

 

4. Table Enhancement

 

4.1  'Include' Structure

 

개별 필드와 Include 를 조합하여 테이블 생성도 가능하다.

여러 개의 테이블에 같은 구조를 가지는 필드들이 사용될 경우
개별 테이블마다 필드들을 생성/변경하는 것은 시간이 많이 들어가는 작업이다.
이러한 경우 공통으로 사용되는 필드들을 Structure로 생성하고 테이블에서 Include하여 사용한다.

T-CODE: SE11에서 ZEMP050테이블에 자격증 정보 테이블 ZCERTINFO050를 추가하는 경우를 아래 그림으로서 보여줌.

 

위 그림에서 메뉴에 편집-> Include-> 삽입-> 누르고 ZCERTINFO050 을 넣으면 
아래 그림처럼 Structure가 Include 될 수 있음.

 

 

그러나 항상 점검 및 활성화해서 Incldue가 될 수 있는 지 확인이 필요!

 

4.2 Append Structure

 

Append Structure 기능은 하나의 테이블(또는 Structure)에만 할당할 수 있는 Structure로서
테이블 자체를 수정하지 않고 필드를 추가할 수 있게 해준다.

SAP사 입장에서는 이러한 필드들을 Customer Field라고 한다
(특징: 표준 테이블에 원하는 필드가 없을 때 사용 가능하며, SAP Upgrade 시 문제가 발생하지 않음)

하나의 Append Structure는 하나의 테이블에서만 사용될 수 있고, 
개별 테이블은 여러 개의 Append Structure를 사용할 수 있다.

 

그러나 Pooled 테이블, Cluster 테이블, LCHR, LRAW와 같이 Long 타입의 필드가 포함된 테이블에서는

Append Structure를 사용할 수 없다.

 

<Append Structure의 역할>

 

  • Standard 또는 CBO 테이블에 신규 필드를 추가함.
  • 이미 존재하는 테이블에 Foreign Key를 추가 및 정의함
  • 이미 존재하는 테이블에 필드의 탐색 도움말을 추가함.

 

<실습>

 

SCARR 표준 테이블(Y 또는 Z로 시작하지 않는 테이블 전부 표준 테이블)에 Append Structure 기능을 이용해
추가 필드(Customer Field) 생성 실습

 

T-CODE:SE11 실행하여 SCARR를 입력 후 조회한다.
표준 테이블은 변경할 수 없어서 조회 모든 선택함
그리고 메뉴: [Goto]->[Append Structure나 구조추가]

 

Append Struture Naming 후 원하는 필드와 Type 입력 후 활성화한다.

 

 

 

5. Index

<인덱스 정의 및 속성>

인덱스는 데이터 접근을 빠르게 하려고 테이블과 별개의 물리적인 저장 공간 목록을 작성하여 놓은 것.

한마디로 정렬되어 있는 복사본 테이블이라고 정의할 수 있음.

정렬된 데이터는 테이블 데이터에 접근하는 시간을 절약할 수 있도록 도와준다.

 

ABAP Dictionary 테이블에 추가한 인덱스는 물리적으로 오라클과 같은 데이터베이스에 인덱스를 생성하게 된다.

즉, SAP 내부에 인덱스라는 오브젝트는 존재하지 않고, 단순히 ABAP Dictionary라는 통로를 통해 데이터베이스 인덱스를 대변하게 된다.

 

항상 인덱스가 효율적이라고 물어본다면 테이블에서 추출해야할 데이터 비율이 높아진다면 인덱스 목록 테이블에 접근한 후 테이블에서데이터를 가져오는데 중복 시간이 들어가기 때문에 항상 효율적이라고는 할 수 없다.

 

ABAP Dictionary에는 Primary 인덱스와 Secondary 인덱스 두 가지가 존재한다.

Primary 인덱스는 테이블의 Key 필드로 구성되며 테이블 활성화 시 자동으로 생성된다.

Secondary 인덱스를 생성시에는 테이블을 읽는 속도는 증가하나 데이터 추가 시에는 속도가 감소하게 되므로
신중하게 선택해야한다.
추가되는 Secondary 인덱스는 SELECT구문의 WHERE 조건에 자주 쓰이며, 다른 테이블과 연관성이 많은 필드를 선택하는 것이 바람직하다.

 

5.1 인덱스 생성

 

1) SCARR 테이블 조회 후 Index 탭 들어가서 Create 버튼 누른다.

 

 

2) Z로 시작하는 3자리 인덱스 이름 입력 후 Enter 누른 다음, Short Description 및 테이블 필드 추가해준다.
인덱스 생성 시에는 MANDT 필드는 반드시 포함해야 한다!

 

 

6. Technical Setting(기술적 세팅)

 

데이터베이스에서 테이블이 생성될 때(SE11에서 활성활 될 때) 기술적 속성이 정의되어야 한다.

 

기술적 속성에서는

 

1) 테이블 Size는 얼마로 할 것인가?

2) 버퍼링을 사용할 것인가?

3) Log data를 기록할 것인가?

 

등의 항목들을 기술적 세팅에서 설정할 수 있다

 

기술적 세팅 툴은 ABAP Workbench에 통합되어 있지만,

개별 트랜잭션(T-CODE: SE13)으로도 실행 가능하다.

 

아래 그림처럼 차례대로 어떤 기술적 세팅이 필요한지 확인해보겠다.

 

 

 

6.1 Logical Storage Parameters

 

기술적 세팅에서 가장 중요한 항목

 

1) Data Class

 

테이블이 존재하게 되는 즉 실제 데이터가 저장되는 데이터베이스의 물리적인 영역을 지정한다.

 

<Data Class 종류>

 

Data Class 설명
APPL0 Master Data : 변경이 자주 일어나지 않는 데이터로
조직 코드와 같은 기준 정보가 해당한다.

+ Transparent Tables
APPL1 Transaction Data : 자주 변경이 일어나는 데이터이며 
전표 발행과 같이 트랜잭션이 일어날 때마다 데이터가 생성되는 경우에 해당한다.

+ Transparent Tables
APPL2 Organizational Data : 시스템이 설치될 때 설정되고서
거의 변경이 되지 않는 데이터를 의미하며
국가 Key 값을 가지는 테이블을 한 예로서 생각 가능하다.
DDIM Dimension Tables in BW
DFACT Facts Table in BW
DODS ODS Tables in BW

 

참고사항: 주로 APPL0 클라스 자주 사용.

 

-System Data: 시스템 자체가 요구하는 데이터로 프로그램 소스를 담는 테이블이 대표적 예

-Customer Data: 고객사에서 필요한 경우 추가로 생성 가능.

 

2) Size Category

 

Size Category 테이블에 생성될 수 있는 레코드 수를 정의하고 있으며, 고객사마다 다르게 설정 가능.

 

 

6.2 Buffering

 

Buffering 설정을 하게 되면 데이터베이스에서 직접 값을 읽어 오는 것이 아니라
Application Server 영역의 Buffer에서 데이터 조회한다.

버퍼링 설정은 특히, Client/Server 모델에서 큰 효과를 발휘하며 Access 시간을 효과적으로 절감할 수 있다.

 

마스터 데이터 성격의 테이블에만 버퍼링 설정하고, 트랜잭션이 자주 일어나는 테이블은 버퍼링 설정을 하지 않는 것이 가장 효율적이 버퍼링 사용법이다. 만약 트랜잭션이 자주 일어나는 테이블에 버퍼링 설정 시 데이터 왜곡이 발생하게 됨.

 

1) 버퍼링 옵션

 

버퍼링 옵션 설명
Buffering not permitted 버퍼를 사용하지 않는 경우 옵션 체크

트랜잭션이 자주 일어나는 테이블은 버퍼를 사용하면 비효율적이다.

보통 Application Server와 Database Server 간에 동기화가 
진행될 때까지 기다릴 수 없는 최신의 데이터가
테이블에 세팅한다.
Buffering allowed but switched off 고객사에서 버퍼링을 사용할 지 결정할 수 있는 버퍼링 옵션

이것은 Buffering Type을 설정하지 않아도 된다는 것을 의미

이러한 타입을 만든 이유는 SAP사에서 개별 고객사의 특성을 다 고려할 수 없기 때문에 고객사마다 상황에 맞게 
설정 할 수 있도록 고안한 옵션.
Buffering Activated 데이터 변경이 자주 발생하지 않고,
Read 접근이 많은 테이블에 세팅



예를 들어, 클라이언트 테이블 T000은 시스텡을 처음 설치한 후 변경할 일이 거의 없으며, 클라이언트가 추가되더라도 데이터 Size가 적기 때문에 Fully buffered로 설정되어 있다.

 

2) 버퍼링 타입

 

버퍼링 설정(Buffering activated)을 하게 되면 버퍼링 타입을 지정하여야 한다.

 

버퍼링 타입 설명
Single Record Buffered 테이블 레코드에 접근한 정보만 버퍼에 저장함

Generic Area와 Full 버퍼링보다는
Storage 공간이 적게 필요하다는 장점이 있지만,
다른 버퍼링 타입보다 데이터베이스에 접근하는 횟수가
증가한다는 단점이 있다.
Generic Area Buffered 선택된 Key값에 해당하는 테이블의 모든 Entry가
버퍼에 저장됨.

Generic Key는 Primary Key의 일부분이고, 
만약 Key 필드가 4개라면, Generic Key는 3개까지
설정할 수 있음.

Generic Key를 설정하는 것은 아주 중요한 문제임.
Fully Buffered 모든 테이블 Row가 버퍼에 저장됨.

데이터가 적고, 자주 읽히며, 데이터가 추가되는 횟수가 적은 테이블에 설정하여 사용함.