[Database] 관계대수

PSLeon ㅣ 2023. 9. 19. 11:56

반응형

관계대수

관계 데이터베이스는 릴레이션(테이블)이라는 수학적 개념에 기초하고 있는데 이러한 관계 데이터 모델을 사용하는데 필요한 언어로는 관계대수와 관계해석이 있다.
그중에서 오늘 다뤄볼 관계대수는 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용해 질의하는 방법을 기술하는 언어로써 어떤 데이터를 어떻게 찾는지에 대한 처리 절차를 명시하는 절차적인 언어이다.
관계대수 연산은 피연산자가 릴레이션이고 연산자는 일반 집합 연산자와 순수 관계 연산자를 사용한다. 여기서 일반 집합 연산자는 수학의 집합이론에서 차용된 연산자이고 순수 관계 연산자는 관계 데이터 모델을 위해 고안된 연산자이다.
정리하면, 관계대수는 릴레이션 간 연산을 통해 결과 릴레이션을 찾는 절차를 기술한 언어다.
관계대수의 종류는 크게 일반 집합 연산자와 순수 관계 연산자로 나뉜다.
일반 집합 연산자: 합집합, 교집합, 차집합, 카티션 프로덕트
순수 관계 연산자: 셀렉션, 프로젝션, 조인, 디비전
구분 분류 대상 연산자 이름 기호 설명

일반 집합 연산자기본이항합집합두 릴레이션의 합집합
일반 집합 연산자유도이항교집합두 릴레이션의 교집합
일반 집합 연산자기본이항차집합-두 릴레이션의 차집합
일반 집합 연산자기본이항카티전 프로덕트x두 릴레이션에 속한 모든 튜플의 집합
순수 관계 연산자기본단항셀렉션σ릴레이션에서 조건을 만족하는 튜플을 선택
순수 관계 연산자기본단항프로젝션π릴레이션의 속성을 선택
순수 관계 연산자유도이항조인▷◁두 릴레이션의 공통 속성(attribute)을 기준으로 속성 값이 같은 튜플을 수평으로 결합
순수 관계 연산자유도이항디비전÷부모 릴레이션에 포함된 튜플의 값을 모두 갖고 있는 튜플을 분자 릴레이션에서 추출

위 표에서 단항 연산자와 이항 연산자에 대한 이야기가 나오는데, 피연산자의 개수가 한 개이면 단항 연상자라고 하고 두 개이면 이항 연산자라고 한다.
관계대수식은 대상이 되는 릴레이션과 연산자로 구성되는데 단항 연산자와 이항 연산자에서는 각각 아래와 같이 표현된다.

  • 단항 연산자: 연산자<조건> 릴레이션
    • ex: σsalary > 5000(직원)
  • 이항 연산자: 릴레이션1 연산자<조건> 릴레이션
    • 릴레이션A ∩ 릴레이션B

위와 같이 연산된 관계대수식의 결과는 항상 릴레이션으로 반환된다. 반환된 릴레이션에서는 중복된 튜플은 존재하지 않으며, 만약 중복된 튜플이 있다면 하나만 표시한다.

일반 집합 연산자

합집합(union)

  • 릴레이션A ∪ 릴레이션B
    • 릴레이션A와 릴레이션B의 합집합을 구한다.

A={1, 2, 3}
B={3, 4, 5} 일 때,
A∪B={1, 2, 3, 4, 5}
합집합 연산은 교환 법칙과 결합 법칙이 성립한다.
그리고 A∪B의 차수는 같으며 A∪B의 카디널리티는 같거나 작다.

교집합(intersection)

  • 릴레이션A ∩ 릴레이션B
    • 릴레이션A와 릴레이션B의 교집합을 구한다.

A={1, 2, 3}
B={3, 4, 5} 일 때,
A∩B={3}
교집합 연산도 합집합 연산과 같이 교환 법칙과 결합 법칙이 성립한다.
교집합 역시 차수는 같으며 카디널리티는 같거나 작다.

차집합(different)

  • 릴레이션A - 릴레이션B
    • 릴레이션A와 릴레이션B의 차집합을 구한다.

A={1, 2, 3, 4}
B={2, 4, 5, 6} 일 때,
A-B={1, 3}
차집합 연산의 경우 교환 법칙과 결합 법칙이 성립하지 않는다.
차지합도 차수는 같으며 카디널리티는 같거나 작다.

카티션 프로덕트(cartesian product)

앞서 살펴본 합집합, 교집합, 차집합 연산은 두 릴레이션 간의 수직적 연산이었다면 카티션 프로덕트는 수평적 연산으로 두 릴레이션을 연결시켜 하나로 합칠 때 사용한다.

  • 릴레이션A x 릴레이션B
    • 릴레이션 A의 모든 튜플을 릴레이션 B의 모든 튜플에 연결하여 릴레이션을 구성

