💡 핵심 인사이트
관계 대수(Algebra)가 데이터를 '어떻게(How)' 찾을지 그 순서와 절차를 명시하는 언어라면, 관계 해석(Calculus)은 "나는 무엇을(What) 원하는가?" 하는 결과의 조건만 명시하는 완벽한 비절차적 언어입니다.
오늘날 우리가 쓰는 SQL의 이론적 기반이 바로 이 관계 해석입니다.
Ⅰ. 관계 해석(Relational Calculus)의 개념
관계 해석은 에드가 코드(E.F. Codd) 박사가 관계형 모델을 제안할 때, 관계 대수와 함께 제안한 데이터 조작 언어(DML)의 수학적 이론입니다. 수학의 프레디킷 해석(Predicate Calculus, 술어 논리)에 기반을 두고 있습니다.
- 비절차적(Non-procedural): 처리를 위한 구체적인 방법이나 순서를 기술하지 않고, "어떤 데이터가 필요한지(What)" 조건만 정의합니다.
- 관계 대수와의 관계: 관계 대수와 관계 해석은 표현 방식만 다를 뿐, 논리적으로 완벽히 동일한 표현력을 가집니다. (관계 대수로 표현 가능한 모든 질의는 관계 해석으로도 표현 가능하며 그 역도 성립합니다. 이를 '관계적으로 완전하다(Relationally Complete)'고 합니다.)
Ⅱ. 관계 해석의 분류
어떤 요소를 기본 변수(기준)로 삼아 조건을 기술하느냐에 따라 두 가지로 나뉩니다.
1. 튜플 관계 해석 (Tuple Relational Calculus)
원하는 결과를 튜플(행) 단위로 변수를 설정하여 기술합니다.
- "내가 원하는 튜플 $t$는 이러이러한 조건을 만족해야 한다."
- 대표적인 구현 언어: QUEL
[표기법 예시] ${ t | P(t) }$ (조건 $P$를 만족하는 튜플 $t$들의 집합)
- 예: 학과가 '컴공'인 학생 튜플 검색 ${ t | t \in 학생 \wedge t.학과 = '컴공' }$
2. 도메인 관계 해석 (Domain Relational Calculus)
원하는 결과를 튜플이 아닌 속성의 도메인(값) 단위로 변수를 설정하여 기술합니다.
- "내가 원하는 값 $x_1, x_2$들은 이러이러한 조건을 만족해야 한다."
- 대표적인 구현 언어: QBE (Query By Example - 표 형태로 조건을 채워 넣는 방식)
[표기법 예시] ${ x_1, x_2, \dots | P(x_1, x_2, \dots) }$
- 예: 학과가 '컴공'인 학생의 학번($x$)과 이름($y$) 검색 ${ x, y | <x, y, '컴공'> \in 학생 }$
Ⅲ. 관계 대수와 관계 해석의 비교 (SQL과의 연관성)
| 구분 | 관계 대수 (Relational Algebra) | 관계 해석 (Relational Calculus) |
|---|---|---|
| 특성 | 절차적 언어 (Procedural) | 비절차적 언어 (Non-procedural) |
| 초점 | 데이터를 어떻게(How) 구할 것인가? | 어떤(What) 데이터를 원하는가? |
| 수학적 기반 | 집합론 (Set Theory) | 술어 논리 (Predicate Logic) |
| 역할 | 데이터베이스 내부의 실행 엔진(Query Plan) 최적화에 사용 | 사용자가 작성하는 **질의어(SQL)**의 설계 기반 |
우리가 사용하는 SQL의 SELECT ... FROM ... WHERE ... 구문은 관계 해석의 "나는 이런 데이터가 원해(What)"라는 비절차적 철학을 따릅니다. DBMS 내부의 옵티마이저(Optimizer)는 이 SQL을 받아들여 내부적으로 관계 대수 트리(How)로 변환하여 실행 경로를 짭니다.
📢 섹션 요약 비유: 관계 해석(SQL)은 택시 기사에게 **"강남역으로 가주세요(What)"**라고 목적지만 말하는 것이고, 관계 대수는 **"첫 번째 교차로에서 우회전하고, 300m 직진 후 좌회전하세요(How)"**라고 네비게이션이 길을 찾아가는 과정입니다.