관계 대수 (Relational Algebra)
관계 대수란 관계형 데이터베이스에서 정의한 관계, 제약사항에 대한 연산을 제공합니다.
특징
절차적 언어(Procedual Language) 의 특징을 가지고 있습니다.
6개의 기본 연산자 를 가지고 있습니다.
- select (σ, sigma)
- project (π, pi)
- union (∪, union)
- set difference (-, hypen)
- cartesian product (×, times)
- rename (ρ, rho)
위 6개의 연산자로 모든 관계를 서술 할 수 있습니다.
관계대수의 입력으로 하나 또는 두 개의 관계 가 주어지며 결과물로 새로운 관계 를 생성합니다.
프로그래밍 언어의 관점으로 봤을 때, 관계 대수는 표현식 (expression)과 연산자 (operator)의 중첩으로 이루어져 있습니다.
기본 관계 연산자
선택 (select)
σ
cond
(r)
관계 r
에서 조건 cond
에 부합하는 튜플을 구합니다.
cond
에는 속성 간의 비교 연산자(=
<
>
등등)가 사용됩니다.
cond
가 여러 개인 경우 ∨(or)
또는 ∧(and)
가 사용됩니다.
투영 (project)
π
shema
(r)
관계 r
의 속성 shema
에 있는 속성만 보여줍니다.
속성은 ,(comma)
로 구분하여 나열합니다.
이 나열을 스키마(Schema)
라고 합니다.
합집합 (union)
r ∪ s
속성의 도메인이 일치하고 개수가 같은 두 관계 r
과 s
의 합집합을 구합니다.
차집합 (set difference)
r - s
속성의 도메인이 일치하고 개수가 같은 두 관계 r
과 s
의 차집합을 구합니다.
r - s
과 s - r
의 연산 결과가 다릅니다.
카테시안곱 (cartesian product)
r × s
입력 관계에 속하는 튜플의 모든 가능한 조합 결과를 구합니다.
Join
연산의 핵심입니다.
재명명 (rename)
ρ
x(A1, A2, ... An)
(r)
관계 r
의 이름을 x
라고 변경하고, 속성의 이름을 차례대로 A1, A2, ... An
으로 변경합니다.
테이블 이름만 변경할 경우 ()
는 생략 가능합니다.
추가 관계 대수
추가 관계 대수는 기본 관계 연산자를 확장하여 나타낸 관계 대수이다.
기본 관계 연산자로는 복잡한 표현식을 간단하게 줄일 수 있다.
- Assignment (←): 할당
- Intersection (∩): 교집합
- Natural Join (⨝): 자연 조인
- Theta Join (세타 조인)
- Equal Join (동등 조인) → project(π) → Natural Join (자연 조인)
- Outer Join: 외부 조인
- Left Outer Join (⟕)
- Right Outer Join (⟖)
- Fully Outer Join (⟗)
- Division (÷): 나눔
할당 (Assignment)
r ← s
관계 s
를 r
에 할당합니다. s
가 복잡하다고 가정하면 할당 이후에는 간단한 r
만 사용해도 됩니다.
교집합 (Intersection)
r ∩ s
관계 r
과 s
의 튜플 교집합을 구합니다.
r ∩ s
는 r - (r - s)
와 같기 때문에 추가 관계 대수입니다.
자연조인 (Natural Join)
r ⨝ s
는 다음과 같이 정의합니다.
스키마 R = (A, B, C, D)
이고 스키마 S = (B, D, E)
라고 했을 때,
r ⨝ s: π
r.A, r.B, r.C, r.D, s.E
(σ
r.B = s.B∧r.D = s.D
(r × s))
즉, 풀어쓰면 관계 r
과 s
의 카테시안곱 결과에서 겹치는 속성들 중에 값이 동등한 튜플을 선택하고, 두 관계의 속성이 겹치지 않게 출력합니다.
세타 조인은 카테시안곱 결과에서 조인 조건을 적용하여 출력합니다.
동등 조인은 이 조인 조건이 동등 조건임을 뜻합니다.
동등 조인 중에서 중복되는 속성을 투영 연산으로 제거한 것이 자연 조인입니다.
외부조인 (Outer Join)
내부 조인은 조인 조건을 만족하지 않는 튜프를 배제시킵니다.
반면에, 외부 조인은 이러한 튜플도 관계에 포함시킵니다.
이러한 튜플 들의 조인 값은 null 값을 사용합니다.
Left, Right, Fully
는 방향성을 나타냅니다.
차례대로 관계 L
과 R
을 조인하려고 할 때,
Left Outer Join
은 조인 조건에 포함되지 않은 L
의 튜플을 추가합니다.
Right Outer Join
은 조인 조건에 포함되지 않은 R
의 튜플을 추가합니다.
Fully Outer Join
은 조인 조건에 포함되지 않은 L
과 R
의 튜플을 추가합니다.
나눔 (Devision)
r ÷ s
는 r
의 튜플 중에서 s
의 속성을 모두 가지고 있는 튜플을 구합니다.
단 중복된 튜플은 출력하지 않습니다.
참고 문헌
이상호, 데이터베이스 I 이론 및 실제, 진샘미디어(2020), p39 - p60