Database Design
순환 관계가
변경에 유연한 이유
Recursive Relationship — 하나의 테이블로 무한 계층을 표현하다
01 — 구조
자기 자신을 참조하는 외래 키
CREATE TABLE Employee (
emp_id INT PRIMARY KEY,
name VARCHAR(50),
manager_id INT REFERENCES Employee(emp_id) -- 자기 참조!
);
emp_id INT PRIMARY KEY,
name VARCHAR(50),
manager_id INT REFERENCES Employee(emp_id) -- 자기 참조!
);
| emp_id | name | manager_id | 역할 |
|---|---|---|---|
| 1 | 김대표 | NULL | CEO (루트) |
| 2 | 이부장 | 1 | 부장 |
| 3 | 박과장 | 2 | 과장 |
| 4 | 최대리 | 3 | 대리 |
| 5 | 정사원 | 3 | 사원 |
02 — 비교
고정 컬럼 방식 vs 순환 관계 방식
✗
고정 컬럼 방식
level1_id INT
level2_id INT
level3_id INT
-- 4단계 추가 → ALTER TABLE 필요!
level2_id INT
level3_id INT
-- 4단계 추가 → ALTER TABLE 필요!
계층 깊이가 바뀔 때마다 스키마를 수정해야 합니다. 깊이가 고정되지 않으면 사용할 수 없습니다.
⚠ 구조(DDL) 변경 필요✓
순환 관계 방식
emp_id INT PK
manager_id INT FK → 자기참조
-- 깊이 무한! 행만 추가하면 됨
manager_id INT FK → 자기참조
-- 깊이 무한! 행만 추가하면 됨
계층이 몇 단계든 데이터(행) 추가만으로 표현됩니다. 스키마 변경이 전혀 없습니다.
✓ 데이터(DML)만 변경03 — 유연한 변경
조직 변경 = manager_id 값 하나만 수정
변경 전
변경 후 UPDATE 1건
04 — 깊이 확장
계층이 깊어져도 스키마는 그대로
3단계 → 5단계로 확장 INSERT 2건
05 — 핵심 정리
순환 관계의 4가지 유연성
01
깊이 무제한
계층이 3→7→20단계로 늘어나도 테이블 구조 변경 없이 행(row)만 추가합니다.
02
노드 이동 간편
FK 값 하나만 UPDATE하면 하위 트리 전체가 자동으로 따라 이동합니다.
03
DDL 변경 없음
새로운 분기·계층 추가 시 INSERT만 사용. ALTER TABLE이 필요 없습니다.
04
다양한 구조 표현
트리, 포레스트, 방향 그래프까지 동일한 스키마로 표현 가능합니다.
핵심 원리: 순환 관계는 구조적 복잡성을 스키마(DDL)가 아닌 데이터(DML)로 표현합니다.
따라서 계층의 깊이·폭·형태가 변해도 테이블 설계를 건드리지 않아 변경에 유연합니다.
따라서 계층의 깊이·폭·형태가 변해도 테이블 설계를 건드리지 않아 변경에 유연합니다.
'DB' 카테고리의 다른 글
| 인덱스를 사용할 수 없는 경우 (0) | 2026.02.13 |
|---|---|
| [뷰] 갱신제약 (0) | 2026.02.13 |
| Trigger (0) | 2026.02.11 |
| [정규화] 3정규형 분해 (0) | 2026.02.11 |
| [빅데이터] HDFS(Hadoop Distributed File System) (0) | 2026.02.09 |