관계 대수 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대 국경일 중 하나인 삼일절이니까 태극기도 올려본다.
용기 내주셨던 분들에게 항상 감사한 마음으로 살자.
감사합니다.
끝.
'IT > 데이터베이스' 카테고리의 다른 글
[DBMS] MS SQL Server 2014 Express 설치하기 (0) | 2016.04.27 |
---|---|
데이터베이스 :: SQL (0) | 2016.03.06 |
데이터베이스 :: 관계형 데이터베이스의 개념 (0) | 2016.02.29 |
데이터베이스 :: 이상(Anomaly)과 데이터 정규화 (0) | 2016.02.24 |
데이터베이스 :: 데이터모델과 데이터모델링 (0) | 2016.02.23 |