본문 바로가기
CS/DB

[DB - 데이터베이스 개론] Chapter 06. 관계 데이터 연산

by 원만사 2022. 1. 23.
반응형

목차

 

    01. 관계 데이터 연산의 개념

     이번 장에서는 데이터 모델의 연산에 대해서 알아보자. 연산은 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구를 수행하는 것으로, 데이터베이스 시스템의 구성 요소 중 데이터 언어의 역할을 한다. 대표적인 관계 데이터 연산으로 관계 대수와 관계 해석이 있다. 

    관계 데이터 연산의 종류

     

     관계 대수와 관계 해석은 원하는 데이터를 얻기 위한 처리 절차를 얼마나 자세히 기술하느냐에서 큰 차이를 보인다. 

    • 관계 대수(relational algebra) : 데이터의 처리 과정을 순서대로 기술하는 절차 언어(procedural language)
    • 관계 해석(relational calculus) : 처리를 원하는 데이터가 무엇인지만 기술하는 비절차 언어(nonprocedural language)

     

     데이터를 처리하는 기능과 처리를 요구하는 표현력에서 관계 대수와 관계 해석은 동등한 능력을 갖고 있다. 

     

    02. 관계 대수

    1. 관계 대수의 개념과 연산자

    • 원하는 결과를 얻기 위해 릴레이션을 처리하는 과정을 순서대로 기술하는 언어
    • 릴레이션을 연산하며 피연산자인 릴레이션에 연산자를 적용해 얻은 결과도 릴레이션이다. 
    • 관계 대수에는 일반 집합 연산자와 순수 관계 연산자로 분류된다.

    관계 대수 연산자의 종류

     

    • 일반 집합 연산자는 릴레이션이 튜플의 집합이라는 개념을 이용하는데 이는 수학의 집합 관련 연산자를 차용한 것이다. 

    일반 집합 연산자의 종류
    일반 집합 연산자의 기능

    • 순수 관계 연산자는 릴레이션의 구조와 특성을 이용하는 것으로 관계 데이터 모델에서 새로 제시된 연산자다. 

     

    2. 일반 집합 연산자

     일반 집합 연산자에는 다음과 같은 알아두어야 할 제약조건이 있다.

    • 일반 집합 연산자는 연산을 위해 피연산자가 2개 필요하다. 
    • 합집합, 교집합, 차집합은 피연산자인 2개의 릴레이션이 합병 가능(union-compatible)해야 한다. 

     합병 가능하다는 것은 2개의 릴레이션에 대해 다음과 같은 조건이 만족한다는 것을 의미한다.

    • 두 릴레이션의 차수가 같다. 즉, 두 릴레이션은 속성 개수가 같다.
    • 2개의 릴레이션에서 서로 대응되는 속성의 도메인이 같다. 단, 도메인이 같으면 속성의 이름은 달라도 된다. 

     단, 카티션 프로덕트는 합병 가능 여부와 상관없이 연산이 가능하다. 

     

     

    2.1 합집합 (union) 

    • 합병이 가능한 두 릴레이션 R과 S의 합집합은 R ∪ S로 표현한다. 
    • 합집합 연산의 결과도 릴레이션이므로 R과 S에 중복 튜플이 존재할 경우 연산의 결과에는 중복되지 않고 한 번만 나타난다. 
    • 연산 후 결과 릴레이션의 차수는 피연산자 릴레이션들의 차수와 같다.
    • 카디널리티는 두 릴레이션의 튜플 개수를 더한 것과 같거나 적어진다.
    • 교환적 특징과 결합적 특징을 갖고 있다. 

    합집합 연산의 예

     

    2.2 교집합 (intersection)

    • 합병이 가능한 두 릴레이션 R과 S의 교집합은 R ∩ S로 표현한다.
    • R과 S에 공통으로 속하는 튜플로 결과 릴레이션을 구성한다. 
    • 결과 릴레이션의 차수는 피연산자인 릴레이션들의 차수와 같다. 
    • 카디널리티는 두 릴레이션 R과 S의 어떤 카디널리티보다 크지 않다(같거나 적다).
    • 교환적 특징과 결합적 특징을 갖고 있다.

    교집합 연산의 예

     

    2.3 차집합 (difference)

    • 합병이 가능한 두 릴레이션 R과 S의 차집합은 R-S로 표현한다. 
    • R-S는 릴레이션 R에는 존재하지만 릴레이션 S에는 존재하지 않는 튜플들로 결과 릴레이션을 구성한다. 
    • 결과 릴레이션의 차수는 피연산자 릴레이션들의 차수와 같다.
    • 카디널리티는 R-S의 경우 R의 카디널리티와 같거나 적고, S-R은 릴레이션 S의 카디널리티와 같거나 적다. 
    • 피연산자의 순서에 따라 결과가 달라지기 때문에 교환적 특징은 물론 결합적 특징도 없다.

     

    차집합 연산의 예

    2.4 카티션 프로적트 (cartesian product)

    • 두 릴레이션 R과 S의 카티션 프로적트는 R x S로 표현한다. 
    • 릴레이션 R에 속한 각 튜플과 릴레이션 S에 속한 각 튜플을 모두 연결하여 만들어진 새로운 튜플로 결과 릴레이션을 구성한다. 
    • 연산 후 얻게 되는 결과 릴레이션의 차수는 피연산자인 릴레이션 R과 S의 차수를 더한 것과 같다. 
    • 카디널리티는 R과 S의 카디널리티를 곱한 것과 같다. 
    • 교환적 특징과 결합적 특징을 갖고 있다.

    카티션 프로적트 연산의 예

     

    3. 순수 관계 연산자

    • 릴레이션의 구조와 특성을 이용하는 연산자다.
    • 셀렉트, 프로젝트, 조인, 디비전이 있다.

     

    3.1 셀렉트 (select)

    • 릴레이션에서 주어진 조건을 만족하는 튜플만 선택하여 결과 릴레이션을 구성한다. 
    • 대상 릴레이션에서 수평적 부분집합을 생성한 것과 같다. 
    • 셀렉트 연산은 시그마 기호를 사용하여 다음과 같이 표현한다.
    • 하나의 릴레이션을 대상으로 수행한다.
    • 조건식은 비교 연산자(=, ≠, <, ≤, >, ≥)를 이용해 구성하는데, 조건식을 비교식 또는 프레디킷(predicate)이라고도 한다.
    • 조건식을 속성과 상수의 비교나 다른 속성들 간의 비교로 표현할 수 있다. 
    • 조건식을 속성과 상수의 비교로 구성할 때는 상수의 데이터 타입이 속성의 도메인과 일치해야 한다. 
    • 조건식을 다른 속성들 간의 비교로 구성할 때는 속성들의 도메인이 같아야 비교가 가능하다. 
    • 비교 연산자와 함께 논리 연산자인 AND(∧), OR(∨), NOT(ㄱ)을 사용할 수도 있다. 
    • 교환적 특징을 갖고 있다. 

    셀렉트 연산의 수행 과정

     

    3.2 프로젝트 (project)

    • 릴레이션에서 선택한 속성에 해당하는 값으로 결과 릴레이션을 구성한다. 
    • 주어진 릴레이션의 일부 열로만 구성되어 해당 릴레이션에서 수직적 부분집합을 생성하는 것과 같다. 
    • 파이 기호를 사용해 다음과 같이 표현한다. 

    • 프로젝트 연산을 한 결과도 릴레이션이기 때문에 중복되는 튜플이 존재할 수 없다는 특성을 유지하기 위해 동일한 튜플은 중복되지 않고 한 번만 나타난다. 

    프로젝트 연산의 수행 과정

     

    3.3 조인 (join)

    • 릴레이션 하나로 원하는 데이터를 얻을 수 없어 관계가 있는 여러 릴레이션을 함께 사용해야 하는 경우 조인 연산을 이용한다.
    • 조인 속성을 이용해 두 릴레이션을 조합하여 하나의 결과 릴레이션을 구성한다. 
    • 조인 속성은 두 릴레이션이 공통으로 가지고 있는 속성으로, 두 릴레이션이 관계가 있음을 나탄낸다. 
    • 조인 연산 결과 릴레이션은 피연산자 릴레이션에서 조인 속성의 값이 같은 튜플만 연결하여 만들어진 새로운 튜플을 포함한다. 
    • 조인 연산은 다음과 같이 표현한다. 

    • 조인 연산의 결과 릴레이션에서 조인 속성의 경우 중복되지 않고 한 번만 표현된다. 

    조인 연산의 수행 과정

    • 위에서 설명한 조인은 정확히 분류하면 자연 조인(natural join)에 해당한다. 
    • 자연 조인에 비해 좀 더 일반화된 조인으로 세타 조인이 있다.
    • 세타 조인은 주어진 조인 조건을 만족하는 두 릴레이션의 모든 튜플을 연결한 새로운 튜플로 결과 릴레이션을 구성한다. 
    • 세타 조인은 다음과 같이 표현한다.

    • 세타 조인 연산을 한 후 얻게 되는 결과 릴레이션의 차수는 릴레이션1의 차수와 릴레이션2의 차수를 더한 것과 같다. 
    • θ 연산자가 '='인 세타 조인을 특별히 동일 조인(equi-join)이라고 한다. 
    • 일반 자연 조인의 결과 릴레이션과 달리 동일 조인의 결과 릴레이션에는 속성이 중복되어 나타난다. 

    동일 조인 연산의 예

     

    3.4 디비전 (division)

    • 두 릴레이션 R과 S의 디비전 연산은 R÷S로 표현한다.
    • 릴레이션 S의 모든 튜플과 관련 있는 릴레이션 R의 튜플로 결과 릴레이션을 구성한다. 단, 릴레이션 R이 릴레이션 S의 모든 속성을 포함하고 있어야 R÷S 연산이 가능하다. 

    디비전 연산의 예1

     

     

    디비전 연산의 예2

     

    4. 확장된 관계 대수 연산자

     조인 연산을 확장한 세미 조인과 외부 조인을 살펴보자.

     

    4.1 세미 조인 (semi-join)

    • 세미 조인은 다음과 같이 표현한다.

    • 이는 릴레이션 S의 조인 속성으로만 구성한(프로젝트한) 릴레이션을 릴레이션 R에 자연 조인하는 것이다.

    고객과 주문 릴레이션의 세미 조인 연산

    • 위의 예를 통해 살펴보면 먼저 주문 릴레이션에 조인 속성인 주문고객 속성으로 프로젝트 연산을 수행한 후, 이 결과 릴레이션과 고객 릴레이션을 자연 조인하여 최종 결과를 얻는 것을 볼 수 있다.
    • 결과적으로 세미 조인은 고객 릴레이션에서 자연 조인 연산에 참여할 수 있는 튜플만 선택하여 결과 릴레이션을 구성한다.
    • 세미 조인을 이용하면 검색에 불필요한 속성을 미리 제거하여 조인 연산의 비용을 줄일 수 있다는 장점이 있다.
    • 교환적 특성이 없다.

     

    4.2 외부 조인 (outer-join)

    • 두 릴레이션 R과 S의 외부 조인 연산은 다음과 같이 표현한다.

    • 이는 두 릴레이션에 자연 조인 연산을 수행할 때 조인 속성 값이 같은 튜플이 상대 릴레이션에 존재하지 않아 조인 연산에서 제외된 모든 튜플을 결과 릴레이션에 포함시킨다. 
    • 외부 조인은 연산에 참여하는 두 릴레이션에 있는 모든 튜플을 결과 릴레이션에 포함시킨다.

    고객과 주문 릴레이션의 외부 조인 연산

     

     

    References

    - https://musttry.co.kr/devlog/2020/02/28/database-11/ 

    - https://medium.com/learn-from-data/4-%EA%B4%80%EA%B3%84%EB%8C%80%EC%88%98-49e08fc22b16

     

     

    데이터베이스 개론 - 교보문고

    [요약]①데이터베이스 기초 이론 : 1장에서 데이터베이스를, 2장에서 DBMS를 소개합니다. 3장에서는 이들을 조합한 데이터베이스 시스템을 소개합니다.②데이터 모델과 연산 : 4장에서 데이터 모

    www.kyobobook.co.kr

     

     

    반응형

    댓글