Post

Chapter 6. 관계 데이터 연산(Relationship Data Operation)

Chapter 6. 관계 데이터 연산(Relationship Data Operation)

1절. 관계 데이터 연산 개념

데이터 모델(Data Model)

  • 데이터 모델링 결과물 표현 도구
종류설명예시
개념적
데이터 모델
사람의 머리로 이해하도록 현실 세계를 모델링하여 데이터베이스의 개념적 구조로 표현하는 도구개체-관계 모델
(Entity-Relationship Model)
논리적
데이터 모델
개념적 구조를 논리적으로 모델링하여 데이터베이스의 논리적 구조로 표현하는 도구관계 데이터 모델

데이터 모델 구성

DataModelStructure

데이터 구조 종류설명
개념적 구조현실 세계를 개념 세계로 추상화 시 어떤 요소로 구성되었는지 표현하는 개념적 구조
논리적 구조데이터를 어떤 모습으로 저장할지 표현하는 논리적 구조

관계 데이터 연산(Relational Data Operation)

  • 관계 데이터 모델 연산
  • 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구 수행
종류
관계 대수
관계 해석

RDOTypes{ width=”70%” }

관계 대수와 관계 해석 역할

  • 데이터 언어 유용성 검증 기준
  • 관계 대수·관계 해석으로 기술 가능한 모든 질의를 기술하는 데이터 언어 : 관계적으로 완전함(relationally complete)
  • 질의(query) : 데이터에 대한 처리 요구

2절. 관계 대수

관계 대수(Relational Algebra)

RelationalAlgebra

  • 절차적 언어(Procedural Language)
  • 원하는 결과를 위해 릴레이션 처리 과정을 순서대로 기술하는 언어
  • 릴레이션 처리 연산자들(8개) 모임
    • 일반 집합 연산자
    • 순수 관계 연산자
  • 폐쇄적 특성(closure property)
    • 피연산자 · 연산 결과 모두 릴레이션

일반 집합 연산자(Set Operation)

  • 릴레이션이 튜플의 집합인 개념을 이용하는 연산자
연산자기호표현의미
합집합∪R ∪ S릴레이션 R과 S의 합집합 반환
교집합∩R ∩ S릴레이션 R과 S의 교집합 반환
차집합-R - S릴레이션 R과 S의 차집합 반환
카티션 프로덕트✕R ✕ S릴레이션 R의 각 튜플과 릴레이션 S의 각 튜플을 모두 연결 후 만든 새로운 튜플 반환

SetOperators{ width=”70%” }

특성조건
2개의 피연산자2개의 릴레이션 대상 연산 수행
피연산자 두 릴레이션의 합병 필요합집합·교집합·차집합의 경우
합병 가능 (union-compatible) 조건
두 릴레이션의 동등한 차수
두 릴레이션에서 서로 대응되는 속성 도메인 일치

UnionCompatibleConditions{ width=”70%” }

합집합(Union) : R ∪ S

  • 합병 가능한 두 릴레이션 R과 S의 합집합
결과 릴레이션 튜플 조건
릴레이션 R에 속함
릴레이션 S에 속함
결과 릴레이션 특징설명
차수(Degree)릴레이션 R과 S의 차수와 동일
카디널리티(Cardinality)R ∪ S 카디널리티 >= R or S
교환적 특징R ∪ S = S ∪ R
결합적 특징(R ∪ S) ∪ T = R ∪ (S ∪ T)

UnionExample{ width=”70%” }

2. 교집합(Intersection) : R ∩ S

  • 합병 가능한 두 릴레이션 R과 S의 교집합
결과 릴레이션 튜플 조건
릴레이션 R과 S에 공통으로 속하는 튜플
결과 릴레이션 특징설명
차수(Degree)릴레이션 R과 S의 차수와 동일
카디널리티(Cardinality)R ∪ S 카디널리티 <= R or S
교환적 특징R ∩ S = S ∩ R
결합적 특징(R ∩ S) ∩ T = R ∩ (S ∩ T)

IntersectionExample

3. 차집합(Difference) : R - S

  • 합병 가능한 두 릴레이션 R과 S의 차집합
결과 릴레이션 튜플 조건
릴레이션 R에는 존재하지만 릴레이션 S에는 존재하지 않는 튜플
결과 릴레이션 특징설명
차수(Degree)릴레이션 R과 S의 차수와 동일
카디널리티(Cardinality)R - S 카디널리티 or S - R 카디널리티 <= R or S
교환적 특징없음
결합적 특징없음

DifferenceExample

4. 카티션 프로덕트(Cartesian Product) : R ✕ S

  • 두 릴레이션 R과 S의 카티션 프로덕트
