2014/04/11 - [Database System] - Chapter 3
2014/04/11 - [Database System] - Chapter 2
2014/04/11 - [Database System] - Chapter 1
- 관계 모델을 위한 기본적인 연산들의 집합을 관계 대수(relational algebra)라고 한다.
- 일련의 관계 대수 연산들은 관계 대수식을 형성한다.
- 대수는 연산자와 피연산자를 통해 연산의 의미와 방법을 기술한 수학의 한 분야이다.
6.1. 단항 관계 연산: 실렉트와 프로젝트
- 릴레이션들을 다루는 연산들
- 검색 요구(질의)를 기술하는 데에 사용한다.
- 질의 결과도 릴레이션
6.1.1 실렉트(SELECT) 연산
- 릴레이션 R에서 어떤 선택조건 c를 만족하는 투플들을 선택함
- 연산 형식: 
- 조건 c는 R의 애트리뷰트들에 대한 임의의 불리언 식
- 결과 릴레이션은 R과 동일한 애트리뷰트들을 가짐
- 결과 릴레이션은
의 투플 중 애트리뷰트 값들이 조건 c를 만족하는 투플들로 구성됨
- 예제:



6.1.2 프로젝트(PROJECT) 연산
- 릴레이션 R에서 애트리뷰트 리스트 L에 명시된 애트리뷰트(열)들만 선택함
- 연산 형식: 
- 결과 릴레이션은 L에 명시된 R의 애트리뷰트들만 가짐
- 예제:

- PROJECT 연산은 결과 릴레이션이 수학적 집합이므로 중복된 투플들을 제거함
- 예제:

봉급이 1,000,000원인 남자 사원들이 여러명 이더라도 결과 릴레이션에는 단지 하나의
투플만이 포함되며, 나머지는 제거됨.
6.1.3 연산의 순서와 이름 변경 연산
- 다수의 연산을 결합하여 관계 대수식(질의)을 형성할 수 있음
예제: 부서 5에서 일하는 사원들의 이름과 봉급을 검색하라.

-
대상 릴레이션: EMPLOYEE
선택 조건: 5번 부서
프로젝션 리스트: 이름, 주소
- 각 중간 단계의 임시 릴레이션에 이름을 부여할 수도 있음


* ... → _ (언더바) 표기
- 결과 릴레이션의 애트리뷰트 이름은 재명명 할 수도 있음
6.2 집합 이론과 관계 대수 연산
- 합집합: 
- 연산
에서의 호환성
- 피연산자 릴레이션
과
는 애트리뷰트들의 갯수가 동일하고, 대응되는 애트리뷰트들의 도메인이 호환성을 가져야 함; 즉,
에 대하여
이어야 함.
- 이 조건을 합집합 호환성(union compatibility)이라 부른다.
- 연산
의 결과 릴레이션은 피연산자 릴레이션
과 동일한 애트리뷰트 이름들을 가진다. (관례적으로)
zero or more (0개 이상)
one or more (1개 이상)
(a) STUDENT
Fn |
Ln |
Susan |
Yao |
Ramesh |
Shah |
Johnny |
Kohler |
Barbara |
Jones |
Amy |
Ford |
Jimmy |
Wang |
Ernest |
Gilbert |
INSTRUCTOR
Fname |
Lname |
John |
Smith |
Ricardo |
Browne |
Susan |
Yao |
Francis |
Johnson |
Ramesh |
Shah |
(b) 
Fn |
Ln |
Susan |
Yao |
Ramesh |
Shah |
Johnny |
Kohler |
Barbara |
Jones |
Amy |
Ford |
Jimmy |
Wang |
Ernest |
Gilbert |
John |
Smith |
Ricardo |
Browne |
Francis |
Johnson |
(c) 
Fn |
Ln |
Susan |
Yao |
Ramesh |
Shah |
(d) 
Fn |
Ln |
Johnny |
Kohler |
Barbara |
Jones |
Amy |
Ford |
Jimmy |
Wang |
Ernest |
Gilbert |
(e) 
Fn |
Ln |
John |
Smith |
Ricardo |
Browne |
Francis |
Johnson |
[그림 6.4] 집합 연산 합집합, 교집합, 차집합:
(a) 합집합 호환적인 두 릴레이션
(b) 
(c) 
(d) 
(e) 
6.2.2 카티션 곱(또는 크로스 프로덕트) 연산
-
- R의 투플 t는
의 투플
과
의 투플
분리됨; 즉,
그리고 
-
이
개의 투플을
가
개의 투플을 갖는다면, R은
개의 투플을 가지게 됨
- 카티션 프로덕트는 그 자체로는 큰 의미가 없는 연산이지만 적절한 SELECT연산과 함께 사용되면 두 릴레이션에서 서로 관련이 있는 투플들을 생성하는데 사용될 수 있음
- 예제: 모든 DEPARTMENT 투플과 그 부서장의 EMPLOYEE 투플을 조합하라.
3 * 8 = 24 투플 생성
3개의 투플만 선택

