본문 바로가기
데이터베이스

[데이터베이스론] 6장. 관계 데이터 연산

by CuckooBird 2024. 4. 12.

관계 데이터 연산의 개념

데이터 모델 = data structure + constraint + operation (데이터 구조 + 제약조건 + 연산)

 

  • relational data operation (관계 데이터 연산)
    • 관계 데이터 모델의 연산
    • 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구를 수행하는 것
    • 관계 대수(relational algebra)와 관계 해석(relational calculus)이 있음 (기능과 표현력 측면에서 능력이 동등함)

  • relational algebra (관계 대수)와 relational calculus (관계 해석)의 역할
    • relational algebra와 relational calculus는 상용화된 관계 데이터베이스에서는 실제로 사용되지 않는 개념적 언어
      (** 관계 데이터에 기반한 operation을 어떻게 해야할까에 대한 대안 방법. 이론적인 측면을 토대로 만들어짐)
    • 데이터 언어의 유용성을 검증하는 기준
    • relational algebra나 relational calculus로 기술할 수 있는 모든 query(질의)를 특정 데이터 언어로 기술할 수 있다면 그 언어를 relationally complete (완전)하다고 판단함
      (**query(질의): 데이터에 대한 처리 요구)

관계 대수와 관계 해석

  • relational algebra (관계 대수)의 개념
    • 원하는 결과를 얻기 위해 릴레이션의 처리 과정을 순서대로 기술하는 언어
      (** procedual language (절차적 언어))
    • 릴레이션을 처리하는 연산자들의 모임
      • 대표 연산자 8개
      • 일반 집합 연산자(set operation)와 순수 관계 연산자(relational operation)로 분류됨
    • closure property (폐쇄 특성)이 존재함
      • 피연산자도 릴레이션이고 연산의 결과도 릴레이션임
        (** 여기에서 포인트는 연산의 결과가 릴레이션이기 때문에 연산의 결과도 릴레이션이 갖는 모든 특성(튜플의 유일성, 튜플의 무순서, 속성의 무순서, 속성의 원자성(5장))을 만족해야 한다 라는 것.)

relational algebra - closure property

  • relational algebra의 operator

  • set operation (일반 집합 연산자)
    • 릴레이션이 튜플의 집합이라는 개념을 이용하는 연산자

데이터베이스 분야에서는 카티션 프로덕트 라고 함

  • 일반 집합 연산자의 특성
    • 피연산자가 2개 필요함: 2개의 릴레이션을 대상으로 연산을 수행
    • 합집합, 교집합, 차집합은 피연산자인 두 릴레이션이 합병 가능(union-compatible)해야 함
      • union-compatible (합병 가능) 조건
        • 두 릴레이션의 degree(차수)가 같아야 함
        • 두 릴레이션에서 서로 대응되는 속성의 도메인이 같아야 함
          (** 위 두가지 조건을 만족하려면 데이터 타입이 같아야 하고, 실질적으로는 스키마가 같아야함. - 속성의 이름 정도는 다를 수 있음)

  • set operation - union (합집합)
    • 합병 가능 (union-compatible) 한 두 릴레이션 R과 S의 합집합의 표기 : R∪S
      • 릴레이션 R에 속하거나 릴레이션 S에 속하는 모든 튜플로 결과 릴레이션 구성
    • 결과 릴레이션의 특성
      • degree는 릴레이션 R과 S의 degree가 같음
      • cardinality는 릴레이션 R과 S의 cardinality를 더한 것과 같거나 적어짐
        (** 같아지는 경우: R과 S의 교집합이 없는 경우. 작아지는 경우: R과 S의 교집합이 있는 경우)
    • 교환적 특징이 있음 (피연산자의 순서에 구애받지 않음)
      • R∪S = S∪R
    • 결합적 특징이 있음 (연산 자체의 순서에도 구애를 받지 않음)
      • (R∪S) ∪ T = R ∪ (S∪T)

  • set operation - intersection (교집합)
    • 합병 가능 (union-compatible) 한 두 릴레이션 R과 S의 교집합의 표기: R ∩ S
      • 릴레이션 R과 S에 공통으로 속하는 튜플로 결과 릴레이션 구성
    • 결과 릴레이션의 특성
      • degree는 릴레이션 R과 S의 degree와 같음
      • cardinality는 릴레이션 R과 S의 어떤 cardinality보다 크지 않음
        (** 만약 결과 릴레이션의 cardinality가 R의 cardinaltiy와 같다라는 것은 R이 S의 부분집합이다)
    • 교환적 특징이 있음 
      • R ∩ S = S ∩ R
    • 결합적 특징이 있음 (연산의 순서에 구애받지 않음)
      • (R ∩ S) ∩ T = R ∩ (S ∩ T)

  • set operation - differece (차집합)
    • 합병 가능(union-compatible)한 두 릴레이션 R과 S의 차집합 표기: R - S = R ∩ Sc(R 교집합 S의 여집합)
      • 릴레이션 R에는 존재하지만 릴레이션 S에는 존재하지 않는 튜플로 결과 릴레이션 구성
    • 결과 릴레이션의 특성
      • degree는 릴레이션 R과 S의 degree와 같음
      • R - S의 cardinality는 릴레이션 R의 cardinality와 같거나 적음 (같은 경우: 교집합이 없는 경우)
      • S - R의 cardinality는 릴레이션 S의 cardinality와 같거나 적음
    • 교환적, 결합적 특징이 없음

  • set operation - cartesian product (카티션 프로덕트 = 곱집합 = 데카르트 곱)
    • 두 릴레이션 R과 S의 cartesian product 표기: R x S
      • 릴레이션 R에 속한 각 튜플과 릴레이션 S에 속한 각 튜플을 모두 연결하여 만들어진 새로운 튜플로 결과 릴레이션을 구성 (possible한 pair를 모두 만든다)
    • 결과 릴레이션의 특성
      • degree는 릴레이션 R과 S의 degree를 더한 것과 같음
      • cardinality는 릴레이션 R과 S의 cardinality를 곱한 것과 같음
    • 교환적 특징이 있음
      • R X S  = S X R
    • 결합적 특징이 있음
      • (R X S) X T = R X (S X T)

  • relational operation (순수 관계 연산자)
    • 릴레이션의 구조와 특성을 이용하는 연산자

  • relational operation - select (셀렉트)
    • 릴레이션에서 조건을 만족하는 튜플만 선택하여 결과 릴레이션을 구성
    • 하나의 릴레이션을 대상으로 연산을 수행 (피연산자가 하나)
    • 수학적 표현법:
    • 데이터 언어적 표현법: 릴레이션 where 조건식
    • 조건식
      • 비교식, 프레디킷(predicate)이라고도 함
      • 속성과 상수의 비교나 속성들 간의 비교로 표현
      • 비교 연산자(>, ≥, <, ≤, =, ≠)와 논리 연산자(∧, ∨, ㄱ; and, or, not)를 이용해 작성
    • 교환적 특징이 있음
  • relational operation - project (프로젝트)
    • 릴레이션에서 선택한 속성의 값으로 결과 릴레이션을 구성
    • 하나의 릴레이션을 대상으로 연산을 수행
    • 수학적 표현법: 
    • 데이터 언어적 표현법: 릴레이션[속성리스트]
      (** 데이터 언어적 표현법이 스키마와 굉장히 비슷함)

      피연산자가 릴레이션이면, 결과도 릴레이션 : relational algebra의 closure property (폐쇄 특성)

