Introduction to Relational Model (2)
관계대수 Relational Algebra
- 한 개 또는 두 개의 릴레이션을 입력값으로 받아 연산 과정에 따른 하나의 새로운 릴레이션을 출력하는 절차적 언어
Select
- 셀렉션 프리디케이트(술어, predicate)를 만족하는 튜플을 선택하는 연산
- σp(r): 프리디케이트 p를 만족하는 튜플을 특정 릴레이션의 인스턴스 r에서 선택한다는 뜻
- E.g.)
instructor 릴레이션에서 department 어트리뷰트 값이 Physics인 모든 instructor 튜플을 셀렉트: σdept_name="Physics"(instructor)
- 논리 연산 적용 가능: ∧
AND, vee OR, ¬ NOT 모두 적용 가능
- E.g.)
instructor 릴레이션에서 department 어트리뷰트 값이 Physics이고 salary 어트리뷰트 값이 90000 이상인 모든 instructor 튜플을 셀릭트: σdept_name="Physics"∧salary>90000(instructor)
Project
- 특정 릴레이션의 특정 어트리뷰트만을 리턴하는 유너리 연산
- ΠA1,A2,A3...,Ak(r): 특정 어트리뷰트만을 리턴함
- 릴레이션이 집합이기 때문에 중복 행은 삭제
- E.g.)
instructor 릴레이션의 dept_name 어트리뷰트만을 보고 싶을 때: Πdept_name(instructor)
여러 개의 연산을 복합적(Composition)으로 사용 가능
- E.g.)
instructor 릴레이션에서 부서가 Physics인 튜플의 이름만을 보고 싶을 때: Πname(σdept_name"Physics"(instructor)). 먼저 담당 부서가 물리학인 모든 강사의 튜플을 셀렉트한 뒤 이름만을 얻어내는 명령어
Cartesian Product
- 두 릴레이션으로부터 정보를 결합하는 연산
- R1×R2: 모든 가능한 튜플 쌍을 만드는 연산. 중복 어트리뷰트가 있을 때 각각 R1.A, R2.A로 표시
Join
- 데카르트 곱 연산이 모든 가능한 튜플 쌍을 만들어냄 → 대부분 매칭이 되지 않는 정보로 비효율적 연산
- E.g.)
instructor 테이블과 teaches 테이블에서 지칭하는 튜플이 서로 같은 대상이어야 의미가 있음: σinstructor.id=teaches.id(instructor×teaches)를 통해 간추릴 수 있음
- 조인 연산: 데카르트 곱 연산 및 셀렉트 연산의 복합 사용이 아니라 단일한 명령어를 통해 조인 기능 제공
- r⋈θs=σθ(r×s)
- E.g.) σinstructor.id=teaches.id(instructor×teaches)=instructor⋈instructor.id=teaches.idteaches
Union
- 두 개의 릴레이션 합집합을 제공하는 연산
- r∪s: 합집합이 성공하기 위해서는 두 릴레이션 r, s가 같은
arity(어트리뷰트 개수)를 가져야 하고, 어트리뷰트 도메인이 compatible(특정 칼럼의 어트리뷰트가 동일한 타입)해야 함
Set Intersection
- 두 개의 릴레이션 교집합을 제공하는 연산
- r∩s: 합집합과 같은 제약 조건 필요. 같은
arity 및 어트리뷰트 도메인의 compatible 필요
Set Difference
- 두 개의 릴레이션 차집합을 제공하는 연산
- r−s: 같은
arity, 어트리뷰트 도메인 compatible
Assignment
- 복잡한 릴레이셔널 알제브라 수식을 간단한 변수로 할당하는 방법
- A←RA: 복잡한 표현이 하나의 단일한 변수로 할당됨
Rename
- 릴레이셔널 알제브라 결과값이 특정한 이름을 가지고 있지 않기 때문에 리네임을 통해 이후에도 활용
- ρx(E): 특정 수식 E의 결과를 x로 명명하는 연산
서로 같은 쿼리
- 동일한 쿼리를 쓰는 방법이 다양함
- E.g.)
Physics 부서에서 일하는 강사가 가르치는 강의 정보를 찾기: (1). σdept_name="Physics"(instructor⋈insturctor.ID=teaches.IDteaches) (2). (σdept_name="Physics"(instructor))⋈instructor.ID=teaches.IDteaches