CS Student’s SAP&Tech Journey✨
[SAP] Input Checks 데이터 유효성 검증 (2) Foreign Keys 외래키 본문
[SAP] Input Checks 데이터 유효성 검증 (2) Foreign Keys 외래키
인포마틱 2025. 2. 19. 18:30데이터베이스에서는 테이블 간 관계를 설정하여 데이터의 일관성을 유지하는 것이 중요합니다. SAP의 ABAP Dictionary에서는 Foreign Key(외래키) 를 활용하여 특정 필드가 다른 테이블의 유효한 값을 참조하도록 강제할 수 있습니다. 이를 통해 잘못된 데이터 입력을 방지하고 데이터 무결성을 유지할 수 있습니다.
이번 글에서는 Foreign Key의 개념, 설정 방법, Cardinality(카디널리티) 의 개념까지 자세히 살펴보겠습니다.
Input Checks 기본개념에 대한 포스팅 보러가기 🔽
[SAP] Input Checks 데이터 유효성 검증 (1) 기본 개념
데이터 유효성 검증은 시스템의 신뢰성과 일관성을 유지하기 위해 반드시 수행해야 하는 과정입니다. SAP 시스템에서는 다양한 방법을 통해 사용자가 입력한 데이터가 올바른지 확인할 수 있습
informatik.tistory.com
1. Foreign Key란?
Foreign Key(외래키)란 한 테이블의 특정 필드가 다른 테이블의 필드를 참조하도록 설정하는 키를 의미합니다. 이를 통해 두 테이블 간의 관계를 형성하고 데이터 무결성을 보장할 수 있습니다.
👉 Foreign Key Table (외래키 테이블)
- 외래키(Foreign Key)를 설정하는 테이블
- 다른 테이블(체크 테이블)의 필드를 참조함
👉 Check Table (체크 테이블)
- 외래키 테이블이 참조하는 대상 테이블
- 실제로 데이터가 저장되어 있고, 유효성 검사를 수행하는 테이블
2. SBOOK 테이블을 활용한 Foreign Key 확인해보기
SAP 시스템에서는 Foreign Key를 활용하여 예약된 항공편 데이터를 검증하는 대표적인 예제로 SBOOK 테이블이 있습니다.
✅ 외래키 테이블 SBOOK과 체크 테이블 SCOUNTER 관계
- SBOOK (예약된 항공편 정보)
- CARRID (항공사 코드 - 기본키)
- COUNTER (항공사별 카운터)
- SCOUNTER (항공사별 카운터 정보)
- CARRID (항공사 코드 - 기본키)
- COUNTNUM (카운터 번호 - 기본키)
📌 예제 시나리오
사용자가 SBOOK 테이블에 항공편을 예약할 때, CARRID와 COUNTER 값을 입력한다고 가정합니다.
SBOOK 테이블의 외래키 관계를 확인할 수 있는 Input Help / Check를 보니 COUNTER 필드 값은 SCOUNTER 테이블과 외래키 관계인 것을 확인할 수 있습니다. 따라서 COUNTER는 Check Field 체크필드라고 부르고 값이 들어갈때 유효한지 유효하지 않은지 SCOUNTER 테이블을 통해 확인되는 필드입니다.

SBOOK 테이블에 데이터 입력시,
CARRID | COUNTER | COUNTER 값 존재 여부 | 항공기 예약 가능 여부 |
AA | 1 | 존재 | 가능 |
AA | 8 | 존재하지 않음 | 오류 발생 |
➡️ Foreign Key를 활용하면 SBOOK 테이블의 COUNTER 필드가 SCOUNTER 테이블에 존재하는 값인지 자동으로 검증하여 데이터의 무결성을 보장할 수 있습니다.
3. Foreign Key를 예제를 통해 직접 설정해보기
Foreign Key를 설정하려면 ABAP Dictionary(SE11)에서 아래 단계를 따릅니다.
- 참조할 테이블과 필드 준비
- ⭐참조 테이블 필드와 참조할 테이블 필드는 도메인이 같아야 한다.
- Foreign Key 생성
- 필드 선택 → Foreign Key 설정
- 참조 테이블과 필드를 입력 후 체크 필드(Check Field) 로 설정
- Foreign Key의 유형 결정
- Cardinality(카디널리티)를 선택하여 테이블 간 관계를 설정합니다.
📌ZSTDSCORE_07 테이블에서 Foreign Key 설정
외래키 테이블(Foreign Key Table) | 외래키 필드체크 | 테이블(Check Table) | 체크되는 필드 |
ZSTDSCORE_07 | MANDT | T000 | MANDT |
ZSTDSCORE_07 | STDNR | ZSTUDENT_07 | STDNR |
ZSTDSCORE_07 | SUBJECT | ZSTDSUBJECT_07 | SUBJECT |
ZSTDSCORE_07 → 외래키 테이블 (Foreign Key Table)
ZSTUDENT_07, ZSTDSUBJECT_07 → 체크 테이블 (Check Table)
1️⃣ Foreign Key 설정을 위한 테이블
1) ZSTDSCORE_07 (학생 성적 테이블) - 외래키 테이블