select 와 project 팁

  • relational operation - join (조인) 
    • join 속성을 이용해 두 릴레이션을 조합하여 결과 릴레이션을 구성
      • join 속성의 값이 같은 튜플만 연결하여 생성된 튜플을 결과 릴레이션에 포함
      • join 속성: 두 릴레이션이 공통으로 가지고 있는 속성
    • 표현법:
    • 자연 조인(natural join)이라고도 함
      • 표현법: 


        (** 조인 속성이 하나만 있는 경우가 일반적임. 하지만 시험에 나올 때는 두 개로 나오기도 한다고 함. a와 b가 공통속성임을 a=b라고 나타내는데, 이것을 조인 조건이라고 함.)
    • theta join (세타 조인)
      • 자연 조인에 비해 더 일반화된 조인
      • 주어진 조인 조건을 만족하는 두 릴레이션의 모든 튜플을 연결하여 생성된 새로운 튜플로 결과 릴레이션을 구성
      • 결과 릴레이션의 차수는 두 릴레이션의 차수를 더한 것과 같음
      • 표현법: 
      • theta는 비교 연산자 (>, ≥, <, ≤, =, ≠)를 의미
    • equi-join (동일 조인)
      • theta 연산자가 "="인 세타 조인을 의미
      • 표현법: 

        (** 동일 조인과 자연 조인은 비슷하지만, 다른 점은 동일 조인은 조인 속성을 둘 다 써놨음. 보통 DB에서 사용하는 조인은 동일조인)

  • relational operation - division (디비전)
    • 표현법: 
    • 릴레이션2의 모든 튜플과 관련이 있는 릴레이션1의 튜플로 결과 릴레이션을 구성
      • 단, 릴레이션1이 릴레이션2의 모든 속성을 포함하고 있어야 연산이 가능함
        => 도메인이 같아야 한다는 의미
        (** 릴레이션2가 릴레이션1의 실질적 부분집합)

 

  • 확장된 relational algebra operator - semi-join (세미 조인)
    • 조인 속성으로 프로젝트 연산을 수행한 릴레이션을 이용하는 조인
    • 표현법: 
    • 릴레이션2를 조인 속성으로 프로젝트 연산한 후, 릴레이션1에 자연 조인하여 결과 릴레이션을 구성

  • 확장된 relational algebra operator - outer-join (외부 조인)
    • 자연 조인 연산에서 제외되는 튜플도 결과 릴레이션에 포함시키는 조인
      • 두 릴레이션에 있는 모든 튜플은 결과 릴레이션에 포함시킴
    • 표현법:

 

** outer-join 은 크게 세 가지로 분류.

  • full outer join: melon도 결과 릴레이션에 들어감. 결과 릴레이션에 "주문고객" 속성도 들어가야 함 
  • left outer join: 왼쪽에 있는 릴레이션만 포함 시킴. orange만 포함시킴.
  • right outer join: 오른쪽에 있는 릴레이션만 포함 시킴. melon만 포함시킴.
    (** inner join: theta join, natural join, equi-join을 포함하는 일반적인 조인을 뜻함)
  • relational calculus (관계 해석)
    • 처리가 원하는 데이터가 무엇 인지만 기술하는 언어
      (** nonprecedural language (비절차적 언어))
    • 수학의 프레디킷 해석 (predicate calculus)에 기반을 두고 있음
    • 분류
      • 튜플 관계 해석 (tuple relational calculus) 
        (** what이 튜플에 있는 것)
      • 도메인 관계 해석 (domain relational calculus)
        (** what이 속성에 있는 것)