결과 릴레이션 튜플 조건
릴레이션 R에 속한 각 튜플과 릴레이션 S에 속한 각 튜플을 모두 연결하여 만들어진 새로운 튜플
결과 릴레이션 특징설명
차수(Degree)릴레이션 R과 S의 차수를 더한 것과 동일
카디널리티(Cardinality)R ✕ S 카디널리티 == R 카디널리티 ✕ S 카디널리티
교환적 특징R ✕ S · S ✕ R
결합적 특징(R ✕ S) ✕ T = R ✕ (S ✕ T)

CartesianProduct

순수 관계 연산자(Relational Operation)

  • 릴레이션의 구조와 특성을 이용하는 연산자
연산자기호표현의미
셀렉트σ$σ_{조건식}(R)$릴레이션 R에서 조건 만족 튜플들 반환
프로젝트π$π_{속성리스트}(R)$릴레이션 R에서 주어진 속성들의 값으로 구성된 튜플들 반환
조인⋈R ⋈ S공통 속성으로 릴레이션 R과 S의 튜플들을 연결하여 만든 새로운 튜플들 반환
디비전÷R ÷ S릴레이션 S의 모든 튜플과 관련이 있는 릴레이션 R의 튜플들 반환

RelationalOperators{ width=”70%” }

1. 셀렉트(Select) · 셀렉션(Selection)

결과 릴레이션 튜플 조건
조건을 만족하는 튜플만 선택
결과 릴레이션 특징설명
단항 연산자하나의 릴레이션 대상 연산
수학적 표현법$σ_{조건식}(릴레이션)$
데이터 언어적 표현법릴레이션 WHERE 조건식
결과 릴레이션연산 대상 릴레이션의 수평적 부분 집합
교환적 특징$σ_{조건식1}(σ_{조건식2}(릴레이션)) = σ_{조건식2}(σ_{조건식1}(릴레이션)) = σ_{조건식1 ∧ 조건식2}(릴레이션)$
  • 조건(Predicate : 조건)식
    • 비교식 · 프레디킷
    • 속성이나 상수의 비교 · 속성들 간 비교로 표현
    • 비교 연산자(> · ≥ · < · ≤ · = · ≠)
    • 논리 연산자(∧(and), ∨(or), ¬(not))

OperationRelation{ width=”70%” }

셀렉션 연산 예시

  • 고객 릴레이션

CustomerRelation{ width=”70%” }

| ex 1 : 등급이 gold인 튜플 검색 | SelectionExample1 | | —————————— | ———————————————————————————————————————————- |

| ex 2 : 등급이 gold이고 적립금이 2000 이상인 튜플 검색 | SelectionExample2 | | —————————————————– | ——————————————————————————————————————————— |

2. 프로젝트(Project) · 프로젝션(Projection)

결과 릴레이션 튜플 조건
릴레이션에서 선택한 속성 값
결과 릴레이션 특징설명
단항 연산자하나의 릴레이션 대상 연산
수학적 표현법$π_{속성리스트}(릴레이션)$
데이터 언어적 표현법릴레이션[속성리스트]
결과 릴레이션연산 대상 릴레이션의 수직적 부분 집합
  • 수직적 부분 집합 의미

ProjectionVerticalSubset{ width=”70%” }

프로젝션 연산 예시

| ex 1 : 고객 릴레이션의 이름 · 주소 · 핸드폰 프로젝션 | ProjectionExample1 | | —————————————————- | ———————————————————————————————————————————— |

| ex 2 : 고객이름, 등급, 적립금 검색 | ProjectionExample2 | | ———————————- | ————————————————————————————————————————————- |

| ex 3 : 등급 검색
- 동일한 튜플은 중복 없이 한 번만 출력 | ProjectionExample3 | | ———————————————————- | ————————————————————————————————————————————- |

3. 조인(Join)

결과 릴레이션 튜플 조건
조인 속성의 값이 같은 튜플만 연결하여 생성된 튜플 조합
결과 릴레이션 특징설명
이항 연산자둘 이상의 릴레이션 대상 연산
수학적 표현법릴레이션1 ⋈ 릴레이션2
다른 표현동등 조인(equi-join)
조인 속성두 릴레이션의 공통 속성

| ex 1 : 고객 릴레이션의 ‘고객아이디’와 주문 릴레이션의 ‘고객아이디’ 조인 | ProjectionExample3 | | ———————————————————————– | ————————————————————————————————————————————- |

| ex 2 : 정소화 고객이 주문한 제품 검색 | JoinExample1 | | ————————————- | —————————————————————————————————————————— |

| ex 2 - 1 : 릴레이션 소속 구분을 위해 ‘릴레이션.속성’ 형식 표기 | JoinExample2 | | ————————————————————– | ——————————————————————————————————————————- |

조인 종류

JoinTypes

세타 조인(theta-join, θ-join)