2) ZSTUDENT_07 (학생 테이블) - 체크 테이블

3) ZSTDSUBJECT_07 (과목 테이블) - 체크 테이블

2️⃣ ZSTDSCORE_07 (학생 성적 테이블) Foreign Key 설정 과정

📌 어떤 값을 유효성 체크해야 할까? ( = 어떤 필드에 외래키 설정을 해야 할까? )
- MANDT 클라이언트 : 외래키 체크 대상 ✅
- STDNR 학번 : 학생 테이블을 통한 외래키 체크 대상 ✅
- SUBJECT 과목 : 과목 테이블을 통한 외래키 체크 대상 ✅
- SCORE 성적 : 외래키 체크 대상 아님 ❌
1. MANDT(클라이언트) 필드의 외래키 설정
- ZSTDSCORE_07의 MANDT 필드를 T000의 MANDT와 연결
- SAP에서 MANDT 필드는 모든 테이블이 클라이언트 구분을 위해 공통으로 참조하는 필드
- 따라서 모든 테이블에서 T000을 참조해야 합니다.



➡️ ZSTDSCORE_07에 클라이언트 데이터가 존재하려면, 반드시 T000에 존재하는 MANDT 값이어야 함.
2. 학번(STDNR)을 외래키로 설정
- ZSTDSCORE_07 체크테이블의 STDNR을 ZSTUDENT_07의 STDNR과 연결
- 체크 테이블: ZSTUDENT_07
- Foreign Key 설정 시, 테이블 제안이 자동으로 나오지 않음 → COPY 기능 사용

➡️존재하지 않는 학번(STDNR)으로 성적을 입력할 경우, 오류 발생
❓ Foreign Key field type
- Not Specified (지정되지 않음)
- 기본적으로 설정되지 않은 상태이며, 외래키 필드로 사용할 수 있음.
- 주로 스트럭처(Structure)와 외래키(Foreign Key)를 설정할 때 사용됨.
- Non-key-fields/candidates (비키 필드/후보 키 필드)
- 참조하는 테이블의 키 필드가 아닌 필드를 외래키로 설정할 때 사용.
- 즉, 해당 필드가 기본 키(Primary Key)가 아닐 경우에 사용됨.
- Key fields/candidates (키 필드/후보 키 필드)
- 참조하는 테이블의 주 키(Primary Key) 필드를 외래키로 설정할 때 사용.
- 즉, 외래키 필드가 기본 키일 경우 해당 옵션을 선택.
- Key fields of a text table (텍스트 테이블의 키 필드)
- 특정 테이블이 텍스트 테이블(Text Table, 설명을 위한 테이블)인 경우 사용.
- 마스터 테이블의 키 필드와 동일한 키 필드를 포함하는 경우 해당 옵션을 설정.
- 주로 다국어 지원을 위해 사용되며, 언어 키(Language Key, SPRAS) 필드가 포함됨.
3. 과목(SUBJECT)을 외래키로 설정
- ZSTDSCORE_07의 SUBJECT 필드를 ZSTDSUBJECT_07의 SUBJECT과 연결
- 학생 성적 데이터를 입력할 때, 반드시 해당 과목이 과목 테이블(ZSTDSUBJECT_07)에 존재해야 함.
- 체크 테이블: ZSTDSUBJECT_07

➡️존재하지 않는 과목으로 성적을 입력할 경우, 오류 발생
5. Cardinality(카디널리티)란?
Cardinality(카디널리티)는 두 테이블 간 데이터 관계의 형태를 정의하는 속성입니다.
✔ 예제: 학생 테이블과 성적 테이블
- 학생 테이블(ZSTUDENT_07) 1 : CN 성적 테이블(ZSTDSCORE_07)
→ 한 명의 학생이 여러 개의 성적을 가질 수 있으며, 성적이 없을 수도 있음

✔️ T000 (Clients) 테이블의 Cardinality (1:CN)
ZSTUDENT_07, ZSTDSUBJECT_07, ZSTDSCORE_07
✔️ ZSTUDENT_07 (학생 테이블)과 ZSTDSCORE_07 (성적 테이블)의 관계 (1:CN)
✔️ ZSTDSUBJECT_07 (과목 테이블)과 ZSTDSCORE_07 (성적 테이블)의 관계 (1:CN)
6. Foreign Key의 장점
✅ 데이터 무결성 유지: 존재하지 않는 값을 입력할 수 없음
✅ 자동 데이터 검증: 테이블 간 관계를 통해 입력값을 자동 검증
✅ 데이터 일관성 보장: 참조하는 값이 변경되면 종속된 값도 유지됨
'SAP > 데이터 유효성 검사 Input Checks' 카테고리의 다른 글
[SAP] Input Checks 데이터 유효성 검증 (1) 기본 개념 (0) | 2025.02.19 |
---|