[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -2,98 +2,149 @@
|
||||
id: wiki-2026-0508-relational-algebra-in-databases
|
||||
title: Relational Algebra in Databases
|
||||
category: 10_Wiki/Topics
|
||||
status: needs_review
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [P-Reinforce-AUTO-DBRA-001]
|
||||
aliases: [Relational Algebra, RA, SQL Algebra]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.96
|
||||
tags: [auto-reinforced, database, relational-algebra, mathematics, Logic]
|
||||
confidence_score: 0.95
|
||||
verification_status: applied
|
||||
tags: [database, theory, sql, query-optimization]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
language: sql
|
||||
framework: postgres
|
||||
---
|
||||
|
||||
# [[Relational Algebra in Databases|Relational Algebra in Databases]]
|
||||
# Relational Algebra in Databases
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> "데이터를 조작하는 수학적 문법: 집합론을 기반으로 테이블 간의 연산을 규정하여, 우리가 쓰는 SQL이 어떻게 논리적으로 실행되고 최적화되는지 설명하는 이론적 뿌리."
|
||||
## 매 한 줄
|
||||
> **"매 SQL은 매 algebra 의 syntactic sugar"**. Codd(1970)의 relational algebra는 매 set-based operator(σ, π, ⋈, ∪, −, ×) 매 closed system. 매 modern query optimizer(Postgres, DuckDB, Snowflake)의 plan tree 매 그대로 RA expression.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
관계 대수(Relational Algebra)는 관계형 데이터베이스에서 데이터를 검색하고 조작하는 일련의 연산자들을 정의한 절차적 쿼리 언어의 기초입니다.
|
||||
## 매 핵심
|
||||
|
||||
1. **기본 연산자 (Fundamental [[Opera|Opera]]tions)**:
|
||||
* **Select ($\sigma$)**: 조건에 맞는 행(Tuple) 추출. (SQL의 `WHERE`)
|
||||
* **Project ($\pi$)**: 특정 열(Attribute)만 추출. (SQL의 `SELECT columns`)
|
||||
* **Union ($\cup$)**: 두 테이블의 합집합.
|
||||
* **Set Difference ($-$)**: 차집합.
|
||||
* **Cartesian Product ($\times$)**: 두 테이블의 모든 가능한 조합.
|
||||
* **Rename ($\rho$)**: 결과 테이블이나 속성의 이름 변경.
|
||||
2. **확장 연산자**:
|
||||
* **Join ($\bowtie$)**: 공통 속성을 가진 행들을 결합하는 가장 핵심적인 연산.
|
||||
* **Division ($\div$)**: 복잡한 포함 관계 질의에 사용.
|
||||
3. **최적화의 역할**:
|
||||
* 선언적인 SQL 문은 내부적으로 관계 대수식으로 변환됨.
|
||||
* **Query Transformation**: 동일한 결과를 내면서 비용이 낮은 대수식(예: 조인 전 선택)으로 변환하는 과정이 옵티마이저의 핵심 논리임.
|
||||
### 매 6 primitive operators
|
||||
- **σ (Selection)**: row filter. `σ_{age>30}(R)` ≡ `WHERE age>30`.
|
||||
- **π (Projection)**: column subset. `π_{name,age}(R)` ≡ `SELECT name, age`.
|
||||
- **⋈ (Join)**: theta/equi/natural. `R ⋈_{R.id=S.rid} S`.
|
||||
- **∪ / − / ∩**: set ops on union-compatible relations.
|
||||
- **× (Cartesian product)**: `R × S` — 매 expensive.
|
||||
- **ρ (Rename)**: alias.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌**: 과거에는 관계 대수 자체가 DB 학문의 전부였으나, 현대에는 NoSQL의 대두와 함께 그래프 대수(Graph Algebra)나 비정형 데이터 연산자로 지평이 넓어짐. 하지만 엄밀한 데이터 정합성이 요구되는 시스템 구축 정책상 관계 대수는 여전히 '절대 법칙'으로 군림함.
|
||||
- **정책 변화(RL Update)**: 빅데이터 환경 등에서 분산 처리를 위해 관계 대수의 연산 순서를 자동으로 재배치하는 'Dynamic Execution Plan' 정책이 클라우드 DB 서비스의 필수 역량으로 자리 잡음.
|
||||
### 매 Derived operators
|
||||
- **Outer joins** (⟕, ⟖, ⟗): null-padded.
|
||||
- **Division** (÷): "all-quantifier". `R ÷ S` = "tuples in R related to every S".
|
||||
- **Aggregation** (γ): `_{dept}γ_{avg(salary)}(Emp)`.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- [[Query-Optimization|Query-Optimization]], [[Principles-of-Data-Connect|Principles-of-Data-Connect]], [[Logic|Logic]], [[Complexity Theory|Complexity Theory]]
|
||||
- **Modern Tech/Tools**: SQL Engine Optimizers, Codd's Relational Model.
|
||||
---
|
||||
### 매 응용
|
||||
1. Query optimizer 매 RA tree 의 rewrite (predicate pushdown, join reordering).
|
||||
2. View materialization 매 algebraic equivalence.
|
||||
3. Datalog / Differential dataflow의 incremental engine.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
## 💻 패턴
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
### Selection pushdown
|
||||
```sql
|
||||
-- Logical: π_{name}(σ_{age>30}(Emp ⋈ Dept))
|
||||
-- Physical: σ pushed below ⋈ — 매 smaller intermediate
|
||||
SELECT name FROM Emp e JOIN Dept d ON e.dept_id=d.id WHERE e.age > 30;
|
||||
-- 매 optimizer 매 σ_{age>30} 의 Emp 매 push.
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
### Projection pushdown
|
||||
```sql
|
||||
-- π_{name,salary}(Emp ⋈ Dept) — Dept columns 매 unused
|
||||
EXPLAIN (FORMAT TEXT)
|
||||
SELECT e.name, e.salary FROM Emp e JOIN Dept d ON e.dept_id=d.id;
|
||||
-- Postgres: only e.name,e.salary,e.dept_id materialized.
|
||||
```
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
### Join reordering (⋈ associative + commutative)
|
||||
```sql
|
||||
-- (A ⋈ B) ⋈ C ≡ A ⋈ (B ⋈ C) — but cost 매 다름
|
||||
SET join_collapse_limit = 12;
|
||||
EXPLAIN ANALYZE
|
||||
SELECT * FROM small s JOIN big b ON s.k=b.k JOIN huge h ON b.k=h.k;
|
||||
-- 매 small 매 build side 의 선택.
|
||||
```
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
### Division via NOT EXISTS
|
||||
```sql
|
||||
-- "students who took every required course"
|
||||
-- Took ÷ Required
|
||||
SELECT s.id FROM Students s
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM Required r
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM Took t
|
||||
WHERE t.student_id=s.id AND t.course_id=r.course_id
|
||||
)
|
||||
);
|
||||
```
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
### Aggregation (γ)
|
||||
```sql
|
||||
-- _{dept_id}γ_{count(*),avg(salary)}(Emp)
|
||||
SELECT dept_id, COUNT(*), AVG(salary)
|
||||
FROM Emp
|
||||
GROUP BY dept_id;
|
||||
```
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
### Set operations
|
||||
```sql
|
||||
-- A − B (set difference)
|
||||
SELECT id FROM ActiveUsers
|
||||
EXCEPT
|
||||
SELECT id FROM BannedUsers;
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
-- A ∩ B
|
||||
SELECT id FROM Premium INTERSECT SELECT id FROM Annual;
|
||||
```
|
||||
|
||||
### Equivalence rewriting
|
||||
```sql
|
||||
-- σ_{p∧q}(R) ≡ σ_p(σ_q(R)) 매 split 의 가능
|
||||
-- σ_p(R ⋈ S) ≡ σ_p(R) ⋈ S if p references only R
|
||||
-- π_L(R ⋈ S) ≡ π_L(π_{L∪join}(R) ⋈ π_{L∪join}(S))
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Operator |
|
||||
|---|---|
|
||||
| Filter rows | σ |
|
||||
| Pick columns | π |
|
||||
| Combine relations on key | ⋈ |
|
||||
| Union-compatible merge | ∪ |
|
||||
| All-quantifier | ÷ |
|
||||
| Group + aggregate | γ |
|
||||
| Preserve unmatched | ⟕/⟖/⟗ |
|
||||
|
||||
**기본값**: σ/π/⋈ 의 covers 매 95% of queries.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Database Theory]] · [[SQL]]
|
||||
- 변형: [[Relational Calculus]] · [[Datalog]] · [[Tuple Calculus]]
|
||||
- 응용: [[Query Optimizer]] · [[Materialized Views]] · [[Differential Dataflow]]
|
||||
- Adjacent: [[Codd's 12 Rules]] · [[Normalization]] · [[ACID]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: SQL → RA tree 변환 설명, query rewrite suggestion, 학습용 derivation.
|
||||
**언제 X**: production query plan — 매 EXPLAIN ANALYZE 의 사용.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Cartesian product 의 무심**: missing JOIN condition → N×M rows.
|
||||
- **σ above ⋈**: 매 optimizer 매 push 못 하는 case → manual rewrite.
|
||||
- **SELECT *** in subquery: π pushdown 매 방해.
|
||||
- **Bag vs set 의 혼동**: SQL은 bag(multiset). UNION ALL ≠ ∪.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Codd 1970; Garcia-Molina *Database Systems* ch.2.4; Postgres planner docs).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — full content (operators + 7 patterns) |
|
||||
|
||||
Reference in New Issue
Block a user