6.3 이항관계 연산: 조인과 디비전 연산
6.3.1 조인 연산
- 두 릴레이션으로부터 관련있는 투플을 결합하여 하나의 투플로 생성함
- 관련성의 여부를 조건으로 표시하며, 이를 조인 조건이라고 한다.
- 조인은 참조 무결성 제약조건을 가지고 사용된다.


DEPT_MGR
Dname |
Dnumber |
Mgr_ssn |
... |
Fname |
Minit |
Lname |
Ssn |
... |
Research |
5 |
333445555 |
... |
Franklin |
T |
Wong |
333445555 |
... |
Administration |
4 |
987654321 |
... |
Jennifer |
S |
Wallace |
987654321 |
... |
Headquarters |
1 |
888665555 |
... |
James |
E |
Borg |
888665555 |
... |
[그림 6.6] 조인 연산
의 결과
EMPLOYEE
Fname |
Minit |
Lname |
Ssn |
Bdate |
Address |
Sex |
Salary |
Super_ssn |
Dno |
John |
B |
Smith |
123456789 |
09-JAN-55 |
731 ... |
M |
30000 |
333445555 |
5 |
Franklin |
T |
Wong |
333445555 |
08-DEC-45 |
638 ... |
M |
40000 |
888665555 |
5 |
Alicia |
J |
Zelaya |
999887777 |
19-JUL-58 |
3321 ... |
F |
25000 |
987654321 |
4 |
Jennifer |
S |
Wallace |
987654321 |
20-JUN-31 |
291 ... |
F |
43000 |
888665555 |
4 |
Ramesh |
K |
Narayn |
666884444 |
15-SEP-52 |
975 ... |
M |
38000 |
333445555 |
5 |
Joyce |
A |
English |
453453453 |
31-JUL-62 |
5631 ... |
F |
25000 |
333445555 |
5 |
Ahmad |
V |
Jabbar |
987987987 |
29-MAR-59 |
980 ... |
M |
25000 |
987654321 |
4 |
James |
E |
Borg |
888665555 |
10-NOV-27 |
450 ... |
M |
55000 |
null |
1 |
RESULT
Research |
Franklin Wong |
Administration |
Jennifer Wallace |
Headquarters |
James Borg |
- <조건> AND <조건> AND ... AND <조건>
- 각 조건의 형태는
이며,
는 R의 애트리뷰트,
는 S의 애트리뷰트이다.
- 조인 조건에 사용된 속성 (
와
를 조인 속성이라고 부름)
- 일반적인 조인 조건(>, =, < 등)을 가진 조인 연산
- 조인 조건에서 동등 비교(equality comparison)만을 사용하는 조인
- EQUIJOIN 사용 예제:
모든 DEPARTMENT의 이름과 그 관리자의 이름을 검색하라:


