목차
2, 정규화
2-3. 관계와 조인의 이해
2-3-1. 반정규화란?
2-3-2. 반정규화의 목적
2-3-3. 슈퍼타입 / 서브타입 관계
2-3-4. 슈퍼타입 / 서브타입 관계테이블 병합
2. 정규화
2-3. 관계와 조인의 이해
1️⃣ 반정규화란?
반정규화란 조회 성능을 향상시키기 위해 정규화된 테이블을 다시 병합하거나 중복을 허용하는 작업이다.
앞서 정규화는 데이터 중복을 줄이고 이상 현상을 방지하기 위해 테이블을 분리하는 과정이라고 했다.
하지만 테이블을 많이 분리하면 데이터를 조회할 때 여러 테이블을 조인해야 한다.
조인이 많아지면 SQL이 복잡해지고, 데이터 양이 많을 경우 조회 성능이 떨어질 수 있다.
그래서 실무에서는 성능을 고려해 일부 테이블을 다시 합치는 반정규화를 수행하기도 한다.
2️⃣ 반정규화의 목적
반정규화의 대표적인 목적은 조회 성능 향상이다.
정규화를 통해 테이블을 분리하면 데이터 중복은 줄어들지만, 조회 시 여러 테이블을 연결해야 하는 경우가 많아진다.
이 때 조인이가 유니온 연산이 자주 발생하면 성능이 저하될 수 있다.
즉, 조회 성능이 중요한 경우에는 테이블 병합을 통해 반정규화를 고려할 수 있다.
3️⃣ 슈퍼타입 / 서브타입 관계
슈퍼타입과 서브타입은 공통 속성과 개별 속성을 나누어 관리할 때 사용하는 구조이다.
| 구분 | 설명 |
| 슈퍼타입 | 여러 대상이 공통으로 가지는 속성 |
| 서브타입 | 각 대상이 개별적으로 가지는 속성 |
예를 들어 고객을 개인고객과 법인고객으로 나누어 생각해보자.
개인고객과 법인고객은 모두 고객번호, 고객명, 연락처를 가진다.
이처럼 공통으로 가지는 속성은 슈퍼타입에 해당한다.
반면 개인고객의 주민등록번호와 법인고객의 사업자등록번호처럼 각 유형별로만 필요한 속성은 서브타입에 해당한다.
4️⃣ 슈퍼타입 / 서브타입 관계테이블 병합
슈퍼타입 / 서브타입 관계에서는 업무에서 데이터가 어떻게 사용되는지에 따라 테이블 구조를 선택한다.
🔹 One to One Type
슈퍼타입과 서브타입을 각각 개별 테이블로 구성하는 방식이다.
공통 속성은 슈퍼타입 테이블에 두고, 각 유형별 속성은 서브타입 테이블에 두는 방식이다.
이 방식은 개별 테이블 단위로 트랜잭션이 발생할 때 적합하다.
예를 들어 개인고객 업무는 개인고객 테이블 중심으로 처리되고, 법인고객 업무는 법인고객 테이블 중심으로 처리된다면 각각의 테이블을 분리해서 관리할 수 있다.
📌 핵심 정리
- 슈퍼타입과 서브타입을 각각 개별 테이블로 관리한다.
- 개별 트랜잭션이 주로 발생할 때 적합하다.
- 불필요하게 테이블을 합치지 않아도 된다.
🔹 Plus Type
슈퍼타입과 서브타입을 병합하여 구성하는 방식이다.
정규화된 구조에서는 슈퍼타입과 서브타입이 분리되어 있다.
따라서 슈퍼타입의 공통 정보와 서브타입의 개별 정보를 함께 조회하려면 조인 연산이 필요하다.
이런 조회가 자주 발생하면 조인으로 인해 조회 성능이 저하될 수도 있다.
이 때 슈퍼타입과 서브타입을 합쳐서 테이블을 구성하면 조인을 줄일 수 있다.
📌 핵심 정리
- 슈퍼타입과 서브타입을 함께 조회하는 경우에 사용한다.
- JOIN 연산으로 인한 성능 저하를 줄이기 위한 방식이다.
- 서브타입별로 슈퍼타입 정보를 포함해 테이블을 구성한다.
🔹 Single Type
슈퍼타입과 모든 서브타입을 하나의 테이블로 통합하는 방식이다.
전체 데이터를 한 번에 조회하는 트랜잭션이 자주 발생할 때 사용한다.
슈퍼타입과 서브타입이 각각 분리되어 있으면 전체 데이터를 조회하기 위해 여러 테이블을 조회한 뒤 UNION 연산을 해야 할 수 있다.
UNION 연산이 많아지면 성능이 저하될 수 있으므로, 전체를 하나의 테이블로 통합해 조회 성능을 높일 수 있다.
다만, 하나의 테이블에 모든 속성을 넣기 때문에 특정 유형에서는 사용하지 않는 컬럼이 생길 수 있다.
📌 핵심 정리
- 슈퍼타입과 모든 서브타입을 하나의 테이블로 통합한다.
- 전체 조회 트랜잭션이 많을 때 적합하다.
- UNION 연산으로 인한 성능 저하를 줄일 수 있다.
- 사용하지 않는 컬럼이 생겨 NULL 값이 많아질 수 있다.
📝 요약정리
| 구분 | 설명 | 적합한 경우 |
| One to One Type | 슈퍼타입과 서브타입을 각각 분리 | 개별 트랜잭션이 발생하는 경우 |
| Plus Type | 슈퍼타입과 서브타입을 병합 | 슈퍼타입 + 서브타입 조회가 많은 경우 |
| Single Type | 전체를 하나의 테이블로 통합 | 전체 조회 트랜잭션이 많은 경우 |
🔗 출처
'자격증 > SQLD' 카테고리의 다른 글
| [SQLD][아이리포]09. 정규화 | 본질식별자 | 인조식별자 (0) | 2026.07.05 |
|---|---|
| [SQLD][아이리포]08. 정규화 | NULL과의 연산 | 단일행 | 다중행 (0) | 2026.07.04 |
| [SQLD][아이리포]06. 정규화 | 정규화 절차 | 정규형 | BCNF (0) | 2026.06.28 |
| [SQLD][아이리포]05. 식별자 | 식별자 관계 | 비식별자 관계 (0) | 2026.06.27 |
| [SQLD][아이리포]03-04. 속성 | 속성과 도메인 | 인스턴스 (0) | 2026.06.22 |