[DataBase] 관계 대수

nbh·2023년 10월 31일

관계대수란

관계대수란, 내가 원하는 릴레이션을 릴레이션 간 연산을 통해 찾는 절차를 기술한 언어이다.
릴레이션연산자로 구성되어 있으며, 연산의 결과는 릴레이션이다.
관계대수식의 결과 릴레이션을 또 다른 관계 대수 연산자의 입력으로 사용할 수 있어서, 관계 대수 연산자들을 여러개 조합할 수 있다.

관계 대수의 완전성

관계대수의 기본연산자인 셀렉트, 프로젝트, 합집합, 차집합, 카티션 프로덕트 만으로도 모든 질의를 표현할 수 있다. 어떤 DB 언어가 어떤 임의의 질의어를 가진다고 해도, 저 5가지 질의어를 모두 표현할 수 있다면 관계적으로 완전하다고 한다.

관계 대수 연산자의 분류

  • 단항 연산자 vs 다항 연산자
  • 기본 연산자 vs 관계 연산자

관계 대수 연산자

1. σ 셀렉트

릴레이션에서 원하는 투플(행)을 추출하기 위한 연산자이다.
단항 연산자이며, 찾고자하는 투플의 조건을 명시하고, 그 조건에 만족하는 투플을 반환한다.

σ셀렉트 조건(R)

결과 릴레이션의 차수 = 입력 릴레이션의 차수
결과 릴레이션의 카디널리티 ≤ 입력 릴레이션의 카디널리티

셀렉트 조건은 릴레이션의 속성, 상수, 비교 연산자(=, <, >, ≤, ≥, >), 논리 연산자(AND, OR)를 조합하여 사용한다.

예시

  • 등급이 Gold이면서 적립금이 2000 이상인 고객을 검색하라
    σ등급=Gold AND 적립금2000(고객)\boldσ _{등급='Gold' \ AND \ 적립금 ≥ 2000} (고객)

2. π 프로젝트

릴레이션에서 원하는 속성(열)을 추출하기 위한 연산자이다.
단항 연산자이다.
셀렉트의 결과 릴레이션은 중복 투플이 없지만, 프로젝트 결과 릴레이션은 중복된 투플이 존재 가능하다. 다만, 최종 결과 릴레이션에선 중복된 투플은 제거된다. (key 속성이 없어질 수 있어서)

π속성리스트(R)

결과 릴레이션의 차수 ≤ 입력 릴레이션의 차수
결과 릴레이션의 카디널리티 = 입력 릴레이션의 카디널리티

프로젝트 조건도 셀렉트와 마찬가지로 릴레이션의 속성, 상수, 비교 연산자(=, <, >, ≤, ≥, >), 논리 연산자(AND, OR)를 조합하여 사용한다.

예시

  • 고객의 고객 이름, 등급, 적립금을 검색하라
    π고객이름,등급,적립금(고객)\boldπ _{고객이름, 등급, 적립금} (고객)

셀렉트와 프로젝트를 모두 사용한 예시

  • 등급이 'gold'인 고객의 이름과 나이를 검색하라.
    π고객이름,나이(σ등급=gold(고객))\bold{π} _{고객 이름, 나이} (\bold{σ} _{등급='gold'}(고객))

3. 집합 연산자

릴레이션은 투플들의 집합이기 때문에 집합 연산을 릴레이션에 적용할 수 있다.

🍀 종류 : 합집합, 교집합, 차집합

이항연산자이다.

집합 연산자의 입력으로 사용되는 2개의 릴레이션은 합병 가능 조건을 만족해야한다

🍀 합병 가능 조건

  1. 두 릴레이션의 속성 개수가 같고, 대응되는 속성의 도메인이 같다. (속성 이름은 달라도 됨)
  2. 두 릴레이션 R1(A1,A2,,An)R1(A_1, A_2, \dots, A_n)R2(B1,B2,,Bn)R2(B_1, B_2, \dots, B_n)이 합병 가능할 필요 충분 조건은,n=mn=m이고, 모든 1in1\leq i \leq n에 대해 domain(Ai)=domain(Bi)domain(A_i)=domain(B_i)

합병 불가능한 예시

  • 고객(고객번호, 이름, 주소, 핸드폰)
  • 주문(주문번호, 고객번호, 도서번호, 판매가격, 주문일자)

고객 릴레이션과 주문 릴레이션은 속성 개수가 다르므로 합병이 불가능하다.