- EQUIJOIN의 결과에는 두 조인속성의 값이 중복되어 나타난다.
- 조인 결과에서 조인 속성 하나를 제거하여 중복된 값이 나타나지 않도록 한 조인을 자연조인이라고 한다.
- 표시법:
(R1의 조인 애트리뷰트들), (R2의 조인 애트리뷰트들) 
- 예제: 모든 EMPLOYEE의 이름과 그의 DEPARTMENT 이름을 검색하라.


- 두 조인 속성이 동일한 이름을 갖는다면 간단히
라고 표시함
- 예제: 모든 EMPLOYEE의 이름과 그 상급자의 이름을 검색하라.
// 속성 이름의 변경
// 자연 조인
- 자연 조인에서는 조인 애트리뷰트들이 양쪽의 릴레이션에서 동일한 이름을 가져야 하며, 그렇지 않는 경우 조인 속성의 이름을 먼저 동일하게 변경해야 한다.
- 두 릴레이션에서 하나 이상의 조인 애트리뷰트 쌍이 존재하는 경우 주의가 요망됨.
조인 애트리뷰트들 |
관계 |
 |
EMPLOYEE가 DEPARTMENT를 관리. |

|
EMPLOYEE가 DEPARTMENT에서 일함. |
예제: "모든 EMPLOYEE의 이름과 그가 일하는 DEPARTMENT의 이름을 검색하라"에 대한 자연 조인은 다음과 같이 작성한다.
// Dnum이 조인 속성
// Mgr_ssn은 조인 속성이 아니다.
- 하나의 릴레이션에 대한 조인
- Self Join은 한 릴레이션의 서로 다른 두 사본을 조인하는 것으로 간주한다.
- 이 경우, 사본 릴레이션에서는 원본 애트리뷰트 이름을 재명명(renaming)하는 것이 유용하다.
- 예제: "모든 EMPLOYEE의 이름과 그의 SUPERVISOR의 이름을 검색하라."

- 지금까지 소개한 모든 연산자는 선택(SELECT), 프로젝트(PROJECT), 합집합(UNION), 차집합(SET DIFFERENCE), 카티션 프로덕트(CARTESIAN PRODUCT) 연산들 만의 조합으로 표현할 수 있다.
- 연산자 집합
를 관계대수 연산자의 완전 집합(complete set)이라 부른다.
- 이 연산자 집합과 동등한 모든 질의 언어들은 관계적으로 완전하다(relationally complete)라고 정의한다.
- 디비전(division) 연산
- 집단 함수(aggregate functions)와 그룹화(grouping) 연산
- 외부 조인(OUTER JOIN)과 외부 합집합(OUTER UNION)
6.3.4 디비전 연산
-
은 다음과 같이 정의됨 (
이고,
이다.)



예제:
R
A |
B |
a1 |
b1 |
a2 |
b1 |
a3 |
b1 |
a4 |
b1 |
a1 |
b2 |
a3 |
b2 |
a2 |
b3 |
a3 |
b3 |
a4 |
b3 |
a1 |
b4 |
a2 |
b4 |
a3 |
b4 |
÷
S
결과값
T

6.3.5 질의 트리 표기법(Query Tree)

[그림 6.9] 질의 2의 관계 대수식에 대응되는 질의 트리

6.4 추가적인 관계 연산
6.4.1 일반화된 프로젝트 연산
예제:
다음과 같은 릴레이션이 존재한다.

그리고 리포트는 다음과 같은 결과를 요구한다.

이때 이름 변경 연상과 결합된 일반화된 프로젝트 연산이 다음과 같이 사용될 수 있다.

