데이터베이스: 관계대수
2023-06-11 00:03:00
데이터 모델의 구성
데이터 모델 = 데이터 구조 + 제약조건 + 연산
관계 데이터 연산
관계대수
릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어
- DBMS 내부의 처리 언어로 사용
- 절차 언어
- 어떻게 (how)의 관점
- 순수 관계 연산자, 일반 집합 연산자
관계해석
어떤 데이터를 찾는지 (결과)만 명시하는 선언적인 언어
- SQL의 이론적인 기반 제공
- 비절차 언어
- 무엇(What)의 관점
- 튜플 관계 해석, 도메인 관계 해석
관계의 수학적 의미
- 릴레이션의 수학적 정의
A = {2, 4}, B = {1, 3, 5} → 릴레이션 R은 두 튜플의 카티션 프로덕트의 부분집합으로 정의
- 도메인: 카티션 프로덕트의 기초 집합 각각이 가질 수 있는 값의 범위
- 원소 개수가 n인 집합 S의 부분집합의 개수: → 카티션 프로덕트 부분집합의 개수는
- 릴레이션 역시 집합이므로 집합에서 가능한 연산을 적용 가능 (합집합, 교집합, 카티션 프로덕트)
- 현실 세계 적용
학번 = {2, 4}, 과목 = {데이터베이스, 자료구조, 프로그래밍}
- 두 집합의 카티션 프로덕트 학번과목 = {(2, 데이터베이스), (2, 자료구조), (2, 프로그래밍), (4, 데이터베이스), (4, 자료구조), (4, 프로그래밍)} *두 집합의 원소 쌍의 가능한 모든 조합
- 학번과목으로 이루어진 수강 집합 테이블: 릴레이션
관계 대수 연산자
- 일반 집합 연산자
수학의 집합이론에서 차용. 피연산자 2개 필요
합/교/차집합
- 수학의 집합 연산과 동일
- union-compatible 해야함
- 두 릴레이션의 차수가 같아야 함
- 두 릴레이션에서 서로 대응되는 속성의 도메인이 같아야 함
- 합집합
- 차수: 릴레이션 R과 S의 차수와 같음
- 카디널리티: 릴레이션 R과 S의 카디널리티를 더한 것과 같거나 적어짐
- 교환/결합 가능
- 교집합
- 차수: 릴레이션 R과 S의 차수와 같음
- 카디널리티: 릴레이션 R과 S의 어떤 카디널리티보다 크지 않음
- 교환/결합 가능
- 차집합
- 차수: 릴레이션 R과 S의 차수와 같음
- 카디널리티
- R-S: 릴레이션 R의 카디널리티와 같거나 적음
- S-R: 릴레이션 S의 카디널리티와 같거나 적음
카티션 프로덕트: 릴레이션 R의 각 튜플과 릴레이션 S의 각 튜플들을 모두 연결하여 만들어진 새로운 튜플을 반환
- 차수: 릴레이션 R과 S의 차수의 합
- 카디널리티: 릴레이션 R과 S의 카디널리티의 곱
순수 관계 연산자: 릴레이션의 구조와 특성을 이용하는 연산자
- 셀렉트(): 표현을 통해 릴레이션 R에서 조건을 만족하는 튜플들을 반환 비교 연산자, 논리 연산자를 이용해 작성
- 교환적 특징
- 프로젝트(): 표현을 통해 릴레이션 R 내의 속성리스트로 이루어진 값으로만 구성된 튜플들 반환
- 수직적 부분집합
- 동일한 튜플은 중복되지 않고 한 번만 나타남
- 리네임(): 표현으로 관계 대수 연산으로 만들어지는 릴레이션을 참조하기 위해 이름을 설정
- 조인: 공통 속성을 기준, 수평적으로 결합해 릴레이션 R과 S의 튜플들을 연결해 만들어진 새로운 튜플들을 반환
- 조인에 참여하는 속성이 서로 동일한 도메인으로 구성
- 공통 속성의 속성 값이 동일한 튜플만을 반환
- 구분
- 기본 연산: 세타조인(), 동등조인(), 자연조인()
- 세타조인(): 자연조인에 비해 더 일반화된 조인, 주어진 조인 조건을 만족하는 두 릴레이션의 모든 튜플을 연결/생성된 새로운 튜플로 결과 릴레이션 구성
- 차수: 두 릴레이션의 차수의 합
- 동등조인: 연산자가 “=”인 세타 조인
- 자연조인(): 동등조인에서 참여한 속성이 두 번 나오지 않도록 두번째 속성을 제거한 결과 반환
- 세타조인(): 자연조인에 비해 더 일반화된 조인, 주어진 조인 조건을 만족하는 두 릴레이션의 모든 튜플을 연결/생성된 새로운 튜플로 결과 릴레이션 구성
- 기본 연산: 세타조인(), 동등조인(), 자연조인()
- 셀렉트(): 표현을 통해 릴레이션 R에서 조건을 만족하는 튜플들을 반환 비교 연산자, 논리 연산자를 이용해 작성
확장된 조인 연산: 세미조인(), 외부조인(⟕, ⟖, ⟗)
- 세미조인( ): 조인 속성으로 프로젝트 연산을 수행한 릴레이션을 이용하는 조인 (조인 속성만 노출, 기호가 닫힌 쪽 릴레이션의 튜플만)
- 교환X
- 조인 속성만 노출
- 기호가 닫힌 쪽 릴레이션의 튜플만 반환
- ex) 고객주문 : 고객 릴레이션에서 자연 조인 연산에 참여할 수 있는 튜플만 선택→ 주문한 적 있는 고객의 데이터만 검색
- 외부조인(⟕, ⟖, ⟗): 자연조인 연산에서 제외되는 튜플들도 결과 릴레이션에 포함시키는 조인
- 두 릴레이션에 있는 모든 튜플을 결과 릴레이션에 포함
- 값이 없는 대응 속성에는 NULL을 채워서 반환
- 모든 속성을 보여주는 기준 릴레이션 위치에 따라 left/right/full로 나뉨
- 세미조인( ): 조인 속성으로 프로젝트 연산을 수행한 릴레이션을 이용하는 조인 (조인 속성만 노출, 기호가 닫힌 쪽 릴레이션의 튜플만)
연습문제
질의 2-9 마당서점의 고객과 고객의 주문 내역을 보이시오.
- 1 고객 기준으로 주문내역이 없는 고객도 모두 보이시오.
- 2 주문내역이 없는 고객과, 고객 릴레이션에 고객번호가 없는 주문을 포함하여 모두 보이시오.
- 3 주문내역 기준으로 고객 릴레이션에 고객번호가 없는 주문도 모두 보이시오.
디비전(): R S 표현을 통해 릴레이션 S의 모든 튜플과 관련 있는 릴레이션 R의 튜플들을 반환
- 릴레이션2의 모든 튜플과 관련 있는 릴레이션1의 튜플로 결과 릴레이션을 구성
- 릴레이션1이 릴레이션2의 모든 속성을 포함하고 있어야 연산이 가능 → 도메인이 동일해야함
- 속성 A와 B로 이루어진 릴레이션 R, 속성 B로 이루어진 릴레이션 S의 디비전 연산 → S의 속성 B와 동일하게 대응하는 릴레이션 R의 A의 속성 반환
- ex) R S → R과 S의 공통 속성이 같은 튜플들에서 공통 속성을 제거한 튜플
관계대수식
- 관계대수의 연산을 수행하기 위한 식
- 릴레이션 간 연산을 통해 결과 릴레이션을 찾는 절차를 기술
구성
- 대상이 되는 릴레이션과 연산자로 구성
- 반환되는 결과 또한 릴레이션
형태
- 단항 연산자: 연산자릴레이션
- 이항 연산자: 릴레이션1 연산자 릴레이션2
- 관계대수식의 적용 순서: 괄호 안의 식이 우선, 왼쪽 → 오른쪽 진행