아이티-잉

공부하며 정리하는 IT블로그

Today   Total  
2023년! 복 많이 받으세요

데이터베이스 :: 관계 대수와 관계 데이터 연산

2016. 3. 1. 13:53

관계 대수 Relation Algebra

 

 

관계 데이터 베이스의 릴레이션 조작을 위한 연산자 집합으로,

연산을 통해 기존의 데이터로부터 새로운 관계를 유도해낼 수 있다.

 

즉, 릴레이션으로부터 필요한 릴레이션을 만들기위한 연산자 집합을 말하며

연산자에 따라 우선순위가 있기때문에 절차적인 특징을 갖고 있다.

 

 

 


~ 광고 타임 ~


 

 

연산자 및 우선순위

 

 

(이미지 캡쳐 : 개밥주는 남자)

 

연산자를 살펴보면서 대세 강아지들 대중소 처럼

우선순위를 대, 중, 소로 분류하여 높을 수록 대, 낮을 수록 소로써 구분해보겠다.

 

 

 

구분 연산자 기호 우선순위
집합
연산자
곱집합
(Cartesian Product)
×
합집합(Union)
차집합(Difference)
교집합(Intersection)
관계
연산자
프로젝션(Projection)
셀렉션(Selection) σ
조인(Join)
디비전(Division) ÷

 

 

참고로 특수문자 조인의 기호는 유니코드로 표현했는데,

HTML 상에서 16진수(Hexadecimal; Hexa, Hex) 코드로는 ⨝에 해당한다.

 

 

 


~ 광고 타임 ~


 

 

 

연산

 

이해를 도와줄 A, B, C 세 릴레이션이 있다.

 

 

'A' 릴레이션
'B' 릴레이션
'C' 릴레이션
'D' 릴레이션
 

   
ㄱ1 ㄴ1 10   ㄹ1 ㅁ1   ㄱ1 ㄴ1 10   ㄹ1 5
ㄱ2 ㄴ2 20   ㄹ2 ㅁ2   ㄱ4 ㄴ4 40   ㄹ2 20
ㄱ3 ㄴ3 30  

             

 

 

 

 

 


~ 광고 타임 ~


 

 

 

1) 곱집합

 

두 릴레이션의 모든 튜플들을 접속(Concatenation)하여 새로운 릴레이션을 만든다.

영문 그대로 카디션 프로덕트(Cartesian Product)라고도 한다.



ㄱ1 ㄴ1 10 ㄹ1 ㅁ1
ㄱ1 ㄴ1 10 ㄹ2 ㅁ2
ㄱ2 ㄴ2 20 ㄹ1 ㅁ1
ㄱ2 ㄴ2 20 ㄹ2 ㅁ2
ㄱ3 ㄴ3 30 ㄹ1 ㅁ1
ㄱ3 ㄴ3 30 ㄹ2 ㅁ2

 

 

 

 


~ 광고 타임 ~


 

 

 

2) 합집합

 

속성과 도메인, 차수가 같은 두 릴레이션의 모든 튜플으로부터 새로운 릴레이션을 구한다.



ㄱ1 ㄴ1 10
ㄱ2 ㄴ2 20
ㄱ3 ㄴ3 30
ㄱ4 ㄴ4 40

 

 

 


~ 광고 타임 ~


 

 

3) 차집합

 

속성과 도메인, 차수가 같은 두 릴레이션의 겹치는 부분을 제거하여 새로운 릴레이션을 구한다.

 
ㄱ2 ㄴ2 20
ㄱ3 ㄴ3 30

 

 

 

 

4) 교집합

 

속성과 도메인, 차수가 같은 두 릴레이션의 중복되는 튜플로 새로운 릴레이션을 구한다.



ㄱ1 ㄴ1 10

 

 

 

 


~ 광고 타임 ~


 

 

 

5) 프로젝션

 

선택한 릴레이션에서 원하는 속성을 떼어내어 새로운 릴레이션으로 만든다.

즉, 수직(열)단위로 뽑아낸다.

 

 

ㄱ1 ㄴ1
ㄱ2 ㄴ2
ㄱ3 ㄴ3

'A' 릴레이션의 '가'와 '나' 속성만 뽑아서 만든 새로운 릴레이션이다.

 

 

 

 

 

6) 셀렉션

 

선택한 릴레이션에서 원하는 조건식으로 튜플을 떼어내어 새로운 릴레이션을 만든다.

즉, 수평(행)단위로 뽑아낸다.

 

 

ㄱ1 ㄴ1 10
ㄱ2 ㄴ2 20

 

'A' 릴레이션의 '다' 속성값이 20 이상인 튜플만 뽑아서 만든 새로운 릴레이션이다.

 

 

 


~ 광고 타임 ~


 

 

