코딩공작소
형식 DB언어 본문
<Relational algebra and relational calculus>
- Relational algebra
: 절차적인 쿼리 언어를 위한 형식 언어
: 관계 모델을 위한 작동의 기본 셋
- Relational algebra expression
: Relational algebra 작동의 순서
- Relational calculus
: 비절자 쿼리 언어를 위한 형식 언어
: relational 쿼리를 명시화 하기위한 하이 레벨 선언 언어
***
SQL명령어를 Query 로 Algebra로 서로 변환가능해야함.
****
튜플들의 속성의 개수 : degree ==> deg(R)
튜플들의 개수 : Cardinality ==> |R| or |r|
[1] SELECT <-- 수평으로 쪼갠다. input 테이블 1개.
선택 조건을 만족하는 관계들중에서 튜플들의 서브 셋.
<선택 조건> 은 boolean이다.
deg(Re) = deg(R)
0 <= |Re| <= |R|
0 <= Selectivity <= 1 --> 선택조건에 의해 선택되는 튜플의 비율. 0에 가까울수록 선호된다. Selectivity = |Re| / |R|
[2]PROJECT <-- 수직으로 쪼갠다.
속성 리스트안에 있는 테이블의 명시된 칼럼들을 선택하고 나머지 칼럼은 버린다.
프로젝트와 결과는 중복을 제거한 것들의 집합이다.
deg(Re) = deg(attribute list) <= deg(R)
|Re| <= |R| (중복이 있는 경우 뺀다.)
소속번호 5번인 직원의 이름과 연봉 구하기.
임시 테이블을 이용한 작업.
<UNION, INTERSECTION , MINUS>
다양한 방법안에서 두개의 집합의 원소를 합치는 방법.
Binary operations.
관계들은 반드시 같은 튜플의 타입을 가져야한다. --> Union compatible
[3]Union
Re <- R U S
deg(Re) = deg(R) = deg(S)
|Re| <= |R| + |S| --> 중복의 개수만큼 차이가 있다.
[4]Intersection
deg(Re) = deg(R) = deg(S)
|Re| <= min(|R| , |S|)
[5]Minus
R-S
순서가 중요하다. (교환법칙 X)
deg(Re) = deg(R) = deg(S)
|Re| <= |R| (교집합이 없는경우 =)
[6]Cartesian ( 보통 독립적으로 사용하지 않고 조인연산과 같이 쓰인다.)
CROSS PRODUCT OR CROSS JOIN이라고 부른다
R X S --> select * from R,S
deg(Re) = deg(R) + deg(S)
|Re| = |R| * |S|
[7]Join
deg(Re) = deg(R) + deg(S)
0 <= |Re| <= |R|*|S|
join selectivity ==> |Re| / (|R| * |S|)
:일반적으로 카디션곱과 선택조건을 같이 사용하는 것이 조인연산이다.
[8]EQUI JOIN ( 세타 조인의 한 종류 = 인경우)
세타가 등호인 경우이다.
일반적인 deg, |Re|은 같지만 세타보다 일반적으로 |Re|가 작아야 한다.
항상 모든 튜플안에서 동일한 값을 갖는 속성의 쌍이 한개 이상 존재해야 한다.
[9]Natural join --> 중복 속성 제거
Equi join에서 같은 속성을 하나만 남긴다.
상대 릴레이션 간 대응되는 튜플들의 조합에서 중복 속성들을 없앤 것.
<--> outer join : 두 릴레이션 간 대응 되는 튜플 조합 외에도 본래 릴레이션에 있던 튜플들도 결과에 포함하는 것
deg(Re) = deg(R) + deg(S) - K ( K는 같은 속성의 갯수, AND 연산을 하는 만큼 k개가 생긴다. )
Join selectivity : 최대 사이즈는 nr * ns 로 기대된다.
Inner joins : match and combine 작동의 유형, 일반적으로 카디션 곱과 선택의 조합으로 정의 된다.
[10]DIVISION
Re <- R%S
한 테이블에 관련된 다른 테이블의 연관된 것들을 구할때 사용한다.
ex ) 이름이 존인 사람이 일하는 모든 프로젝트들에 대해서 일하는 모든 사원의 이름을 구해라.
R={A,B} S(B) -->R%S--> Re(A)
a1 | b1 b1 a1
a1 | b2 b2
a1 | b3 b3
a2 | b1
a2 | b2 b1 a1
a3 | b3 a2
<Query tree>
- 트리의 리프 노드로써 쿼리의 인풋 관계를 나타낸다.
- 내부 노드로써 algebra operations을 나타낸다.
- 루트노드로써 마지막 결과를 나타낸다.
<쿼리 트리>
*질의 최적화 기능*
카디션곱 + select ==> 하나의 조인.
DBMS마다 각각 쿼리를 처리하는 방법은 다르다.
아래의 트리가 실행시간이 효율적이다
**Select , project 연산들을 아래서 실행하는 것이 더 좋다 중간 테이블의 크기가 작아진다.
<Additional Relational Operations>
- Generalized projection : 속성의 functions들을 프로젝션 리스트안에 포함되는 것을 허락한다.
- Aggregate functions and grouping : numeric values의 집합. common functions에 적용된다.
- Group tuples bu value of some of the grouping attributes.
[11]OUTER JOIN
- 매칭되는게 없어도 결과 테이블에 포함시킴.
- Type : left , right, full outer join.
*Union Compatible : degree , domain이 일치해야 한다.
- Partially compatible (부분적으로만 가능한 경우) : 양쪽의 관계로부터의 모든 튜플을 결과에 포함시킨다. 같은 값은 한번만 포함시킨다.
--> select name,address
from Employee, Department
where Dno=Dnumber AND Dname = 'research'
'어플리케이션개발 > DB' 카테고리의 다른 글
함수적 종속성(FD)와 정규화 (2) | 2018.11.28 |
---|---|
DB application programming (0) | 2018.11.21 |
SQL DML (0) | 2018.11.15 |
기본 SQL (0) | 2018.11.09 |
데이터베이스물리설계 (0) | 2018.11.07 |