CS/데이터베이스

[데이터베이스] KOCW 용환승 교수님 강의 - 1. 관계 대수와 SQL

pythaac 2022. 3. 29. 01:19

  • 관계 해석과 관계 대수
    • 관계 데이터 모델에서 지원되는 정형적인 언어
      • 관계 해석(relational calculus)
        - 원하는 데이터(what)만 명시하는 선언적인 언어
      • 관계 대수(relational algebra)
        - 원하는 데이터와 어떻게(how) 질의를 수행할 것인지 명시하는 절차적인 언어
    • 대수(algebra)란?
      • 수와 수의 연산
      • 연산자와 피연산자로 구성
      • 관계 대수에서 피연산자는 relation
      • relation을 input으로 relation을 output
      • 2개 relation일수도, 1개 relation일수도 있음

  • 관계 연산자들
    • 필수 연산자
      - 바로 사용 가능한 연산자 (primitive)
    • 유도된(derived) 연산자
      - 필수 연산자들로 만들 수 있는(유도된) 연산자
    • 카티션 프로덕트 (데카르트 프로덕트)
      - 두 relation의 모든 조합
      - 3개 튜플과 5개 튜플 relation의 카티션 프로덕트는 15개 튜플
    • 우리가 SQL로 작성한 내용을 DBMS에서 관계 대수 연산식으로 처리

  • selection
    • 조건을 만족하는 tuple들의 집합

  • projection
    • 한 relation의 attribute들의 부분집합
    • column의 중복을 제거해야함(집합)
    • 그러나 중복 제거에 오버헤드가 크므로, 중복 제거 명령이 없으면 중복 튜플을 허용

  • union (합집합)
    • 두 relation의 합집합
    • 아무 relation끼리 union할 수 없음
    • 합집합 호환(union compatible)을 만족해야함
      - 두 relation의 attribute 수가 같고, 같은 위치의 attribute의 도메인이 같아야 함
  • difference (차집합)
    • R - S -> relation R에만 속하고, relation S에는 속하지 않는 tuple들만 고르는 것

  • 카티션 프로덕트
    • 두 relation의 attribute 수의 합만큼인 새로운 스키마
    • 카티션 프로덕트는 join을 위한 연산임
  • 관계 대수의 완전성
    • SQL 이전에 많은 데이터베이스 언어가 제안됨
    • 기준 : 적어도 필수 관계 대수 연산자를 표현할 수 있으면, 관계적으로 완전(relationally complete)하다라고 함

  •  Join
    • 두 relation을 합치는 연산
    • 카티션 프로덕트에 조건을 추가 (selective join)
    • 세타 join
      - 조건을 추가한 join
      - 세타는 {=, !=, <=, <, >=, >} 중 하나
    • 동등 join
      - 같은 값을 조건으로 하는 join
      - 보통 공통의 attribute로 join
    • 자연 join
      - 중복된 값을 제거한 join
      - 가장 많이 사용

 

  • 디비전
    • RESULT1 : B#의 b1을 모두 가진 A#
    • RESULT2 : B#에 b2, b4를 모두 가진 A#

  • 관계 대수의 한계
    • aggregate function : 평균 같은 내용