관계 대수 (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

속성의 도메인이 일치하고 개수가 같은 두 관계 rs의 합집합을 구합니다.

차집합 (set difference)

r - s

속성의 도메인이 일치하고 개수가 같은 두 관계 rs의 차집합을 구합니다.

r - ss - 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

관계 sr에 할당합니다. s가 복잡하다고 가정하면 할당 이후에는 간단한 r만 사용해도 됩니다.

교집합 (Intersection)

r ∩ s

관계 rs의 튜플 교집합을 구합니다.

r ∩ sr - (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.Er.B = s.B∧r.D = s.D(r × s))

즉, 풀어쓰면 관계 rs의 카테시안곱 결과에서 겹치는 속성들 중에 값이 동등한 튜플을 선택하고, 두 관계의 속성이 겹치지 않게 출력합니다.

세타 조인은 카테시안곱 결과에서 조인 조건을 적용하여 출력합니다.

동등 조인은 이 조인 조건이 동등 조건임을 뜻합니다.

동등 조인 중에서 중복되는 속성을 투영 연산으로 제거한 것이 자연 조인입니다.

외부조인 (Outer Join)

내부 조인은 조인 조건을 만족하지 않는 튜프를 배제시킵니다.

반면에, 외부 조인은 이러한 튜플도 관계에 포함시킵니다.

이러한 튜플 들의 조인 값은 null 값을 사용합니다.

Left, Right, Fully는 방향성을 나타냅니다.

차례대로 관계 LR을 조인하려고 할 때,

Left Outer Join은 조인 조건에 포함되지 않은 L의 튜플을 추가합니다.

Right Outer Join은 조인 조건에 포함되지 않은 R의 튜플을 추가합니다.

Fully Outer Join은 조인 조건에 포함되지 않은 LR의 튜플을 추가합니다.

나눔 (Devision)

r ÷ sr의 튜플 중에서 s의 속성을 모두 가지고 있는 튜플을 구합니다.

단 중복된 튜플은 출력하지 않습니다.

참고 문헌


이상호, 데이터베이스 I 이론 및 실제, 진샘미디어(2020), p39 - p60

“관계 대수”, 정보통신기술용어 해설, 2020-08-30 수정, 2020-09-25 접속