득이공간

[데이터베이스] 3장. 관계 대수 본문

CS/DB

[데이터베이스] 3장. 관계 대수

쟁득 2024. 2. 27. 09:05
해당 게시물은 김태연 교수님의 '데이터베이스' 강의를 수강하며
학습한 내용을 개인적으로 정리한 글입니다.

📌 목차 - 3장. 관계 대수

3-1. 관계 대수


📌 3-1. 관계 대수

* 관계 해석(relational calculus)

- 원하는 데이터만 명시하고 질의를 어떻게 수행할 것인가는 명시하지 않는 선언적인 언어


* 관계 대수(relational algebra)

- 어떻게 질의를 수행할 것인가를 명시하는 절차적 언어
- 기존의 릴레이션들로부터 새로운 릴레이션을 생성한다.
- 필수 연산자 : 셀렉션, 프로젝션, 합집합, 차집합, 카티션 곱
- 유도 연산자 : 교집합, 세타 조인, 동등 조인, 자연 조인, 세미 조인, 디비전


* 셀렉션 연산자

- σ<렉션 조건>(릴레이션)
- 한 릴레이션에서 셀렉션 조건(selection condition)을 만족하는 튜플들의 부분 집합을 생성한다.
- 셀렉션 조건 == 프레디키트(predicate)


* 프로젝션 연산자

- π<애트리뷰트 리스트>(릴레이션)
- 한 릴레이션의 애트리뷰트들의 부분 집합을 구한다.


* 합집합 연산자

- 릴레이션1 ∪ 릴레이션2


* 합집합 호환(union compatible)

- 두 릴레이션이 애트리뷰트의 개수가 같아야 하고 각각의 애트리뷰트의 도메인이 같아야한다.

* 교집합 연산자

- 릴레이션1 ∩ 릴레이션2


* 차집합 연산자

- 릴레이션1 - 릴레이션2


* 카티션 곱 연산자

- R x S, R과 S의 튜플들의 모든 가능한 조합으로 이루어진 릴레이션


* 디비전 연산자

- R / S, 릴레이션 S의 모든 튜플 값과 쌍을 이루는 릴레이션 R의 값


* 조인 연산자
- 세타 조인 : 두 릴레이션의 카티션 곱에 조인 조건을 적용한 결과
- 동등 조인 : 비교 연산자가 =인 세타 조인
- 자연 조인 : 동등 조인을 수행하고나서 겹치는 애트리뷰트 하나를 제거한다.
- 외부 조인 : 대응되는 튜플을 갖지 않는 튜플과 조인 애트리뷰트에 널값을 갖는 튜플도 결과에 포함시킨다. 왼쪽 외부 조인, 오른쪽 외부 조인, 완전 외부 조인
- 세미 조인 : 조인 결과에서 막혀있는 쪽 릴레이션의 애트리뷰트들만 남긴다.

* 관계 대수의 한계
- 관계 대수는 산술 연산을 할 수 없다.
- 집단 함수(aggregate function)를 지원하지 않는다.
- 정렬을 나타낼 수 없다.
- 데이터베이스를 수정할 수 없다.


* 추가된 관계 대수 연산자
- 집단(aggregation) 함수 : AVG, SUM, MIN, MAX, COUNT
- 그룹화 : g, 각 그룹에 대해 집단 함수를 적용한다.


* Review Questions : 관계 대수
- CUSTOMER(CUSTOMER_ID, NAME, ADDRESS, PHONE)
- VIDEO(VIDEO_ID, TITLE, GENRE)
- RESERVED(CUSTOMER_ID, VIDEO_ID, DATE)
a. 제목이 '반지의 제왕'인 비디오 테이프의 장르를 검색하라
- π<GENRE>(σ<TITLE='반지의 제왕'>(VIDEO))
b. 예약된 비디오 테이프의 ID를 검색하라
- π<VIDEO_ID>(RESERVED)
c. 예약되지 않은 비디오 테이프의 ID를 검색하라
- π<VIDEO_ID>(VIDEO)-π<VIDEO_ID>(RESERVED)
d. 예약된 모든 비디오 테이프의 제목을 검색하라
- π<TITLE>((VIDEO)*π<VIDEO_ID>(RESERVED))
e. 비디오 테이프를 예약한 고객의 이름을 검색하라
- π<NAME>((CUSTOMER)*π<CUSTOMER_ID>(RESERVED))
f. 장르가 '액션'인 비디오 테이프를 예약한 고객의 주소를 검색하라
- π<ADDRESS>((CUSTOMER)*(σ<GENRE='액션'>(VIDEO)*(RESERVED)))
g. 장르가 '다큐멘터리'인 비디오 테이프를 모두 예약한 고객의 이름을 검색하라
- π<NAME>((CUSTOMER)*(π<CUSTOMER_ID,VIDEO_ID>(RESERVED) / π<VIDEO_ID>(σ<GENRE='다큐멘터리'>(VIDEO))))
필수+유도 연산자 or 필수 연산자
+. 컴퓨터공학과에서 개설한 모든 과목을 듣는 학생 이름은?
π<이름>((학생)*(π<학번,과목코드>(수강내역) / π<과목코드>(σ<개설학과='컴퓨터공학'>(과목))))