A={1, 2}
B={3, 4} 일 때,
AxB={(1, 3), (1, 4), (2, 3), (2, 4)}
카티션 프로덕트 연산은 교환 법칙과 결합 법칙이 성립한다.
카티션 프로덕트는 두 릴레이션을 무조건 수평으로 합친 결과를 반환하기 때문에 결과에 의미가 없어서 셀렉션과 프로젝션 연산을 조합해 의미있는 결과를 찾는 경우 유용하게 사용할 수 있다.



순수 관계 연산자

셀렉션(selection), 프로젝션(projection), 조인(join), 디비전(division)

셀렉션(selection): 행 추출

셀렉션은 말 그대로 릴레이션에서 튜플(행)을 추출하기 위한 연산이다.

  • σ조건식(릴레이션)
  • 릴레이션(테이블)에서 조건을 만족하는 튜플(행)들을 추출

ex: σsalary > 5000(직원) : 직원 릴레이션에서 급여가 5000보다 큰 직원들의 튜플을 추출
결과 릴레이션의 차수(속성(열)들의 개수)는 동일하며 카디날리티(튜플(행)들의 개수)는 작거나 같다.
 
조건이 여러 개인 셀렉트 연산

  • σ조건식1(σ조건식2(A))

= σ조건식2(σ조건식1(A))
= σ조건식1^조건식2(A)

프로젝션(projection): 열 추출

프로젝션은 릴레이션에서 속성의 값들을 추출하기 위한 연산이다.

  • π속성리스트(릴레이션)
    • 릴레이션(테이블)에서 원하는 속성(열)들을 추출

ex: π거주지(회원) : 회원 릴레이션에서 거주지 속성을 추출
ex2: π이름, 주소, 핸드폰(회원) : 고객 릴레이션에서 이름, 주소, 핸드폰 속성 값만을 추출
결과 릴레이션의 차수는 대상 릴레이션의 차수보다 작거나 같고, 카디날리티는 동일하다.

중간 정리

셀렉션 - 행 추출 ~ 행을 추출하니까 결과 릴레이션의 행의 수가 없어질 수도 있고 같을 수도 있으므로 카디날리티는 작거나 같으며 반대로 차수(열의 수)는 동일하다.
프로젝션 - 열 추출 ~ 열을 추출하니까 결과 릴레이션의 열의 수가 없어질 수도 있고 같을 수도 있으므로 차수는 작거나 같으며 반대로 카디날리티(행의 수)는 동일하다.

조인(join)

조인은 두 릴레이션의 공통 속성(attribute)을 기준으로 속성 값이 같은 튜플을 수평으로 결합하는 연산이다. 즉, 두 릴레이션을 카티션 프로덕트 연산을 해서 모든 튜플을 연결한 릴레이션을 구한 후 셀렉션 연산을 한 것으로 정의할 수 있고, 이때 사용되는 셀렉션 연산의 <조건>은 속성 값이 같은지 비교하는 식이다.
 
조인에는 세타조인, 동등조인, 자연조인, 세미조인, 외부조인 등 다양하지만 자연조인에 대해서만 다뤄보고자 한다.
자연조인(natural join)
자연조인은 두 릴레이션의 공통 속성의 값이 같은 튜플끼리 연결하기 때문에 연결할 값이 상대방 릴레이션에 존재하지 않는 경우 조인 결과에서 제외하는 연산이다.

  • 릴레이션A ▷◁ 릴레이션B

일반적으로 조인 연산이라고 하면 자연조인을 의미한다.

디비전(division)

릴레이션A ÷ 릴레이션B

  • 나눗셈 연산을 릴레이션에 적용한 것이다.

Note

  • 셀렉트와 프로젝트를 결합해 사용할 경우, 반드시 셀렉트 연산을 먼저 수행하고, 그 결과 튜플들에 대해 프로젝트 연산을 나중에 수행해야 한다.

관계대수 연산의 우선순위

  • 안쪽 괄호의 연산이 먼저 수행한다.
    • (3 + (4*2)) - 5
        1. 4*2
        2. 3 + (4*2)
        3. (3 + (4*2)) - 5
  • 중첩된 관계 연산에서도 안쪽 괄호의 연산이 먼저 수행
    • π대출도서(σ회원이름=’홍길동’(회원▷◁대출))
        1. 회원▷◁대출
        2. 회원이름=’홍길동’(회원▷◁대출)
        3. π대출도서(σ회원이름=’홍길동’(회원▷◁대출))