관계 대수(Relational Algebra)

avatar
2025.04.07
·
22 min read

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

📌 관계(Relation)의 개념

구성 요소

  • 스키마(Schema): 테이블 구조 정의.
    예) 도서(도서번호, 도서이름, 출판사, 가격)

  • 인스턴스(Instance): 실제 데이터.

  • 튜플(Tuple): 한 행(Row)

  • 속성(Attribute): 열(Column)

  • 도메인(Domain): 속성이 가질 수 있는 값의 집합.

특징

  • 각 속성은 단일 값(atomic value).

  • 속성 이름은 중복되지 않음.

  • 튜플은 중복되지 않음, 순서와 무관.

  • 속성도 순서와 무관.


🔑 Key 개념

4690

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

1. 슈퍼 키(Super Key)

  • 튜플을 유일하게 식별할 수 있는 속성들의 집합.

  • 유일성은 만족하지만 최소성은 만족하지 않을 수 있음.

2. 후보 키(Candidate Key)

  • 슈퍼 키 중 최소성을 만족하는 키.

  • 여러 개가 있을 수 있음.

  • 두개 이상의 attribute로 이루어진 key를 composite key

  • candidate key는 primary key와 alternate key로 구성

3. 기본 키(Primary Key)

  • 후보 키 중 하나를 선정한 대표 키.

  • relation내 tuple을 식별할 수 있는 고유한 값을 가져야 함

  • NULL 불가, 유일해야 하며 변경 불가.

  • 최대한 적은 수의 attribute를 가질 것

  • primary key는 relation schema를 표현할때 밑줄을 그어 표시

4. 대체 키(Alternate Key)

  • 기본 키로 선택되지 않은 나머지 후보 키.

5. 대리 키(Surrogate Key)

  • artificial key

  • 의미 없는 인공 키. 예: 일련번호

  • 복합 키가 너무 복잡하거나 적절한 키가 없을 때 사용.

6. 외래 키(Foreign Key)

  • 다른 테이블의 기본 키를 참조.

  • 테이블 간 관계를 형성 (참조 무결성 유지).

  • 참조하는 relation과 참조되는 relation이 같을 수 있음 (자신의 PK를 참조)


🧱 무결성 제약조건 (Integrity Constraints)

데이터베이스에서 "무결성 제약조건"이란 데이터의 일관성과 정확성을 보장하기 위한 규칙임.
이 제약조건은 데이터 삽입/수정/삭제 시 잘못된 값이 들어오는 것을 막아주는 장치이기도 함.

1. 도메인 무결성 제약조건 (Domain Integrity Constraint)

항목설명

제약 대상

속성 (컬럼 하나하나)

다른 이름

도메인 제약 (domain constraint)

NULL 허용 여부

허용

제약조건의 개수

속성의 수와 동일

기타

튜플 삽입/수정 시 해당 속성 값이 도메인 범위 내에 있어야 함

🧠 예시:
나이 속성은 반드시 20~100 사이의 숫자만 들어올 수 있게 설정할 수 있음.

2. 개체 무결성 제약조건 (Entity Integrity Constraint)

항목설명

제약 대상

튜플 (테이블의 행)

다른 이름

기본키 제약 (primary key constraint)

해당 키

기본키(Primary Key)

NULL 허용 여부

불가

제약조건의 개수

1개

기타

기본키는 반드시 고유하고 존재해야 함. 삽입 시 중복되거나 NULL이면 삽입 거부됨

🧠 예시:
학번이 기본키인 학생 테이블에서 학번=501이 이미 존재하거나, 학번=NULL이면 삽입 불가.

3. 참조 무결성 제약조건 (Referential Integrity Constraint)

항목설명

제약 대상

속성과 튜플

다른 이름

외래키 제약 (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

참조 무결성 유지 확인


📘 관계 대수(Relational Algebra)

관계 대수는 절차적 질의 언어로서, 관계(테이블)를 입력으로 받아 또 다른 관계를 출력으로 생성하는 연산 집합.

🔸 관계 대수의 특징

  • 절차적 언어: 어떤 데이터를 어떻게 연산할지 순서를 명확히 지시

  • 입력과 출력 모두 릴레이션(테이블)

🔹 집합 연산의 개념

관계 대수는 집합 이론에 기반한 연산으로 구성됩니다.
예를 들어, 다음과 같은 두 집합이 있다고 할 때:
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개

📌 단항 연산자 (Unary Operator)

연산자 기호이름 (한글)설명예시

σ (시그마)

선택 (Selection)

조건을 만족하는 튜플(행) 만 선택

σ가격 ≤ 8000(도서)

π (파이)

투영 (Projection)

특정 속성(열) 만 추출. 중복 제거

π이름, 주소(고객)

📌 이항 연산자 (Binary Operators)

이항 연산자는 두 개의 릴레이션에 대해 연산을 수행하는 관계 대수 연산자임.
크게 집합 기반 연산자조인 연산자로 나눌 수 있음.

🔹 1. 집합 연산자 (Set Operators)

연산자 기호이름 (한글)설명예시

합집합 (Union)

두 릴레이션의 튜플을 합침 (중복 제거)

도서A ∪ 도서B

교집합 (Intersection)

두 릴레이션에 공통으로 존재하는 튜플만 선택

도서A ∩ 도서B

차집합 (Difference)

첫 릴레이션에만 존재하고 두 번째에는 없는 튜플 선택

도서A − 도서B

×

카티션 곱 (Cartesian Product)

두 릴레이션의 모든 가능한 튜플 조합 생성

고객 × 주문

🔹 2. 조인 연산자 (Join Operators)

조인은 두 릴레이션을 공통된 속성이나 조건을 기준으로 결합하는 연산.
조인 연산자는 가장 많이 쓰이며, 여러 가지 유형이 존재함.

조인 종류설명조건/기준특징예시

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(도서))

  • 고객과 주문 테이블을 고객번호로 조인하고 이름이 '박지성'인 튜플에서 주문번호, 이름, 판매가격 출력:
    π주문번호, 이름, 판매가격(σ이름='박지성'(고객 ⨝ 주문))


마무리

관계 대수는 단순한 데이터 필터링을 넘어서 관계형 데이터의 연산 논리를 표현하는 강력한 도구임.


📚 공부 팁

  • Selection/Projection 등 기본 연산은 SQL과 매칭해보며 연습

  • 조인 연산은 Natural Join vs Outer Join 차이를 명확히!

  • 키 개념(Primary, Foreign, Candidate 등)은 ERD 설계에서 필수







- 컬렉션 아티클