관계대수
태그 :
- 개념
- 관계형 데이터베이스에서 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적 정형언어
1. 관계 데이터 모델에서 지원되는 정형적 언어, 관계대수의 개요
가. 관계대수(Relational algebra)의 정의
-관계형 데이터베이스에서 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적 정형언어
-관계해석(Relational calculus) : 정보(데이터)만 명시
나. 관계대수의 용도
-상용 관계 DBMS들에서 널리 사용되는 SQL의 이론적인 기초
-SQL을 구현하고 최적화하기 위해 DBMS의 내부 언어로서도 사용.
2. 관계대수의 릴레이션 생성 개념도
- 산술 연산자와 유사하게 단일 릴레이션이나 두 개의 릴레이션을 입력으로 받아 하나의 결과 릴레이션을 생성
3. 관계대수 연산자
가. 관계대수 연산자의 종류와 표기법
구분 |
연산자 종류 |
비고 |
|
관 계 대 수 |
집합 연산자 |
합집합(UNION, ∪) 교집합(INTERSECT, ∩) 차집합(DIFFERENCE, -) 카티션 프로덕트(CARTESIAN PRODUCT, ×) |
관계 대수의 폐쇄 성질 (closure property) -피연산자와 연산 결과가 모두 릴레이션 -중첩(nested)된 수식의 표현이 가능
합병가능(union-compatible)한 릴레이션 (∪, ∩, -) -피연산자들은 차수가 같아야 함 -애트리뷰트 별 도메인이 같아야 함 |
순수 연산자 |
실렉트(SELECT, s ) 프로젝트(PROJECT, P ) 조인(JOIN, ) 디비전(DIVISION, ÷) |
||
근원 연산자 |
합집합, 차집합, 카티션 프로덕트, 프로젝트, 실렉트 |
하나의 논리적 기능을 수행, 다른 연산을 이용 하여 표현할 수 없음 |
|
복합 연산자 |
교집합, 조인, 디비전 |
근원 연산을 이용하여 표현할 수 있음 |
|
관 계 해 석 |
투플 관계해 석 |
{ t1.A1, t2.A2, …, tn.An|F(t1, … tn, tn+1, …, tn+m) } . ti : 투플 변수 . F(t1,…, tn, tn+1,…, tn+m): ti가 연관된 정형식 |
원하는 릴레이션을 투플해석식(tuple calculus expression) 으로 정의할 수 있는 표기법 |
도메인 관계해 석 |
{ x1,x2,…,xn|F(x1,…,xn,xn+1,…,xn+m) } . xi: 도메인변수 . F(x1,…,xn,xn+1,…,xn+m) : xi에 대한 정형식 |
원하는 릴레이션을 도메인 해석식 (domain calculus expression)으로 표현하는 방법 |
- 일반집합연산(합집합, 교집합, 차집합, 카티션곱)와 순수관계연산(관계형 데이터베이스에서만 사용하는 연산자 : 실렉션, 프로젝션, 세타조인, 동등조인, 자연조인, 세미조인, 디비전)으로 분류가능
나. 관계대수 연산자의 기능
다. 일반 집합 연산자
연산자 |
설명 |
합집합 (UNION,∪) |
이항 연산으로 관계성이 있는 두개의 릴레이션을 합집합하여 하나의 릴레이션을 만들어 내는 연산 |
교집합 (INTERSECT,∩) |
이항 연산으로 관계성이 있는 두개의 릴레이션에서 중복되어 있는 내용을 선택하여 새로운 릴레이션을 만들어 내는 연산 |
차집합 (DIFFERENCE,-) |
이항 연산으로 관계성이 있는 두개의 릴레이션이 있을 때 그 중 하나의 릴레이션에서 또 다른 릴레이션의 내용과 겹치는 내용을 제거해서 새로운 릴레이션을 생성하는 연산 |
카티션 프로덕트 (CARTESIAN PRODUCT,×) |
이항 연산으로 두 릴레이션의 현재 투플로 구성 가능한 모든 조합 만듬 결과 릴레이션의 차수 = R의 차수 + S의 차수 결과 릴레이션의 카디널리티 = R의 카디널리티 * S의 카디널리티 |
라. 순수 집합 연산자
연산자 |
설명 |
셀렉션 (SELECT, ) |
단항 연산으로 릴레이션에서 조건에 맞는 레코드를 분리해내는 연산 하나의 릴레이션에서 수평적 부분집합을 취하는 방법 |
프로젝션 (PROJECT,∏) |
단항 연산으로 릴레이션에서 참조하고자 하는 어트리뷰트를 선택하여 분리해 내는 연산 하나의 릴레이션에서 수직적 부분집합을 취하는 방법 결과에서 중복된 투플은 제거됨 |
조인 (JOIN, ∞) |
두 개 이상의 릴레이션에서 조건에 맞는 튜플이나 어플리뷰트를 조합하여 새로운 릴레이션을 생성하는 연산 - 세타조인 : =, <>, >, >=, <, <= - 동일조인(Equi Join) : =, 중복속성 허용 - 자연조인(Natural Join) : =, 중복속성 제거 |
디비전 (DIVISION, ÷) |
두 개의 릴레이션 A와 B가 있을 때 B의 릴레이션의 모든 조건을 만족하는 경우의 튜플들을 릴레이션 A에서 분리해 내어 프로젝션하는 연산 |
마. 기타 연산자
연산자 |
설명 |
세미 조인 |
분산 데이터베이스 환경에서 대두된 조인 통신비용을 초소로 하는 조인 |
외부 조인 |
한 릴레이션에 있는 튜플이 조인할 상대 릴레이션에 대응하는 튜를이 없는 경우, 상대를 Null 튜플로 만들어 결과에 포함 두 조인 릴레이션의 모든 튜플들이 결과 릴레이션에 포함됨 |
외부 합집합 |
합병 가능하지 않는(부분적으로 합병가능한) 두 릴레이션을 차수를 확장시켜 합집합으로 만듦 |
4. 관계연산
종류 |
설명 |
합집합 |
<기준> |
차집합(DIFFERENCE) |
두 릴레이션의 차집합(difference)은 첫 번째 릴레이션에는 나타나지만 두 번째 릴레이션에는 나타나지 않는 투플들을 포함하는 세 번째 릴레이션이 된다. 두 릴레이션은 합병 가능 해야 한다 |
교집합(INTERSECTION) |
두 릴레이션의 교집합(intersection)은 첫 번째와 두 번째 릴레이션에 모두 나타나는 투플들을 포함하는 세 번째 릴레이션이 된다. 여기서도 릴레이션들은 합병 가능해야 한다. |
프로덕트(PRODUCT) |
프로덕트는 A × B 또는 A TIMES B라고 표시한다. |
프로젝션(PROJECTION) |
프로젝션(projection)은 한 릴레이션에서 지정된 속성들을 선택하는 연산이다. 프로젝션의 결과는 선택된 속성을 포함하는 새로운 릴레이션이 된다. 즉, 프로젝션은 주어진 릴레이션에서 열들을 선택해낸다. 그림 9-17 STUDENT 릴레이션의 프로젝션: |
셀렉션(SELECTION) |
|
조인(JOIN) |
조인(join) 연산은 프로덕트, 셀렉션, (경우에 따라) 프로젝션 연산을 합친 것이다. 두 릴레이션 A와 B의 조인은 다음과 같이 진행된다. ① 프로덕트 A × B를 구한다. ② 일부 투플을 제거하기 위해 셀렉션을 수행한다 (셀 렉션 조건은 조인 조건의 일부로 제시된다). ③ (경우에 따라) 프로젝션을 통해 일부 속성을 제거한 다.
(예) 각 학생에 대해 이름과 좌석번호를 알고 싶다고 하자. STUDENT JOIN(SID = StudentNumber) ENROLLMENT로 표기 "STUDENT의 SID값과 ENROLLMENT의 StudentNumber값이 같은 경우, 그 STUDENT 투플과 ENROLLMENT 투플을 조인시키라"는 것이다. (과정) 1. 이 조인을 수행하기 위해 먼저 STUDENT와 ENROLLMENT 의 프로덕트를 구한다 (그림 9-16). 2. 이 프로덕트 결과에서 STUDENT의 SID값이 ENROLLMENT 의 StudentNumber값과 같은 투플들만을 SELECT한다. 3. 최종적인 결과는 그림 9-19(b)와 같다. 그림 9-19(a) 의 조인을 동일 조인(equijoin), 그림 9-19(b)의 조 인을 자연 조인(natural join)이라고 한다. 특별히 명시하지않는 한 조인이라 하면 보통 자연 조인을 의미한다.
그림 9-19 STUDENT 와 ENROLLMENT 릴레이션의 조인의 예: (a) 동일 조인(Equijoin) (b) 자연 조인(Natural Join)
그러므로 STUDENT JOIN (Age = ClassSize) ENROLLMENT는 잘못된 조인이다. Age와 ClassSize값은 호환성은 있지만 도메인은 다르기 때문이다. 이러한 유형의 조인은 아무런 의미가 없다. (그러나 불행하게도 많은 관계DBMS 제품들이 이러한 조인을 허용한다.)
|
Division |
R ÷ S : S의 모든 투플에 연관되어 있는 R의 투플을 선택하는 것 |
세미 조인 (Semijoin, ) |
R S : R과 S의 자연조인한 결과를 R의 애트리뷰트로 프로젝트 |
외부 조인 (Outerjoin, ) |
한 릴레이션에 있는 투플이 조인할 상대 릴레이션에 대응되는 투플이 없을 경우, 상대를 널(null) 투플로 만들어 결과 릴레이션에 포함. 두 조인 릴레이션의 모든 투플들이 결과 릴레이션에 포함됨 |
외부 합집합 (Outer-union, ∪ ) |
합병 가능하지 않은(부분적으로 합병 가능한) 두 릴레이션을 차수를 확장시켜 합집합으로 만듬 Full Outer Join SELECT l.branch_name, l.loan_number, l.amount, b.customer_name FROM nloan l FULL OUTER JOIN nborrower b ON l.loan_number = b.loan_number; 주의사항 : where l.loan_number(+) = b.loan_number(+) ; è 질의어 없음.
Left Outer Join SELECT l.branch_name, l.loan_number, l.amount, b.customer_name FROM nloan l LEFT OUTER JOIN nborrower b ON l.loan_number = b.loan_number;
SELECT l.branch_name, l.loan_number, l.amount, b.customer_name FROM nloan l, nborrower b where l.loan_number = b.loan_number(+);
right Outer Join SELECT l.branch_name, l.loan_number, l.amount, b.customer_name FROM nloan l RIGHT OUTER JOIN nborrower b ON l.loan_number = b.loan_number;
SELECT l.branch_name, l.loan_number, l.amount, b.customer_name FROM nloan l, nborrower b where l.loan_number(+) = b.loan_number; |
5. 관계대수의 완전성과 한계
가. 관계대수의 완전성
-관계대수의 필수적인 연산자를 제외한 연산자는 필수적인 연산자를 두가지 이상 조합하면 표현이 가능
-임의의 질의어가 적어도 필수적인 연산자 만큼의 표현력을 가지고 있으면 관계적으로 완전(Relational Complete)하다고 표현
나. 관계대수의 한계
-관계대수는 산술연산이 불가능
-집단함수(Aggregate Function)를 지원하지 않음
-정렬을 나타낼 수 없음
-데이터베이스의 수정이 불가능