관계형 데이터베이스(Relational Database)의 핵심 개념인 관계 대수(Relational Algebra)와 그 전제 개념들을 정리합니다.

이미지 출처: https://wiki1.kr/index.php/%EC%88%98%ED%8D%BC%ED%82%A4





데이터베이스에서 "무결성 제약조건"이란 데이터의 일관성과 정확성을 보장하기 위한 규칙임.
이 제약조건은 데이터 삽입/수정/삭제 시 잘못된 값이 들어오는 것을 막아주는 장치이기도 함.
| 항목 | 설명 |
|---|---|
| 제약 대상 | 속성 (컬럼 하나하나) |
| 다른 이름 | 도메인 제약 (domain constraint) |
| NULL 허용 여부 | ✅ 허용 |
| 제약조건의 개수 | 속성의 수와 동일 |
| 기타 | 튜플 삽입/수정 시 해당 속성 값이 도메인 범위 내에 있어야 함 |
🧠 예시:
나이 속성은 반드시 20~100 사이의 숫자만 들어올 수 있게 설정할 수 있음.
| 항목 | 설명 |
|---|---|
| 제약 대상 | 튜플 (테이블의 행) |
| 다른 이름 | 기본키 제약 (primary key constraint) |
| 해당 키 | 기본키(Primary Key) |
| NULL 허용 여부 | ❌ 불가 |
| 제약조건의 개수 | 1개 |
| 기타 | 기본키는 반드시 고유하고 존재해야 함. 삽입 시 중복되거나 NULL이면 삽입 거부됨 |
🧠 예시:
학번이 기본키인 학생 테이블에서 학번=501이 이미 존재하거나, 학번=NULL이면 삽입 불가.
| 항목 | 설명 |
|---|---|
| 제약 대상 | 속성과 튜플 |
| 다른 이름 | 외래키 제약 (foreign key constraint) |
| 해당 키 | 외래키(Foreign Key) |
| NULL 허용 여부 | ✅ 허용 (설정 가능) |
| 제약조건의 개수 | 0~여러 개 |
| 기타 | - 자식 테이블에서 외래키가 부모 테이블의 값과 일치해야 함 - 부모에 없는 값을 참조하려 하면 오류 발생 |
🧠 예시:
학생 테이블의 학과코드는 학과 테이블의 학과코드를 참조함.
→ 존재하지 않는 학과코드(3001 등)는 삽입 ❌
부모 테이블에서 튜플 삭제 시, 자식 테이블이 참조하고 있으면 문제가 발생할 수 있습니다.
이를 방지하기 위해 삭제 옵션을 설정할 수 있습니다:
| 명령어 | 의미 | 예시 |
|---|---|---|
| RESTRICTED | 부모 릴레이션 삭제 거부 | 학과 테이블의 학과코드=1001 삭제 시 학생 테이블이 참조 중이면 삭제 ❌ |
| CASCADE | 자식 튜플도 같이 삭제 | 학과 삭제 시 학생도 같이 삭제 |
| DEFAULT | 자식의 외래키를 기본값으로 변경 | 학과코드가 미리 지정된 값으로 자동 설정 |
| NULL | 자식의 외래키를 NULL로 변경 | 학과 삭제 시 해당 학생의 학과코드가 NULL (허용 설정 필요) |
| 구분 | 도메인 제약 | 개체 무결성 | 참조 무결성 |
|---|---|---|---|
| 제약 대상 | 속성 | 튜플 | 속성과 튜플 |
| 다른 용어 | domain constraint | primary key constraint | foreign key constraint |
| 키 적용 | – | 기본키 | 외래키 |
| NULL 허용 여부 | 허용 | ❌ 불가 | 설정 가능 |
| 개수 | 속성 수와 동일 | 1개 | 0 ~ 여러 개 |
| 삽입/수정 시 유의사항 | 도메인 범위 확인 | 중복/NULL ❌ | 참조 무결성 유지 확인 |

