데이터베이스: 관계대수

2023-06-11 00:03:00

데이터 모델의 구성

데이터 모델 = 데이터 구조 + 제약조건 + 연산

관계 데이터 연산

관계대수

릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어

  • DBMS 내부의 처리 언어로 사용
  • 절차 언어
  • 어떻게 (how)의 관점
  • 순수 관계 연산자, 일반 집합 연산자

관계해석

어떤 데이터를 찾는지 (결과)만 명시하는 선언적인 언어

  • SQL의 이론적인 기반 제공
  • 비절차 언어
  • 무엇(What)의 관점
  • 튜플 관계 해석, 도메인 관계 해석

관계의 수학적 의미

  • 릴레이션의 수학적 정의

A = {2, 4}, B = {1, 3, 5} → 릴레이션 R은 두 튜플의 카티션 프로덕트의 부분집합으로 정의

  • 도메인: 카티션 프로덕트의 기초 집합 각각이 가질 수 있는 값의 범위
  • 원소 개수가 n인 집합 S의 부분집합의 개수: 2n2^n → 카티션 프로덕트 부분집합의 개수는 2A×B2^{|A|\times|B|}
  • 릴레이션 역시 집합이므로 집합에서 가능한 연산을 적용 가능 (합집합, 교집합, 카티션 프로덕트)
  • 현실 세계 적용

학번 = {2, 4}, 과목 = {데이터베이스, 자료구조, 프로그래밍}

  • 두 집합의 카티션 프로덕트 학번×\times과목 = {(2, 데이터베이스), (2, 자료구조), (2, 프로그래밍), (4, 데이터베이스), (4, 자료구조), (4, 프로그래밍)} *두 집합의 원소 쌍의 가능한 모든 조합
  • 학번×\times과목으로 이루어진 수강 집합 테이블: 릴레이션

관계 대수 연산자

  • 일반 집합 연산자