결과 릴레이션 튜플 조건
주어진 조인 조건을 만족하는 두 릴레이션의 모든 튜플을 연결하여 생성된 새로운 튜플
결과 릴레이션 특징설명
차수(Degree)두 릴레이션 차수의 합
수학적 표현법릴레이션1 $⋈_{A θ B}$ 릴레이션2
θ비교 연산자($> · ≥ · < · ≤ · = · ≠$)

동등 조인(equi-join)

  • θ 연산자가 “=” 인 세타 조인
결과 릴레이션 특징설명
수학적 표현법릴레이션1 $⋈_{A = B}$ 릴레이션2

자연 조인(Natural Join)

  • 동등 조인의 결과 릴레이션에서 조인 속성이 한 번만 나타나는 연산
결과 릴레이션 특징설명
수학적 표현법릴레이션1 $⋈_N$ 릴레이션2

자연 조인 예시

| ex 1 : 고객과 주문 릴레이션 | NaturalJoinExample1 | | ————————— | —————————————————————————————————————————- |

| ex 2 : 2개의 속성으로 이루어진 조인 속성 | NaturalJoinExample2 | | —————————————- | —————————————————————————————————————————– |

4. 디비전(Division)

결과 릴레이션 튜플 조건
릴레이션 2의 모든 튜플과 관련이 있는 릴레이션 1의 튜플
릴레이션 1이 릴레이션 2의 모든 속성 포함 필수
도메인 일치 필수
결과 릴레이션 특징설명
수학적 표현법릴레이션 1 ÷ 릴레이션 2

Division{ width=”70%” }

디비전 예시

| ex 1 : 고객과 우수등급 릴레이션 | DivisionExample1 | | ——————————- | ———————————————————————————————————————————– |

| ex 2 : 주문내역, 제품1, 제품2 릴레이션 | DivisionExample2 | | ————————————– | ———————————————————————————————————————————– |

관계 대수 질의 표현

| 사용할 고객 릴레이션과 주문 릴레이션 | QueryRelations | | ———————————— | ——————————————————————————————————————————- |

| ex 1 : 등급이 gold인 고객의 이름과 나이 | QueryExample1 | | ————————————— | ——————————————————————————————————————————- |

| ex 2 : 고객이름이 원유선인 고객의 등급과 원유선 고객이 주문한 주문제품, 수량 | QueryExample2Result | | —————————————————————————- | ———————————————————————————————————————————- |

| ex 3 : 주문 수량이 10개 미만인 주문 내역을 제외한 검색 | QueryExample3Result | | —————————————————— | ———————————————————————————————————————————- |

2.5절. 확장 관계 대수 연산자

세미 조인(Semi Join)

  • 확정 관계 대수 연산자
  • 프로젝트 연산을 수행한 릴레이션을 이용하는 조인
  • 불필요한 속성을 미리 제거
    • 조인 연산 비용 감소
결과 릴레이션 튜플 조건
릴레이션 2를 조인 속성으로 프로젝트 연산
릴레이션 1에 자연 조인
결과 릴레이션 특징설명
수학적 표현법릴레이션 1 ⋉ 릴레이션 2
교환적 특징없음

세미 조인 예시

| ex 1 : 고객 릴레이션과 주문 릴레이션 세미 조인 | SemiJoinExample1 | | ———————————————- | ———————————————————————————————————————————– |

| ex 2 : 왼쪽이 닫힌 세미 조인 | SemiJoinExample2 | | —————————- | ———————————————————————————————————————————– |

외부 조인(Outer Join)

| 결과 릴레이션 튜플 조건 | | :———————: |

자연 조인 연산에서 제외되는 튜플도 결과 릴레이션에 포함
두 릴레이션에 있는 모든 튜플을 결과 릴레이션에 포함
결과 릴레이션 특징설명
수학적 표현법릴레이션1 ⋈+ 릴레이션2
조인 실패 튜플자연조인 시 조인에 실패한 튜플을 모두 조회하고 값이 없는 대응 속성을 NULL으로 반환
종류1. 왼쪽(left) 외부조인
2. 오른쪽(right) 외부조인
3. 완전(full, 양쪽) 외부조인
형식1. 왼쪽(left) 외부조인 : $R ⟕{(r, s)} S$ (릴레이션1 $⋈^{+}$ 릴레이션2)
2. 완전(full) 외부조인 : $R ⟗
{(r, s)} S$
3. 오른쪽(right) 외부조인 : $R ⟖_{(r, s)} S$

왼쪽 외부 조인(LEFT OUTER JOIN)

  • 왼쪽 릴레이션 1에 존재하는 모든 튜플을 결과 릴레이션에 포함

| ex 1 : 왼쪽 외부 조인 예시 | LeftOuterJoinExample1 | | ————————– | ——————————————————————————————————————————- |