관계 대수는 절차적 질의 언어로서, 관계(테이블)를 입력으로 받아 또 다른 관계를 출력으로 생성하는 연산 집합.
관계 대수는 집합 이론에 기반한 연산으로 구성됩니다.
예를 들어, 다음과 같은 두 집합이 있다고 할 때:
A = {2, 4}
B = {1, 3, 5}
Cartesian Product (카티션 곱)
• 두 집합 A, B의 가능한 모든 조합
• 릴레이션 간 곱 연산이며, 조인(join)의 기초가 됨.
• A × B 결과: {(2,1), (2,3), (2,5), (4,1), (4,3), (4,5)} → 총 6개
| 연산자 기호 | 이름 (한글) | 설명 | 예시 |
|---|---|---|---|
| σ (시그마) | 선택 (Selection) | 조건을 만족하는 튜플(행) 만 선택 | σ가격 ≤ 8000(도서) |
| π (파이) | 투영 (Projection) | 특정 속성(열) 만 추출. 중복 제거 | π이름, 주소(고객) |
이항 연산자는 두 개의 릴레이션에 대해 연산을 수행하는 관계 대수 연산자임.
크게 집합 기반 연산자와 조인 연산자로 나눌 수 있음.
| 연산자 기호 | 이름 (한글) | 설명 | 예시 |
|---|---|---|---|
| ∪ | 합집합 (Union) | 두 릴레이션의 튜플을 합침 (중복 제거) | 도서A ∪ 도서B |
| ∩ | 교집합 (Intersection) | 두 릴레이션에 공통으로 존재하는 튜플만 선택 | 도서A ∩ 도서B |
| − | 차집합 (Difference) | 첫 릴레이션에만 존재하고 두 번째에는 없는 튜플 선택 | 도서A − 도서B |
| × | 카티션 곱 (Cartesian Product) | 두 릴레이션의 모든 가능한 튜플 조합 생성 | 고객 × 주문 |
조인은 두 릴레이션을 공통된 속성이나 조건을 기준으로 결합하는 연산.
조인 연산자는 가장 많이 쓰이며, 여러 가지 유형이 존재함.
| 조인 종류 | 설명 | 조건/기준 | 특징 | 예시 |
|---|---|---|---|---|
| Theta Join | 두 릴레이션의 튜플을 일반 조건에 따라 조인 | 비교 연산자 사용 (=, >, <, 등) | 가장 범용적, 다양한 조건으로 조인 가능 | 고객 ⨝고객.나이 > 주문.수량 주문 |
| Equi Join | Theta Join 중에서 속성 값이 같은 경우만 조인 | = 연산자만 사용 | 중복 속성이 그대로 남음 | 고객 ⨝고객번호 = 고객번호 주문 |
| Natural Join | Equi Join에서 중복 속성을 제거한 형태 | 공통 속성 자동 매칭 (= 조건 암묵적) | 중복된 속성 1개만 남기고 자동 결합, 가장 직관적이고 많이 사용 | 고객 ⨝ 주문 |
| Left Outer Join | 왼쪽 릴레이션 기준 조인, 실패한 튜플도 포함 | 왼쪽 기준, 실패 시 NULL | 왼쪽 데이터는 모두 유지됨 | 고객 ⟕ 주문 |
| Right Outer Join | 오른쪽 릴레이션 기준 조인, 실패한 튜플도 포함 | 오른쪽 기준, 실패 시 NULL | 오른쪽 데이터는 모두 유지됨 | 고객 ⟖ 주문 |
| Full Outer Join | 양쪽 릴레이션 기준, 실패한 튜플도 모두 포함 | 둘 다 실패 시 NULL | 왼쪽/오른쪽 모두 유지, 누락 없는 전체 결합 | 고객 ⟗ 주문 |
도서 테이블에서 가격이 8000원 이하인 도서이름과 출판사 조회:
π도서이름, 출판사(σ가격≤8000(도서))
고객과 주문 테이블을 고객번호로 조인하고 이름이 '박지성'인 튜플에서 주문번호, 이름, 판매가격 출력:
π주문번호, 이름, 판매가격(σ이름='박지성'(고객 ⨝ 주문))
관계 대수는 단순한 데이터 필터링을 넘어서 관계형 데이터의 연산 논리를 표현하는 강력한 도구임.
📚 공부 팁