반응형
목차
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 연산이 가능하다.
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
반응형
'CS > DB' 카테고리의 다른 글
[DB] 데이터베이스의 INDEX (0) | 2022.01.25 |
---|---|
[DB - 데이터베이스 개론] Chapter 07. 데이터베이스 언어 SQL (0) | 2022.01.25 |
[DB - 데이터베이스 개론] Chapter 05. 관계 데이터 모델 (0) | 2022.01.21 |
[DB] 트랜잭션(Transaction)이란? (0) | 2022.01.18 |
[DB - 데이터베이스 개론] Chapter 04. 데이터 모델링 (0) | 2022.01.17 |
댓글