6.4.2 집계 함수(집단 함수)(aggregate functions)와 그룹화
- 투플의 속성 중 어떤 속성들에 의해 그룹화되는 투프를
- SUM, COUNT, AVERAGE, MIN, MAX 함수를 의미한다.
- 이들은 데이터베이스 응용에서 값들의 집합 또는 투플들의 집합에 적용되며, 표준 관계 대수로 표현할 수 없다.
- 다음과 같이 표현하며, 그룹화 애트리뷰트들은 선택적이다.

6.4.3 순환적 폐포(recursive closure) 연산
- 동일한 테이블에서 투플들 간의 순환적 관계(recursive relationship)를 질의하는데 사용된다.
- 예: Employee 테이블에서 사원과 상사간의 관계에 대하여 특정 사원의 모든 상사(직ㆍ간접 상사관계)에 있는 직원을 모두 리턴하시오.
- 이러한 질의는 루핑을 사용하여 한 단계 윗 상사들의 집합을 구하고, 이를 바탕으로 2단계 위 상사를 구하며, 이러한 과정을 더 이상의 상사 집합이 없을 때 까지(사장이 나올때 까지) 구해나가야 하므로 루핑 처리가 필요하게 된다.
6.4.4 외부 조인(OUTER JOIN) 연산
- 정규 EQUIJOIN이나 자연 조인(NATURAL JOIN) 연산에서 조인 조건을 만족하지 않은 투플들은 결과 릴레이션에도 나타나지 않는다.
- 조인에 참여하는 릴레이션의 모든 투플들이 조인의 여부와 관계없이 결과 릴레이션에 나타내고 싶은 경우 외부 조인을 사용한다.
- 외부 조인에서는 상대방 릴레이션에 대응되는 투플이 없으면 빈 애트리뷰트들에 NULL 값을 채워서 결과에 포함시킨다.
- 왼쪽 외부 조인(LEFT OUTER JOIN)
- 왼쪽 릴레이션은 모두 살려낸다.
-
는
의 모든 투플들이 결과 릴레이션이 나타나도록 한다.
- 오른쪽 외부 조인(RIGHT OUTER JOIN)
- 오른쪽 릴레이션은 모두 살려낸다.
-
는
의 모든 투플들이 결과 릴레이션이 나타나도록 한다.
- 완전 외부 조인(FULL OUTER JOIN)
- 모든 릴레이션을 살려낸다.
-
는
과
의 모든 투플들이 결과 릴레이션이 나타나도록 한다.

- 호환성이 없는 두 릴레이션을 유니온하는데 사용된다.
- 예:
STUDENT(Name, Ssn, Department, Advisor)와
FACULTY(Name, Ssn, Department, Rank)의 outer union은
RESULT(Name, Ssn, Department, Advisor, Rank) 이다.
RESULT에서 STUDENT 투플은 Rank 속성의 값이 null이고, FACULTY 투플은 Advisor 속성의 값이 null이다.
6.5 관계 대수 질의의 예
질의 1: 'Research' 부서에서 일하는 모든 사원의 이름과 주소를 검색하라.

하나의 in-line 표현식으로 표현한다면, 이 질의는 다음과 같다.

질의 2: 'Stafford'에 위치한 모든 프로젝트에 대하여 프로젝트 번호와 관리 부서 번호, 부서 관리자의 성, 주소, 생년월일을 나열하라.