7) 조인

 

둘 이상의 릴레이션에서 조건에 맞는 속성을 가진 튜플을 통해 새로운 릴레이션을 만든다.

조인의 종류는 크게 5가지로 세타 조인, 동등 조인, 자연 조인, 외부 조인 등등이 있다.

 

술 자리 합석도 일종의 조인(쪼인)이지만 여기선 다루지 않겠다. 

 

 

몇 가지 조인을 살펴보자.

 

ㄱ. 세타 조인(Theta Join; Θ-Join)

비교 연산자(=≠<>≤≥)로 속성을 비교하고, 튜플을 뽑아 새로운 릴레이션을 만든다.

 

ㄱ1 ㄴ1 10 ㄹ1 5
ㄱ3 ㄴ3 30 ㄹ2 20

'A' 릴레이션의 '다' 속성값이 'D' 릴레이션의 '면' 속성값보다 크다면

해당 튜플을 뽑아 새로운 릴레이션으로 만든다.

 

 

 

 

ㄴ. 동등 조인(Equal Join)

동등 연산자(=)만으로 속성을 비교하고, 튜플을 뽑아 새로운 릴레이션을 만든다.

 

 

ㄱ2 ㄴ2 20 ㄹ2 20

 

'A' 릴레이션의 '다' 속성값이 'D' 릴레이션의 '면' 속성값과 같다면

해당 튜플을 뽑아 새로운 릴레이션으로 만든다.

 

 

 

 


~ 광고 타임 ~


 

 

 

ㄷ. 자연 조인(Natural Join)

동일 조인 후 나타나는 중복된 속성을 제거하여 새로운 릴레이션을 만든다.

 

 

 

ㅁ1 5
ㅁ2 20

 

'B' 릴레이션의 '라' 속성과 'D' 릴레이션의 '라' 속성이 동일하므로 제거된 후

남은 튜플로 새로운 릴레이션을 만든다.

 

 

 

 

ㄹ. 외부 조인(Outer Join)

자연 조인 후 조건을 만족한 튜플 외에도, 실패한 튜플에 대해

'NULL'값을 입력하여 릴레이션을 만든다.

 

그리고 방법에 따라 왼쪽, 오른쪽, 완전으로 총 3종류가 있다.

 

 

 

'X' 릴레이션
'Y' 릴레이션

ㄱ1 ㄴ1 ㄷ1
ㄷ1 ㄹ1
ㄱ2 ㄴ2 ㄷ2
ㄷ5 ㄹ5
ㄱ3 ㄴ3 ㄷ3
ㄷ9 ㄹ9

 

 

 

* 왼쪽 외부 조인(Left-outer Join)

자연조인에 실패할 경우, 연산자 좌측에 위치한 릴레이션을 살리고 나머지를 NULL로 채운다.

 

X ⟕ Y
ㄱ1 ㄴ1 ㄷ1 ㄹ1
ㄱ2 ㄴ2 ㄷ2 NULL
ㄱ3 ㄴ3 ㄷ3 NULL

 

'X' 릴레이션과 'Y' 릴레이션을 왼쪽 외부 조인할 경우,

'X' 릴레이션의 튜플을 모두 살린 채 남은 속성값은 NULL로 채운다.

 

 

오른쪽(Right)과 완전(Full)도 같은 방식으로 연산하며

오른쪽 외부 조인의 사용 기호는 ⟖, 완전 외부 조인은 ⟗ 이다.

 

유니코드로는 왼쪽(⟕), 오른쪽(⟖), 완전(⟗)이니 참고하자.

 

 

 

 


~ 광고 타임 ~


 

 

 

8) 디비전

 

내용도 없는데 생각보다 포스팅이 길어졌다.

점심먹어야 하므로 바로 예를 들어보겠다.

 

마지막은 특별히 첼시 레전드로 꾸며봤다.

 

 

'첼시' 릴레이션
'선수' 릴레이션
선수이름 포지션   선수이름
P. 체흐 GK   F. 램파드
F. 램파드 MF    
D. 드록바 FW    
J. 테리 DF
 

 

 

'첼시' 릴레이션과 '선수' 릴레이션이 있을 때,

두 릴레이션을 디비전(Division) 해보자.

 

 

 

포지션
MF

 

 

사칙연산의 나눗셈과 같은 원리로 릴레이션을 분리하여 생성하게 된다.

 

 

 

 


~ 광고 타임 ~


 

 

 

 

이제 점심 해먹어야겠다.

 

 

 

그래도 5대 국경일 중 하나인 삼일절이니까 태극기도 올려본다.

 

 

 

 

 

 

용기 내주셨던 분들에게 항상 감사한 마음으로 살자.

 

 

 

 

감사합니다.

 

 

 

끝.