데이터베이스 이론 학습 - 관계형 질의 언어

devholic (David)·2023년 3월 19일
0
post-thumbnail

관계형 질의 언어 (Relational Query Language)

  • 질의 언어: 유저가 데이터베이스로부터 정보를 요청할 때 사용되는 언어
  • 관계형 질의언어: 관계형 데이터베이스를 위한 질의 언어
  • 절차적 언어: 유저가 시스템에게 연산의 과정을 구현하라고 지시
  • 비절차적 (선언적) 언어: 유저는 정보를 얻기 위한 구체적인 절차를 주지 않으면서 얻고자 하는 정보를 묘사한다

"순수"한 관계형 질의 언어

  • 관계 대수 (Relational Algebra), 튜플 관계형 미적분학 (Tuple Relational Calculus) 등이 해당된다.
  • 사람들이 사용하는 질의 언어의 기본 기반을 형성

관계 대수

  • 대수학: 연산자와 피연산자
    • 관계대수에서는 다음과 같이 구성된다.
    • 연산자: 기본 연산자 (+ 추가적인 연산자)
    • 피연산자: 관계
  • 절차적 언어
  • 여섯 개의 기본 연산자
    • Select: σ\sigma
    • Project: Π\Pi
    • Union: \cup
    • Set difference: -
    • Cartesian product: ×\times
    • Rename: ρ\rho
  • 연산자들은 하나 이상의 관계를 받고 새로운 관계를 결과로 도출한다.

Selection 🔎

관계 rr이 왼쪽과 같이 있을 때, AABB가 같으면서 DD가 5보다 큰 값만 조회하면 다음과 같이 된다.

Projection ⏏️

Projection은 필요한 열만 선택하여 새로운 관계를 만드는 것을 뜻한다.
관계 rr이 왼쪽과 같이 있을 때, AACC 속성만을 추출해보면 오른쪽과 같이 된다.

Union 🧺

관계 rrss가 위와 같이 있을 때, 합치는 연산을 하면 아래와 같이 된다.

Union과 같은 집합 연산은 다음과 같은 조건들이 필수적으로 선행되어야 한다.

  • 각 관계의 속성 갯수가 같아야 한다.
  • 서로 매칭되는 속성들의 도메인이 같아야 한다.

Set ➖

관계 rrss가 위와 같이 있을 때, 빼는 연산을 하면 아래와 같이 된다.

교집합 ⌛️

교집합은 기본 연산자가 아님에 주의한다. 그 이유는 충분히 Set만으로 표현할 수 있기 때문이다.

Join - Cartesian Product (데카르트 곱) ✖️

관계 rrss가 위와 같을 때, rrss를 join하면 아래와 같은 결과를 얻을 수 있다.

Naming issue ❌

두 관계를 join할 때, 이름이 같은 속성이 있다면 어떤 것의 속성을 결과로 도출해야 할 지 오류가 발생할 수 있다. 이것을 naming issue라고 하며, 각 관계를 구분하기 위해 다음과 같이 작성한다.

Renaming ♻️

자기 자신과의 연산을 하고 싶다고 가정해보자.
r×rr \times r과 같은 표현은 올바르지 않다. 이 문제를 해결하기 위해서는 이름을 살짝 바꾸어서 표현해야 한다.
이 경우에는 다음과 같이 표현하면 된다.

연산의 합성 🥙

이 연산들은 합성하는 것이 가능하다. 즉, rrss를 join한 뒤 AA 속성과 CC 속성의 값이 같은 것을 추출하도록 계산할 수 있다.

Natural join

Natural join에서는 같은 속성이 있을 경우 축약되어서 나온다.

Natural join 또한 기본 연산자가 아니다!


관계형 언어의 요약

  • 각 질의 입력은 테이블이다. (또는 테이블의 집합이다.)
  • 각 질의 출력은 테이블이다.
  • 출력의 모든 데이터는 하나의 입력 테이블에서 등장된다.
  • 관계 대수는 튜링 완전 (turing complete)이 아니다.
profile
개발이 너무 좋아요

0개의 댓글