6.6 투플 관계 해석
- "어떻게 검색할 것인가" 보다 "무엇을 검색할 것인가" 만을 기술하는 선언적 표현법을 사용하는 비절차적 질의어
- SQL을 포함한 많은 상업용 관계 언어들이 관계 해석에 기반을 두고 있음.
- 투플 관계 해석(tuple relational calculus)와 도메인 관계 해석(domain relational calculus)으로 구분됨
- 관계 해석은 하나의 선언적(declarative) 해석식으로 검색 질의를 명시하며, 비절차적인 언어이다.
- 관계 대수에서는 연산들을 순차적으로 사용하므로 절차적인 성질을 가진다.
- 두 언어의 표현력(expressive power)은 동등하다.
- 관계적 완전성(relationally completeness)
- 어떤 관계 질의어 L이 관계 해석 또는 관계 대수로 표현 가능한 어떤 질의도 표현할 수 있으면 L은 "관계적으로 완전(relationally complete)하다." 라고 한다.
- 대부분의 관계 질의어들은 관계적으로 완전하며, 집단 함수(aggregate functions), 그룹화(grouping), 순서화(ordering) 등의 연산들을 제공하므로 관계 해석보다
표현력이 강해진다.
6.6.1 투플 변수와 범위 릴레이션
- 릴레이션의 투플들을 범위(range)로 가지는 변수이다.
예: 봉급이 $50,000을 넘는 모든 사원을 검색하라.
- 투플
에 대하여
을 만족하는 투플 만이 검색된다.
- 투플
의 모든 애트리뷰트 값들이 리턴된다.
-
의 일부 애트리뷰트만을 검색하려면 다음과 같이 작성한다.

이는 다음 SQL 질의와 동일한 의미를 가진다.

6.6.2 투플 관계 해석의 표현식과 식

-
은 투플 변수
- 각
는
가 범위로 하는 릴레이션의 애트리뷰트
-
는 조건 또는 투플 관계 해석의 식(formula)
-
는
의 범위가
임을 명시
-
,
는 비교 연산자 
-
또는
,
는 상수
- 모든 원자들은 식이다.
-
과
가 식이면
,
,
,
도 식이다.
6.6.3 존재 정량자와 전체 정량자
- 전체 정량자(universal quantifier)
(for all이라 읽는다.)
- 존재 정량자(existential quantifier)
(their exists라 읽는다.)
- 어떤 식 F가 원자인 경우, 여기에 나타난 투플 변수의 어커런스(occurrence)는 F에서 자유롭다. (자유 투플 변수)
- 식
,
,
,
에 나타난 투플 변수
가 자유로운가 여부는
이나
에서 자유로운가에 달려있다.
-
내의 투플 변수
의 모든 자유 어커런스들은
나
형태의 식에서 정량자에 속박된다.

-
는
과
모두에서 자유롭다.
-
는
에서
정량자에 속박된다.
-
가 식이면,
도 식이다.
-
내의
의 자유 어커런스들에 할당된 "적어도 하나의 투플" 에 대해서
가 참으로 계산되면 식
는 참이고, 그렇지 않으면 거짓이다.
-
가 식이면,
도 식이다.
-
내의
의 자유 어커런스들에 할당된 "모든 투플" 에 대해서
가 참으로 계산되면 식
는 참이고, 그렇지 않으면 거짓이다.
-
가 참이 되게 하는 어떤 투플
가 "존재" 하면
가 참이므로,
를 존재 정량자라 부른다.
- "모든" 투플들이
를 참이 되도록 해야
가 참이므로,
를 전체 정량자라 부른다.
6.6.4 투플 관계 해석식에서 질의 예(존재 정량자를 이용한 질의 예)
Q1:

- 관계 해석 식에서 자유 투플 변수들만 막대 ( | ) 왼쪽에 나타낸다.
- 막대 ( | )는 "such that" 이라 읽는다.
-
는
와
의 범위 릴레이션을 명시한다.
-
는 선택 조건(selection condition)이다. (관계 대수의 Select에 해당한다.)
-
는 조인 조건(join condition)이다. (관계 대수의 EQUI-JOIN과 유사한 목적으로 사용된다.)
질의 2: 'Stafford'에 위치한 모든 프로젝트에 대하여 프로젝트 번호, 관리 부서 번호, 부서 관리자의 성, 주소, 생일을 나열하라.
Q2:

Q3:

Q4:

Q8:

- 관계 대수의 UNION은 관계 해석의 OR 연결자에 대응한다.
- INTERSECTION은 AND 연결자에 대응한다.
- NOT 연결자는 전체 정량자와 존재 정량자를 동등한 식으로 변환하는데에 사용될 수 있다.
6.6.6 전체 정량자와 존재 정량자 사이의 변환



