2022. 10. 12. 23:57ㆍIntelligence Technology
관계 대수의 개요
관계 대수는 순수 관계 연산자와 일반 집합 연산자로 이루어집니다. 해당 연산자들은 기술하는 절차적인 언어로 관계형 DB에서 원하는 정보를 검색하는 데 사용됩니다. 릴레이션을 처리하기 위해 연산자와 연산 규칙을 제공하는 언어로 결과도 원하는 값들로 이루어진 릴레이션으로 표시됩니다.
순수 관계 연산자에는 Select, Project, Join, Division이 있으며 일반 집합 연산자에는 Union(합집합), Intersection(교집합), Difference(차집합), Cartesian product(교차곱)가 있습니다.
그러면 순수 관계 연산자부터 살펴보겠습니다.
그전에 튜플, 속성 등에 대해 궁금하신 분은 링크를 참고 부탁드립니다.
2022.10.12 - [Intelligence Technology] - [데이터베이스] 관계형 데이터베이스의 구조
Select는
릴레이션에 있는 튜플 중에서 조건에 맞는 튜플의 부분집합을 구한 뒤 새로운 릴레이션을 만드는 연산자입니다. 튜플(행)을 구하는 연산이므로 수평 연산으로도 불립니다. 연산 기호는 시그마(σ)이며 "σ<조건>(릴레이션 이름)"으로 표기합니다.
예시) 성적 릴레이션에서 평균이 90점 이상인 튜플 추출
Relation name: 성적
이름 | 언어 | 수리 | 외국어 | 과학탐구 | 평균 |
똑구 | 100 | 100 | 100 | 100 | 100 |
독구 | 80 | 70 | 70 | 50 | 67.5 |
덕구 | 80 | 90 | 20 | 30 | 55 |
σ 평균>=90(성적) 연산을 적용하면 다음과 같은 결괏값이 나옵니다.
결괏값
이름 | 언어 | 수리 | 외국어 | 과학탐구 | 평균 |
똑구 | 100 | 100 | 100 | 100 | 100 |
Project 연산자는
릴레이션에서 추출하려는 속성으로 조건을 걸고 해당 조건에 맞는 속성들만 추출하는 연산자입니다. 릴레이션의 열(세로)에 해당하는 속성들을 추출하여 표기를 해서 수직 연산자라고 합니다. 연산 기호는 파이(π)를 사용하고 "π<추출할 속성>(릴레이션 이름)"으로 표기합니다.
예시) 성적 릴레이션에서 이름과 평균 속성을 추출
Relation name: 성적
이름 | 언어 | 수리 | 외국어 | 과학탐구 | 평균 |
똑구 | 100 | 100 | 100 | 100 | 100 |
독구 | 80 | 70 | 70 | 50 | 67.5 |
덕구 | 80 | 90 | 20 | 30 | 55 |
π 이름, 평균(성적) 연산을 적용하면 다음과 같은 결괏값이 나옵니다.
결과값
이름 | 평균 |
똑구 | 100 |
독구 | 67.5 |
덕구 | 55 |
Join 연산자는
두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만들 때 사용하는 연산자입니다. 연산 기호는 ⋈이며여기서 키속성 r은 릴레이션 1의 속성이고 키속성 s는 릴레이션 2의 속성입니다.
예시) 성적 릴레이션과 전공 릴레이션을 학번 속성을 기준으로 Join 연산
Relation 1 : 성적
학번 | 이름 | 언어 | 수리 | 외국어 | 과학탐구 | 평균 |
113 | 똑구 | 100 | 100 | 100 | 100 | 100 |
115 | 독구 | 80 | 70 | 70 | 50 | 67.5 |
214 | 덕구 | 80 | 90 | 20 | 30 | 55 |
Relation 2 : 전공
학번 | 전공 |
113 | 전기 |
115 | 컴퓨터공학 |
214 | 기계 |
성적 ⋈학번=학번 전공 연산을 적용하면
결괏값
학번 | 이름 | 언어 | 수리 | 외국어 | 과학탐구 | 평균 | 전공 |
113 | 똑구 | 100 | 100 | 100 | 100 | 100 | 전기 |
115 | 독구 | 80 | 70 | 70 | 50 | 67.5 | 컴퓨터공학 |
214 | 덕구 | 80 | 90 | 20 | 30 | 55 | 기계 |
Division 연산자는
X ⊃Y인 두 개의 릴레이션인 릴레이션 X와 릴레이션 Y가 있을 때, 릴레이션 X의 속성이 릴레이션 Y의 속성 값을 모두 가진 튜플에서 Y가 가진 속성을 제외한 속성만을 구하게 하는 연산자입니다. 연산 기호는 나누기와 똑같은 ÷을 사용하며 표기 방식은 X [속성 x ÷ 속성 y] Y의 방식으로 표기합니다. 단, 속성 x는 릴레이션 X의 속성이고 y는 릴레이션 Y의 속성입니다. 또한 x와 y는 동일 속성 값을 가지고 있어야 합니다.
예시) 성적 릴레이션과 전공 릴레이션을 학번 속성을 기준으로 Join 연산
릴레이션 X : 구입자
번호 | 이름 | 구입품코드 |
1 | 똑구 | 샴푸 |
1 | 똑구 | 린스 |
2 | 독구 | 샴푸 |
2 | 독구 | 린스 |
2 | 독구 | 비누 |
3 | 덕구 | 비누 |
릴레이션 Y : 생산품 1
생산품코드 |
샴푸 |
린스 |
구입자[구입품코드 ÷ 생산품코드]생산품 1 연산을 적용하면
결괏값
번호 | 이름 |
1 | 똑구 |
2 | 독구 |
가 남게 됩니다. 즉, 생산품 코드는 Division 연산으로 사라져서 번호와 이름만 남게 되는데 똑구와 덕구가 2개씩 있는 상황에서 중복이 되다 보니 하나씩만 추출된 결과입니다.
또 다른 예시로 릴레이션 Y : 생산품 2를 아래와 같이 가정하고
이름 | 생산품코드 |
독구 | 샴푸 |
독구 | 린스 |
구입자[이름,구입품코드 ÷ 이름,생산품코드]생산품 2 연산을 적용하면
결괏값
번호 |
2 |
위와 같이 추출됩니다. 즉 이름과 구입품 코드가 겹치는 속성들을 제외하니 번호만 남고 중복항목은 제외해서 2만 추출된 결괏값입니다.
다음은 일반 집합 연산자에 대해 알아보겠습니다.
일반 집합 연산자는 수학 시간 때도 많이 접했던 연산자로 릴레이션 연산에서도 활용합니다. 일반 집합 연산을 적용하려면 합집합, 교집합, 차집합은 합병 조건이 충족되어야 하는데 합병 조건은 연산하려는 두 릴레이션의 속성수가 같고, 각 속성은 가질 수 있는 도메인(값)의 범위가 같아야 합니다.
연산기호는 합집합(∪), 교집합(∩), 차집합(-), 교차곱(X)이며 각각의 특징은 다음 표를 참고 부탁드립니다.
연산자 명 및 기호 | 의미 | 카디널리티(튜플의 수) |
합집합(∪) Union |
두 릴레이션의 튜플을 합하며 중복된 튜플은 제거 |
릴레이션1∪릴레이션2 <= 릴레이션1+릴레이션2 (교집합은 제거해서 단순 합보다는 튜플 갯수가 적음) |
교집합(∩) Intersection |
두 릴레이션에 있는 튜플의 교집합을 구하는 연산 |
릴레이션1∩릴레이션2 <= Min[릴레이션1,릴레이션2] (교집합 된 튜플 갯수는 교집합 이전의 튜플 갯수보다 적음) |
차집합(-) Difference |
두 릴레이션에 있는 튜플의 차집합을 구하는 연산 |
릴레이션1 - 릴레이션2 <=릴레이션1 (차집합된 릴레이션은 이전보다 튜플 갯수가 줄어듬) |
교차곱(X) Cartesian Product |
두 릴레이션에 있는 튜플들의 순서쌍을 구하는 연산 |
교차곱 연산이 적용되면 두 릴레이션의 카디널리티를 곱한 것과 같음 |
오늘은 데이터베이스의 관계 대수에 대해 포스팅을 해보았습니다.
오늘도 똑구의 꿀팁 블로그를 방문해 주셔서 감사합니다.
'Intelligence Technology' 카테고리의 다른 글
[데이터베이스] 자료구조의 개념 및 리스트(List)의 특징(선형 구조) (0) | 2022.10.22 |
---|---|
[데이터베이스] 정규화(Normalization), 정규화 과정을 통한 종속성 제거 (0) | 2022.10.20 |
[데이터베이스] 관계형 데이터베이스의 구조 (0) | 2022.10.12 |
[데이터베이스] 데이터베이스 설계 이유 및 순서는? (0) | 2022.10.10 |
[데이터베이스 언어] DDL, DML, DCL이란? (0) | 2022.10.09 |