티스토리 뷰
관계대수의 개요
★ 관계대수 : 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어
릴레이션을 처리하기 위해 연산자와 연산규칙을 제공하는 언어로 피연산자가 릴레이션이고, 결과도 릴레이션임
질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시함
순수 관계 연산자 : Select, Project, Join, Division
일반 집합 연산자 : UNION(합집합), INTERSECTION(교집합), DIFFERENCE(차집합), CARTESIAN PRODUCT(교차곱)
★★ 순수 관계 연산자
순수 관계 연산자 : 관계 데이터베이스에 적용할 수 있도록 특별히 개발한 관계 연산자
Select
- Select는 릴레이션에 존재하는 튜플 중에서 선택 조건을 만족하는 튜플의 부분 집합을 구하여 새로운 릴레이션을 만듦
- 릴레이션의 행(가로)에 해당하는 큐플을 구하는 것이므로 수평 연산이라고도 함
- 연산자의 기호는 그리스 문자 시그마(σ)를 사용함
- 표기 형식 : σ<조건>(R) 단, R은 릴레이션 이름
# 예제 1
σavg ≥ 90 (성적) : <성적> 릴레이션에서 평균(Ave)이 90점 이상인 튜플들을 추출한다.
Name |
Kor |
Eng |
Mat |
Tot |
Ave |
홍길동 |
100 |
90 |
100 |
290 |
96.6 |
임꺽정 |
80 |
80 |
100 |
260 |
86.6 |
황진이 |
100 |
70 |
80 |
250 |
83.3 |
이한음 |
90 |
100 |
90 |
280 |
93.3 |
성춘향 |
85 |
95 |
90 |
270 |
90.0 |
↓ | |||||
Name |
Kor |
Eng |
Mat |
Tot |
Ave |
홍길동 |
100 |
90 |
100 |
290 |
96.6 |
이한음 |
90 |
100 |
90 |
280 |
93.3 |
성춘향 |
85 |
95 |
90 |
270 |
90.0 |
Project
- Project는 주어진 릴레이션에 속성 List에 제시된 Attribute만을 추출하는 연산임
- 릴레이션이 열(세로)에 해당하는 Attribute를 추출하는 것이므로 수직 연산자라고도 함
- 연산자의 기호는 그리스 문자 파이(π)를 사용함
- 표기 형식 : π<속성리시트>(R) 단, R은 릴레이션 이름
# 예제 2
π name, avg(성적) : <성적> 릴레이션에서 'Name'과 'Ave' 속성을 추출한다
Name |
Kor |
Eng |
Mat |
Tot |
Ave |
→ |
Name |
Ave |
홍길동 |
100 |
90 |
100 |
290 |
96.9 |
홍길동 |
96.6 |
|
임꺽정 |
80 |
80 |
100 |
260 |
86.6 |
임꺽정 |
86.6 |
|
황진이 |
100 |
70 |
80 |
250 |
83.3 |
황진이 |
83.3 |
|
이한음 |
90 |
100 |
90 |
280 |
93.3 |
이한음 |
93.3 |
|
성춘향 |
85 |
95 |
90 |
270 |
90.0 |
성춘향 |
90.0 |
Join
- Join은 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만드는 연산이다
- 연산자의 기호는 ▷◁를 사용함
- 표기 형식 : R▷◁키속성 r=키속성sS
- 단, 키 속성 r은 릴레이션 R의 속성이고, 키 속성 s는 릴레이션 S의 속성임
# 예제 3
성적 ▷◁No = No 학적부 : <성적> 릴레이션과 <학적부> 릴레이션을 'no' 속성을 기준으로 합치시오
<성적> |
|
<학적부> |
||||||||
No |
Name |
Kor |
Eng |
Mat |
Tot |
Avg |
No |
Addr | ||
9801 |
홍길동 |
100 |
90 |
100 |
290 |
96.6 |
9801 |
후평동 | ||
9802 |
임꺽정 |
80 |
80 |
100 |
260 |
86.6 |
9802 |
석사동 | ||
9803 |
황진이 |
100 |
70 |
80 |
250 |
83.3 |
9803 |
약사동 | ||
9804 |
이한음 |
90 |
100 |
90 |
280 |
93.3 |
9804 |
소양로 | ||
9805 |
성춘향 |
85 |
95 |
90 |
270 |
90.0 |
9805 |
퇴계동 | ||
↘ |
↙ |
성적.No |
Name |
Kor |
Eng |
Mat |
Tot |
Avg |
학적부.No |
Addr |
9801 |
홍길동 |
100 |
90 |
100 |
290 |
96.6 |
9801 |
후평동 |
9802 |
임꺽정 |
80 |
80 |
100 |
260 |
86.6 |
9802 |
석사동 |
9803 |
황진이 |
100 |
70 |
80 |
250 |
83.3 |
9803 |
약사동 |
9804 |
이한음 |
90 |
100 |
90 |
280 |
93.3 |
9804 |
소양로 |
9805 |
성춘향 |
85 |
95 |
90 |
270 |
90.0 |
9805 |
퇴계동 |
※ 자연 조인 : 조인 조건이 '=' 일 때 동일한 속성이 두 번 나타나게 되는데, 이중 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법을 자연(Nature) 조인이라고 한다.
- 예) 예제 3의 Join 연산 결과에는 조인에 사용된 'No' 속서이 두 번 표기되었는데 이것은 의미상 아무런 도움을 주지 ㅇ낳는다. 이런 경우 다음과 같은 자연 조인 연산을 통해 'No' 속성이 한번만 표기되게 할 수 있다
* 성적 ▷◁No 학적부
@ 자연 조인이 성립되려면 두 릴레이션의 속성명과 도메인이 같아야 한다
Division
- Division은 X ⊃ Y인 두 개의 릴레이션 R(X)와 S(Y)가 있을 때, R의 속성이 S의 속성값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산임
- 연산자의 기호는 ÷를 사용함
- 표기 형식 : R [속성 r ÷ 속성s] S
- 단, 속성 r은 릴레이션 R의 속성이고 속성 s는 릴레이션 S의 속성이며, 속성 r과 속성 s는 동일 속성값을 가지는 속성이어야 함
구입자 |
|||||||
번호 |
이름 |
구입품 코드 |
|||||
1 |
홍길동 |
A |
|||||
1 |
홍길동 |
B |
|||||
2 |
이한음 |
A |
생산품1 |
생산품2 |
|||
2 |
이한음 |
B |
생산품 코드 |
이름 |
생산품 코드 |
||
2 |
이한음 |
C |
A |
이한음 |
A |
||
4 |
성춘향 |
C |
B |
이한음 |
B |
# 예제 4
구입자 [구입 품코드 ÷ 생산품 코드] 생산품1
번호 |
이름 |
1 |
홍길동 |
2 |
이한음 |
# 예제 5
구입자 [이름, 구입품 코드÷이름, 생산품 코드] 생산품2
번호 |
2 |
일반 집합 연산자
일반 집합 연산자는 수학적 집합 이론에서 사용하는 연산자로서 릴레이션 연산에도 그대로 적용할 수 있음
- 일반 집합 연산자 중 합집합, 교집합, 차집합은 합병 조건이 가능해야 함
- 합병 조건 : 합병하려는 두 릴레이션 간에 애트리뷰트의 수가 같고, 각 애트리뷰트가 취할 수 있는 도메인의 범위가 같아야 함
- 합병 가능한 두 릴레이션 R과 S가 있을 때 각 연산의 특징을 요약하면 다음과 같음
연산자 |
기능 및 수학적 표현 |
카디널리티 |
합집합 UNION ∪ |
두 릴레이션에 존재하는 튜플의 합집합을 구하되, 결과로 생성된 릴레이션에서 중복되는 튜플은 제거된다 R ∪ S = { t | t ∈ R ∨ t ∈ S } ※ t는 릴레이션 R 또는 S에 존재하는 튜플이다 |
| R ∪ S | ≤ | R | + | S | 합집합의 카디널리티는 두 릴레이션 커디널리티의 합보다 크지 않다 |
교집합 INTERSECTION ∩ |
두 릴레이션에 존재하는 튜플의 교집합을 구하는 연산 R ∩ S = { t | t ∈ R ∧ t ∈ S } ※ t는 릴레이션 R 그리고 S에 동시에 존재하는 튜플이다 |
| R ∩ S | ≤ MIN { |R| , |S| } 교집합의 카디널리티는 두 릴레이션 중 카디널리티가 적은 릴레잇연의 카디널리티보다 크지 않다 |
차집합 DIFFERENCE - |
두 릴레이션에 존재하는 튜플의 차집합을 구하는 연산 R - S = { t | t ∈ R ∧ t ≠ S } ※ t는 릴레이션 R에는 존재하고 S에 없는 튜플이다 |
|R - S | ≤ |R| 차집합의 카디널리티는 릴레이션 R의 카디널리티보다 크지 않다 |
교차곱 CARTESIAN PRODUCT × |
두 릴레이션에 있는 튜플들의 순서쌍을 구하는 연산 R × S = { r · s | r ∈ R ∧ s ∈ S } ※ r은 R에 존재하는 튜플이고, s는 S에 존재하는 튜플이다 |
| R × S | = |R| × |S| 교차곱은 두 릴레이션의 카디널리티를 곱한 것과 같다 |
관계해석
관계 데이터 모델의 제안자인 코드(E.F. Codd)가 수학의 Predicate Calculus(술어해석)에 기반을 두고 관계 데이터베이스를 위해 제안함
관계해석은 관계 데이터의 연산을 표현하는 방법으로, 원하는 정보를 정의할 때는 계산 수식을 사용함
관계해석은 원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성을 지님
튜플 관계해석과 도메인 관계해석이 있음
기본적으로 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력 면에서 동등하며, 관계대수로 표현한 식은 관계해석으로 표현할 수 있음
질의어로 표현함