∪ 합집합

두 릴레이션 R과 S의 합집합은 R 또는 S에 존재하는 모든 투플들로 이루어진 릴레이션이다.

R∪S

단, 결과 릴레이션에서 중복된 투플들은 제외된다.

결과 릴레이션의 차수 = R과 S의 차수
결과 릴레이션의 카디널리티 ≤ (R의 카디널리티 + S의 카디널리티)

결과 릴레이션의 속성 이름들은 R의 속성들의 이름과 같거나 S의 속성들의 이름과 같음

∩ 교집합

두 릴레이션 R과 S의 교집합은 R과 S에 모두 존재하는 투플들로 이루어진 릴레이션이다.

R∩S

결과 릴레이션의 차수 = R과 S의 차수
결과 릴레이션의 카디널리티 ≤ R의 카디널리티
AND
결과 릴레이션의 카디널리티 ≤ S의 카디널리티

결과 릴레이션의 속성 이름들은 R의 속성들의 이름과 같거나 S의 속성들의 이름과 같음

ㅡ 차집합

두 릴레이션 R과 S의 차집합은 R에는 존재하지만 S에는 존재하지 않는 투플들로 이루어진 릴레이션이다.

RㅡS

결과 릴레이션의 차수 = R과 S의 차수
R - S의 카디널리티 ≤ R의 카디널리티

결과 릴레이션의 속성 이름들은 R의 속성들의 이름과 같거나 S의 속성들의 이름과 같음

4. X 카티션 프로덕트

두 릴레이션을 연결시켜 하나로 합칠 때 사용하며, R과 S의 릴레이션으로 만들 수 있는 모든 조합으로 이루어진 릴레이션이다.
릴레이션의 크기가 매우 클 수 있어 카티션 프로덕트 자체는 유용한 연산자가 아니다.
동일한 속성이 두 릴레이션에 포함되어있을 수 있기 때문에 속성 이름 앞에 릴레이션 이름을 붙인다.

R × S

결과 릴레이션의 차수 = R의 차수 + S의 차수
결과 릴레이션의 카디널리티 = R의 카디널리티 X S의 카디널리티

5. 조인

릴레이션 하나로 원하는 데이터를 얻을 수 없어, 관계가 있는 여러 릴레이션을 함께 사용해야 하는 경우 사용한다.
두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 투플들을 결합하며, 공통 속성의 값이 동일한 투플만을 반환한다.
조인을 수행하기 위해서는 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성되어야한다.

⋈ 동등 조인

조인에 참여하는 두 릴레이션의 속성 값을 비교하여 그 값이 같은 투플만 반환한다.

Rr=sSR\bowtie_{r=s}S

기본 연산자로 풀어낸 식은
Rr=sSσr=s(R×S)R\bowtie_{r=s}S\equiv\sigma_{r=s}(R\times S)

⋈N 자연 조인

동등 조인에서 조인에 참여한 속성이 두 번 나오지 않도록 두 번째 속성을 제거한 결과를 반환한다.

RN(r,s)SR\bowtie_{N(r,s)}S

R(r,s)SR\bowtie_{(r,s)}S
RNSR\bowtie_{N}S
RSR\bowtie S 와 같이 나타낸다.

여러가지 조인 연산자들 중에서 가장 자주 사용된다.

⟕ 외부 조인

자연 조인시 조인에 실패한 투플들을 모두 보여주되, 값이 없는 대응 속성에는 NULL값을 채워서 반환한다.
모든 속성을 보여주는 기준 릴레이션의 위치에 따라 왼쪽 외부조인, 오른쪽 외부조인, 완전 외부조인으로 나뉜다.

왼쪽 외부조인

릴레이션 R과 S의 왼쪽 외부조인은 R의 모든 투플들을 결과에 포함시키고, 만일 S에 관련된 투플이 없으면 S의 속성들은 NULL값으로 채운다.

오른쪽 외부조인

릴레이션 R과 S의 오른쪽 외부조인은 S의 모든 투플들을 결과에 포함시키고, 만일 R에 관련된 투플이 없으면 R의 속성들은 NULL값으로 채운다.

완전 외부조인

릴레이션 R과 S의 완전 외부조인은 R과 S의 모든 투플들을 결과에 포함시키고, 관련된 투플이 없으면 그 속성들은 NULL값으로 채운다.

0개의 댓글