6.6.7 질의에서의 전체 정량자의 사용
질의 3: 5번 부서가 관리하는 모든 프로젝트에서 근무하는 사원들의 이름을 나열하라.
Q3:

Q3:

- Q3의 결과로 구해지는 사원
는 5번 부서에서 관리하는 모든 프로젝트에서 근무해야 한다.
- 이러한 투플을 찾기 위하여 관심없는 모든 투플들을 전체 정량자로부터 제외시켜야 한다.
-
에서
는 관심있는 릴레이션 "PROJECT" 에 없는 모든 투플들에 대해
를 참으로 만든다.
-
에서
는 관심없는 PROJECT 투플들, 즉 "Dnum이 5가 아닌 투플들" 에 대해
를 참으로 만든다.
-
는 나머지에 대해 만족되어야 할 조건, 즉 "5번 부서에 의해 관리되는 모든 PROJECT 투플들" 을 명시한다.

Q3A:

질의 6: 부양가족이 없는 사원들의 이름을 나열하라.
Q6:

Q6A:

질의 7: 부양가족이 적어도 한 명 있는 관리자들의 이름을 나열하라.
Q7:

6.6.8 안전식(safe expression)
- 결과로서 유한 개의 투플들을 생성하는 것이 보장된 식.
- 불안전식은 무한 개의 투플들을 생성할 수 있고, 투플들의 타입이 서로 다를 수 있다.
- 불안전한 식의 예제;

ㆍ 가능한 모든 투플들 중에서 EMPLOYEE가 아닌 모든 투플들을 생성한다.
ㆍ 이러한 투플들은 무한 개의 투플들로 구성되며, 투플의 타입이 상이할 수 있다.
ㆍ 따라서 위의 식은 불안전한 식이된다.
6.7 도메인 관계 해석
투플 변수 대신 도메인 변수(domain variables)를 사용하는 관계 해석
도메인 변수는 한 애트리뷰트의 도메인을 범위로 가진다.
차수가 n인 릴레이션의 경우 n개의 도메인 변수를 사용한다.
예제:
ㆍ 질의 0: 이름이 'John B. Smith'인 사원의 생년월일과 주소를 나열하라.
Q0:

ㆍ EMPLOYEE의 각 애트리뷰트들을 위한 열 개의 도메인 변수들: 
ㆍ Bdate를 위한 변수
, Address를 위한 
ㆍ 조건에 참여하는 변수들: 
ㆍ 조건에 참여하는 변수들
만 존재 정량자로 속박한다.
또 다른 표기법(QBE에서 사용):
Q0A:

ㆍ 질의 1: 'Research' 부서에서 일하는 모든 사원들의 이름과 주소를 검색하라.
Q1:

ㆍ
는 조인 조건
ㆍ
는 선택 조건
ㆍ 질의 2: 'Stafford'에 위치한 모든 프로젝트에 대해서 프로젝트 번호와 부서 번호, 그리고 부서 관리자의 성, 생일, 주소를 나열하라.
Q2:

ㆍ 질의 6: 부양가족이 없는 사원들의 이름을 찾아라.
Q6:

ㆍ 질의 7: 적어도 한 명의 부양가족이 있는 관리자들의 이름을 나열하라.
Q7:

6.8 요약
- 선택(SELECT), 프로젝트(PROJECT), 합집합(UNION), 차집합(SET DIFFERNECE), 카티션 프로덕트(Cartesion Product)
- 집계함수, 그루핑 연산, 외부조인 연산
- 투플 변수와 정량자(존재 정량자와 전체 정량자)
- 질의 예제
- 안전식
합집합 = 삽입(Insert)
차집합 = 삭제(Delete)
삭제 후 삽입 = 수정(Update)