Database - 4.1 Relational algebra

Mingi Shin·2023년 3월 30일
0

Database

목록 보기
3/16

relational data model을 지원하는 두 가지 formal language가 있다.

Relational calculus

  • 관계 해석. 비절차적 언어. 무엇(What)을 얻을 것인가에 목적이 있다. 원하는 정보가 무엇이라는 것만 정의한다는 점에서 비절차적 언어다.

Relational algebra

  • 관계 대수. 절차적 언어. 원하는 정보와 그 정보를 검색하기 위해 어떻게(How) 유도하는가를 기술한다. 과정을 기술함에 있어서 절차적이다.

Relational algebra

기존 관계에서 새 관계를 생성한다. operator를 적용해 점진적으로 복잡한 상대적 대수 표현식을 만들 수 있다. Fundamental operator들의 그룹이다. 하나 혹은 두 개의 table을 인풋으로 해서 result table을 만든다.

Selection : 튜플을 추출. 테이블에 연산을 했을 때, 기존 테이블의 Cardinality가 줄어드는 연산.
Projection: 애트리뷰트를 추출. 테이블에 연산을 했을 때, 기존 테이블의 Degree가 줄어드는 연산.
Join: 두 테이블을 합치는 연산. Cartesian product의 경우 각 테이블의 튜플이 20, 30개라 가정했을 때, 결과 테이블의 튜플이 600개로 매우 복잡해지기 때문에 보통 Join을 더 좋은 방법이라고 말한다.

1) Selection

Q. EMPLOYEE table에서 3번 부서 일하는 직원들을 찾아라.

2) Projection

Q. 모든 직원의 title을 찾아라.(애트리뷰트를 추려서 result로)

중복 제거 후 result table을 만듦.

3) Set

union, intersection, difference operators들이 여기에 해당한다.
집합 연산을 하기 위해서는 Union compatible 조건을 만족해야 한다.

* Union compatible

  • table들의 애트리뷰트 수가 같아야 함
  • 각 애트리뷰트의 도메인이 같아야 함.

직원 테이블과 부서 테이블은 애트리뷰트 개수가 다르다. 그래서 합병가능이 아니다. 그런데 프로젝션 연산을 한 경우, DNO와 DEPTNO의 애트리뷰트 수와 또 그 애트리뷰트의 도메인이 동일하기 때문에 그 경우는 합병가능을 만족한다.

4) Union

합집합 연산
Q1. 김씨 부서의 번호를 찾아라.
1. Selection: "직원 테이블에서" 직원 번호가 C.KIM인 튜플을 추린다.
2. Projection: Selected table에서 DNO 애트리뷰트를 추출한다.

Q2. 개발 부서의 번호를 찾아라.
1: Selection: "부서 테이블에서" 부서 이름이 개발인 튜플을 추린다.
2: Projection: 그 튜플에서 부서 번호 애트리뷰트를 추출한다.

5) Intersection

교집합 연산
Q. 김씨와 최씨의 부서 번호를 찾아라. 또한, 부서는 계획 부서여야 한다.

  • "직원 테이블에서" 직원 이름이 김씨와 최씨인 튜플들을 Selection한다. 그래서 만들어진 임의의 테이블에서 부서 번호를 Projection한다.(RESULT1)
  • "부서 테이블에서" 부서 이름이 PLANNING인 튜플을 Selection한다. 그래서 만들어진 임의의 테이블에서 부서 번호를 Projection한다.(RESULT2)
  • RESULT1과 RESULT2의 교집합을 최종 테이블로 추출한다.

6) Difference

차집합 연산
Q. 부서 번호를 찾는데, 해당 부서에 직원이 없는 부서의 번호를 찾아라.

  • "부서 테이블에서" 부서 번호를 Projection한다.(RESULT1)
  • "직원 테이블에서" 직원들의 부서 번호를 Projection한다.(RESULT2)
  • RESULT1 - RESULT2를 최종 테이블로 추출한다.

7) Cartesian product

직원 테이블(Cardinality: 3 / Degree: 1)
부서 테이블(Cardinality: 2 / Degree: 1) 를 카테이션 프로덕트 하려고 한다.
-> RESULT table의 Cardinality는 6(3 * 2), Degree는 2(1 + 1)이 된다.

각 테이블이 조금만 커져도 복잡해지기 때문에 주로 조인을 사용한다.~

* Completeness of relational algebra

관계 대수의 완전성 : Selection / Projection / Union / Difference / Cartesian product. 5가지 연산을 조합하면 모든 relation algebra를 표현할 수 있다.(Intersection은 빠져 있음!!)

8) Join

  • 두 테이블을 합쳐서 하나의 테이블을 만듦. 다양한 Join이 있다.

Theta join

  • 세타조인은 모든 연산이 가능하다.(같다, 같지 않다, 작거나 같다 ...)
  • 세타조인은 이퀴조인이다.(X)
  • 이퀴조인은 세타조인이다.(O)
  • 두 테이블을 합치기 위해서는 기본키와 외래키를 활용해야 한다!

Equijoin

동등비교만을 사용하는 조인이다.

Q. 직원 테이블과 부서 테이블을 equijoin을 사용해 join해라.

  • DNO(외래키)와 DEPTNO(기본키)를 활용해 equijoin한다.
  • DNO와 DEPTNO가 중복되는 것이 아닌가? 맞긴 하지만! equijoin이 아니라 다른 조인을 사용한다면(같지 않은 것, 크거나 같은 것) RESULT TABLE은 달라진다. equijoin이기 때문에 중복되는 것처럼 보인다.

Natural join

동등 조인에 대한 하나의 유형.
연산은 equijoin이고, 중복된 attribute를 지운 join.

  • equijoin과 natural join의 각각의 RESULT TABLE의 degree는 반드시 달라진다. 둘 다 equijoin 연산을 하기 때문에.

9) Additinal operator

원래 관계 대수에 수학적 연산이나 정렬같은 건 없는데 추가된 연산이다.

Aggregate

Grouping

profile
@abcganada123 / git:ABCganada

0개의 댓글