수학의 집합이론에서 차용. 피연산자 2개 필요

  • 합/교/차집합

    • 수학의 집합 연산과 동일
    • union-compatible 해야함
      • 두 릴레이션의 차수가 같아야 함
      • 두 릴레이션에서 서로 대응되는 속성의 도메인이 같아야 함
    • 합집합
      • 차수: 릴레이션 R과 S의 차수와 같음
      • 카디널리티: 릴레이션 R과 S의 카디널리티를 더한 것과 같거나 적어짐
      • 교환/결합 가능
    • 교집합
      • 차수: 릴레이션 R과 S의 차수와 같음
      • 카디널리티: 릴레이션 R과 S의 어떤 카디널리티보다 크지 않음
      • 교환/결합 가능
    • 차집합
      • 차수: 릴레이션 R과 S의 차수와 같음
      • 카디널리티
        • R-S: 릴레이션 R의 카디널리티와 같거나 적음
        • S-R: 릴레이션 S의 카디널리티와 같거나 적음
  • 카티션 프로덕트: 릴레이션 R의 각 튜플과 릴레이션 S의 각 튜플들을 모두 연결하여 만들어진 새로운 튜플을 반환

    • 차수: 릴레이션 R과 S의 차수의 합
    • 카디널리티: 릴레이션 R과 S의 카디널리티의 곱
  • 순수 관계 연산자: 릴레이션의 구조와 특성을 이용하는 연산자

    • 셀렉트(σ\sigma): σ(R)\sigma_{조건}(R) 표현을 통해 릴레이션 R에서 조건을 만족하는 튜플들을 반환 비교 연산자, 논리 연산자를 이용해 작성
      • 교환적 특징
    • 프로젝트(π\pi):  π(R)\pi_{속성리스트}(R) 표현을 통해 릴레이션 R 내의 속성리스트로 이루어진 값으로만 구성된 튜플들 반환
      • 수직적 부분집합
      • 동일한 튜플은 중복되지 않고 한 번만 나타남
    • 리네임(ρ\rho): ρtemp(σ=())\rho_{temp}(\sigma_{학과='컴퓨터공학'}(학생)) 표현으로 관계 대수 연산으로 만들어지는 릴레이션을 참조하기 위해 이름을 설정
    • 조인: 공통 속성을 기준, 수평적으로 결합해 릴레이션 R과 S의 튜플들을 연결해 만들어진 새로운 튜플들을 반환
      • 조인에 참여하는 속성이 서로 동일한 도메인으로 구성
      • 공통 속성의 속성 값이 동일한 튜플만을 반환
      • 구분
        • 기본 연산: 세타조인(θ\bowtie_\theta), 동등조인(\bowtie), 자연조인(N\bowtie_N)
          • 세타조인(RAθBSR \bowtie_{A\theta B} S): 자연조인에 비해 더 일반화된 조인, 주어진 조인 조건을 만족하는 두 릴레이션의 모든 튜플을 연결/생성된 새로운 튜플로 결과 릴레이션 구성
            • 차수: 두 릴레이션의 차수의 합
          • 동등조인: θ\theta 연산자가 “=”인 세타 조인
          • 자연조인(N(A,B)\bowtie_{N(A,B)}): 동등조인에서 참여한 속성이 두 번 나오지 않도록 두번째 속성을 제거한 결과 반환
  • 확장된 조인 연산: 세미조인(,\ltimes, \rtimes), 외부조인(⟕, ⟖, ⟗)

    • 세미조인(R(r,s)S,R(r,s)SR \ltimes_{(r,s)} S, R\rtimes_{(r,s)} S ): 조인 속성으로 프로젝트 연산을 수행한 릴레이션을 이용하는 조인 (조인 속성만 노출, 기호가 닫힌 쪽 릴레이션의 튜플만)
      • 교환X
      • 조인 속성만 노출
      • 기호가 닫힌 쪽 릴레이션의 튜플만 반환
      • ex) 고객\ltimes주문 : 고객 릴레이션에서 자연 조인 연산에 참여할 수 있는 튜플만 선택→ 주문한 적 있는 고객의 데이터만 검색
    • 외부조인(⟕, ⟖, ⟗): 자연조인 연산에서 제외되는 튜플들도 결과 릴레이션에 포함시키는 조인
      • 두 릴레이션에 있는 모든 튜플을 결과 릴레이션에 포함
      • 값이 없는 대응 속성에는 NULL을 채워서 반환
      • 모든 속성을 보여주는 기준 릴레이션 위치에 따라 left/right/full로 나뉨
  • 연습문제

  • 질의 2-9 마당서점의 고객과 고객의 주문 내역을 보이시오.

    • 1 고객 기준으로 주문내역이 없는 고객도 모두 보이시오.
    • 2 주문내역이 없는 고객과, 고객 릴레이션에 고객번호가 없는 주문을 포함하여 모두 보이시오.
    • 3 주문내역 기준으로 고객 릴레이션에 고객번호가 없는 주문도 모두 보이시오.
  • 디비전(÷\div): R ÷\div S 표현을 통해 릴레이션 S의 모든 튜플과 관련 있는 릴레이션 R의 튜플들을 반환

    • 릴레이션2의 모든 튜플과 관련 있는 릴레이션1의 튜플로 결과 릴레이션을 구성
    • 릴레이션1이 릴레이션2의 모든 속성을 포함하고 있어야 연산이 가능 → 도메인이 동일해야함
    • 속성 A와 B로 이루어진 릴레이션 R, 속성 B로 이루어진 릴레이션 S의 디비전 연산 → S의 속성 B와 동일하게 대응하는 릴레이션 R의 A의 속성 반환
    • ex) R ÷\div S → R과 S의 공통 속성이 같은 튜플들에서 공통 속성을 제거한 튜플
  • 관계대수식

    • 관계대수의 연산을 수행하기 위한 식
    • 릴레이션 간 연산을 통해 결과 릴레이션을 찾는 절차를 기술

구성

  • 대상이 되는 릴레이션과 연산자로 구성
  • 반환되는 결과 또한 릴레이션

형태

  • 단항 연산자: 연산자<>_{<조건>}릴레이션
  • 이항 연산자: 릴레이션1 연산자<>_{<조건>} 릴레이션2
  • 관계대수식의 적용 순서: 괄호 안의 식이 우선, 왼쪽 → 오른쪽 진행