| ex 2 : 고객 릴레이션과 주문 릴레이션 왼쪽 외부 조인 연산 | LeftOuterJoinExample2 | | ——————————————————– | —————————————————————————————————————————— |

오른쪽 외부 조인(RIGHT OUTER JOIN)

  • 오른쪽 릴레이션 2에 존재하는 모든 튜플을 결과 릴레이션에 포함

| ex 1 : 오른쪽 외부 조인 예시 | RightOuterJoinExample1 | | —————————- | —————————————————————————————————————————— |

  • 주문 릴레이션(릴레이션 2)에 만약 조인 연산에 참여하지 않는 튜플이 없는 경우
    • 자연 조인 결과와 동일

완전 외부 조인(FULL OUTER JOIN)

  • 두 릴레이션에 있는 모든 튜플을 결과 릴레이션에 포함

| ex 1 : 완전 외부 조인 예시 | FullOuterJoinExample1 | | ————————– | —————————————————————————————————————————— |

| ex 2 : 완전 외부 조인 예시 | FullOuterJoinExample2 | | ————————– | —————————————————————————————————————————— |

  • 고객 릴레이션(릴레이션 1)에만 조인 연산에 참여하지 않는 튜플 존재
    • 왼쪽 외부 조인 결과와 동일

외부 조인 정리(OUTER JOIN)

OuterJoinSummary

관계 대수 연산자 총정리

연산자 종류대상연산자 이름기호설명
기본단항셀렉션$σ$릴레이션에서 조건에 만족하는 튜플 선택
기본단항프로젝션$π$릴레이션 속성 선택
추가단항개명$p$릴레이션 · 속성 이름 변경
유도이항디비전÷부모 릴레이션에 포함된 튜플의 값을 모두 갖고 있는 튜플을 분자 릴레이션에서 추출
기본이항합집합∪두 릴레이션의 합집합
기본이항차집합-두 릴레이션의 차집합
유도이항교집합∩두 릴레이션의 교집합
기본이항카티션 프로덕트×두 릴레이션에 속한 모든 튜플 집합
유도이항세타 조인$⋈_{\theta}$두 릴레이션 간 비교 조건에 만족하는 집합
유도이항동등 조인$⋈$두 릴레이션 간 같은 값을 가진 집합
유도이항자연 조인$⋈_{N}$동등 조인에서 중복 속성 제거
유도이항세미 왼쪽 조인$⋉$자연 조인 후 오른쪽 속성 제거
유도이항세미 오른쪽 조인$⋊$자연 조인 후 왼쪽 속성 제거
유도이항왼쪽 외부 조인⟕1. 자연 조인 후 왼쪽의 모든 값을 결과로 추출
2. 조인 실패의 경우 한 쪽 값을 NULL로 반환
유도이항오른쪽 외부 조인⟖1. 자연 조인 후 오른쪽의 모든 값을 결과로 추출
2. 조인 실패의 경우 한 쪽 값을 NULL로 반환
유도이항완전 외부 조인⟗1. 자연 조인 후 양쪽의 모든 값을 결과로 추출
2. 조인 실패의 경우 한 쪽 값을 NULL로 반환

3절. 관계 해석

관계 해석(Relational Calculus)

  • 비절차적 언어(Nonprocedural Language) : SQL
  • 처리를 원하는 데이터가 무엇인지 기술하는 언어
  • 어떻게 검색할 것인가 : X
  • 무엇을 검색할 것인가 : O
  • 선언적 표현법을 사용하는 비절차적 질의어
  • ex : 어떤 관계 질의어 L이 관계 해석 · 관계 대수로 둘다 표현 가능한 질의일 경우 L은 “관계적으로 완전함” (relationally complete)
분류설명
튜플 관계 해석
(Tuple Relational Calculus)
.
도메인 관계 해석
(Domain relational calculus)
투플 변수 대신 도메인 변수(domain variables)를 사용하는 관계 해석

튜플 변수

  • 릴레이션의 튜플을 범위(Range)로 가지는 변수

    • ex : 봉급이 50,000$를 넘는 모든 사원 검색
    • Answer : {tEMPLOYEE(t) AND t.SALARY > 50000}
      • EMPLOYEE(t) : 튜플 변수 t가 릴레이션 EMPLOYEE의 튜플들을 범위로 함
      • 튜플 t에서 t.SALARY > 50000을 만족하는 튜플만 검색
      • 튜플 t의 모든 속성값 리턴

도메인 관계 해석

관계 해석 종류중심
튜플 관계 해석튜플 중심
도메인 관계 해석속성 중심
  • ex : 이름이 ‘JohnB.Smith’인 사원의 생일과 주소 검색
This post is licensed under CC BY 4.0 by the author.