Transcript PPT File

제 3 장 관계형 모델
관계형 데이터베이스의 구조
 관계형 대수
 튜플 관계형 해석
 도메인 관계형 해석
 확장 관계형 대수 연산
 데이터베이스의 수정
뷰

Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
1
기본 구조



집합 A1, A2, …, An이 주어지면 릴레이션 r은 A1A2  …  An의 부
분 집합이다
따라서, 릴레이션은 aiAi인 n-튜플(a1, a2, …, an)의 집합이다.
예: 다음과 같다면
customer-name = {Jones, Smith, Curry, Lindsay}
customer-street = {Main, North, Park}
customer-city = {Harrison, Rye, Pittsfield}
그러면 customer-name customer-street customer-city에 대한
r = {(Jones, Main, Harrison), (Smith, North, Rye), (Curry, North,
Harrison), (Smith, North, Rye), (Curry, North, Rye),(Lindsay, Park,
Pittsfield)}인 릴레이션이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
2
릴레이션 스키마

A1, A2, …, An 은 애트리뷰트이다.

R = (A1, A2, …, An)인 릴레이션 스키마이다.
Customer-schema = (customer-name,
customer-street, customer-city)

r(R)은 릴레이션 스키마 R상의 릴레이션이다.
customer(Customer-schema)
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
3
릴레이션 사례
릴레이션의 현재 값(릴레이션 사례)는 테
이블로 표현된다.
 r의 원소 t는 튜플이며, 테이블에서 행으
로 표현된다.

customer-name
Jones
Smith
Curry
Lindsay
.
customer-street
Main
North
North
Park
customer
customer-city
Harrison
Rye
Rye
Pittsfield
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
4
키
K  R 이라 하자.
 K의 값이 각각의 가능한 릴레이션 r(R)의 고유한 튜플
을 구분하는데 충분하다면 K는 R의 수퍼 키이다. “가
능한 r”이란 모델링하고 있는 조직에 존재할 수 있는
릴레이션 r을 의미한다.
예: {customer-name, customer-street}와 {customer-name}
은 어느 두 고객도 같은 이름을 가질 가능성이 없으므
로 모두 Customer의 수퍼 키이다.
 K가 최소 길이이면 후보 키이다.
예: {customer-name}은 자신이 수퍼 키이고(어느 두 고객
도 같은 이름을 가질 가능성이 없다고 가정), 어떤 부분
집합도 수퍼 키가 아니므로 Customer의 후보 키이다.

Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
5
E-R 집합으로부터 키의 결정

강 엔티티 집합. 엔티티 집합의 주 키는 릴레이션의 주 키
가 된다.

약 엔티티 집합. 릴레이션의 주 키는 강 엔티티 집합의 주
키와 약 엔티티 집합의 구별자의 합집합으로 구성된다.

관계 집합. 관련된 엔티티 집합의 주 키의 합집합은 릴레
이션의 수퍼 키가 된다.
이진 다 대 다 관계 집합에서는 위의 수퍼 키가 또한 주 키이
다.
이진 다 대 일 관계 집합에서는 “다”쪽 엔티티 집합의 주 키
가 릴레이션의 주 키가 된다.
일 대 일 관계 집합에서는 어떤 쪽의 엔티티 집합의 주 키도
릴레이션의 주 키가 될 수 있다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
6
질의어




사용자가 데이터베이스로부터 정보를 요청하는 언어
언어의 부류:
- 절차식
- 비절차식
순수언어:
- 관계형 대수
- 튜플 관계형 해석
- 도메인 관계형 해석
순수 언어는 사람들이 사용하는 질의어의 기본을 이루
고 있다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
7
관계형 대수



절차식 언어
6 가지 기본 연산자
- 선택
- 추출
- 합집합
- 차집합
- 카티전 곱
- 재명명
연산자는 입력으로서 하나 이상의 릴레이션을 취해 그
결과로 새로운 릴레이션을 생성한다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
8
선택 연산


표기법 : P(r)
다음과 같이 정의된다.
P(r) ={ t | t  r and P(t)}
여기서 P 는 다음과 같은 유형의 표현을 다루는 명제 해석에서의
식이다.
<애트리뷰트> = <애트리뷰트> 또는 <상수>

>

<

(and), (or), (not)으로 연결된다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
9
선택 연산 예제

릴레이션 r :

A=BD>5(r)
A B C D
  1 7
  5 7
  12 3
  23 10
A B C D
  1 7
  23 10
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
10
추출 연산

표기법:
A1, A2, …, A k(r)



여기서 A1, A2는 애트리뷰트명이고 r은 릴레이
션명이다.
결과는 명시하지 않은 열을 제외한 k 열의 릴레
이션으로 정의된다.
릴레이션은 집합이기 때문에 중복 행은 결과에
서 제거된다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
11
추출 연산 예제

릴레이션 r :

A, C(r)
A




B
10
20
30
40
A C
 1
 1
 1
 2
C
1
1
1
2
=
A C
 1
 1
 2
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
12
합집합 연산
표기법 : r  s
 다음과 같이 정의된다.
r  s = {t | t  r or t  s}
 r  s가 가능하려면,
1. r과 s는 같은 항(애트리뷰트의 수가 같음)을
가져야 한다.
2. 애트리뷰트의 도메인은 양립할 수 있어야 한
다(즉, r의 두번째 열은 s의 두번째 열의 것과 같
은 유형의 값을 다룬다).

Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
13
합집합 연산의 예제


릴레이션 r, s
rs
A B
 1
 2
 1
A B
 2
 3
s
r
A




B
1
2
1
3
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
14
차집합 연산
표기법 : r - s
 다음과 같이 정의된다.
r - s = {t | t  r and t  s}
 차집합 연산은 양립할 수 있는 릴레이션 간에만
이루어질 수 있다.
- r과 s는 같은 항을 가져야 한다.
- r과 s의 애트리뷰트 도메인은 양립해야만 한다.

Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
15
차집합 연산의 예제

릴레이션 r, s
A B
 1
 2
 1
r

r-s
A B
 1
 1
A B
 2
 3
s
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
16
카티전 곱 연산
표기법 : r  s
 다음과 같이 정의된다.
r  s = {t q| t  r and q  s}
 r(R)과 s(S)의 애트리뷰트가 서로 다르다
고 가정하자(즉, RS = ).
 r(R)과 s(S)의 애트리뷰트가 서로 다르지
않다면, 재명명을 사용해야 한다.

Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
17
카티전 곱 연산의 예제

릴레이션 r, s :
A


C




B
1
2
r

rs
D
10
10
20
10
E
+
+
-
s
A








B
1
1
1
1
2
2
2
2
C








D
10
10
20
10
10
10
20
10
E
+
+
+
+
-
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
18
복합 연산




여러 연산을 사용해 표현식을 만들 수 있다.
예 : A=C(r  s)
A B C
D E

1  10 +
rs

1  10 +

1  20 
1 
10 
2  10 +

2  10 +

2  20 
2 
10 A=C(r  s)
A



B
1
2
2
C



D E
10 +
10 +
20 -
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
19
재명명 연산


이름을 줄 수 있도록 하여 관계형 대수 표현식의 결과
를 참조하도록 한다.
하나 이상의 이름으로 릴레이션을 참조하도록 한다.
예:
x(E)
이름 x로 표현식 E를 돌려준다.
관계형 대수 표현식 E가 n항이면,
x (A1, A2, …,An)(E)
이름 x하에 A1, A2, …,An으로 재명명된 애트리뷰트를 가
진 표현식 E의 결과를 돌려준다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
20
은행 예제
branch(branch-name, branch-city, assets)
customer(customer-name, customer-street, customer-city)
account(branch-name, account-number, balance)
loan(branch-name, loan-number, amount)
depositor(customer-name, account-number)
borrower(customer-name, loan-number)
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
21
예제 질의

1,200불을 초과하는 모든 대출을 찾아라.
 amount >1200(loan)

1,200불을 초과하는 각 대출의 대출 번호를 찾
아라.
loan-number( amount >1200(loan))
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
22
예제 질의

은행에 예금, 대출 또는 모두를 가진 고객의 이
름을 찾아라.
customer-name(borrower)  customer-name(depositor)
은행에 예금과 대출을 가진 모든 고객의 이름
을 찾아라.
customer-name(borrower)  customer-name(depositor)

Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
23
예제 질의
Perryridge 지점에 대출이 있는 모든 고객의 이름을 찾
아라.
customer-name(branch-name=“Perryridge”
(borrower.loan-number=loan.loan-number(borrower  loan)))
 Perryridge 지점에 대출이 있으면서 은행의 어떤 지점에
도 예금이 없는 모든 고객의 이름을 찾아라.
customer-name(branch-name=“Perryridge”
(borrower.loan-number=loan.loan-number(borrower  loan)))
- customer-name(depositor)

Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
24
예제 질의
Perryridge 지점에 대출이 있는 모든 고객의 이름을 찾
아라.
- 질의 1

customer-name(branch-name = “Perryridge”
(borrower.loan-number = loan.loan-number(borrower  loan)))
- 질의 2
customer-name(borrower.loan-number=loan.loan-number(
(branch-name = “Perryridge”(borrower))  loan))
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
25
예제 질의
가장 큰 예금 잔고를 찾아라.
 account 릴레이션을 d로 재명명한다.
 질의는 다음과 같다:
balance(account) - account.balance
(account.balance < d.balance(account d(account)))
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
26
형식적 정의


관계형 대수에서의 기본 표현식은 다음 중 하나 이상으로 구성된
다.
- 데이터베이스내의 릴레이션
- 상수 릴레이션
E1과 E2를 관계형 대수 표현식이라 하자; 다음은 모두 관계형 대수
표현식이다:
- E1  E2
- E1 - E2
- E1  E2
- P(E1), P는 E1내 애트리뷰트 상의 술어이다.
- S(E1), S는 E1내 어떤 애트리뷰트로 구성된 리스트이다.
- x(E1), x는 E1 의 결과에 대한 새로운 이름이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
27
추가 연산
관계형 대수에 어떠한 능력도 추가되지 않
지만 질의를 단순화하는 추가 연산을 정의
한다.
 공통 집합
 자연 죠인
 나누기
 배정
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
28
공통 집합 연산




표기법: r  s
다음과 같이 정의된다.
r  s = {t | t  r and t  s}
가정:
- r과 s는 같은 항을 갖는다.
- r과 s의 애트리뷰트는 양립성이 있다.
유의: r  s = r - (r - s)
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
29
공통 집합 연산의 예제

릴레이션 r, s

rs
A B
 1
 2
 1
r
A B
 2
 3
s
A B
 2
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
30
자연 죠인 연산





표기법 : r
s
r과 s를 각각 스키마 R과 S상의 릴레이션이라 하자. 결과는 r의 튜
플 tr과 s의 튜플 ts의 각 쌍을 고려해 얻은 스키마 R  S 상의 릴레
이션이다.
tr 과 ts 가 RS의 애트리뷰트 각각에 같은 값을 가지면, 다음과 같
이 튜플 t가 결과에 추가된다.
- t 는 r 상에 tr 로서 같은 값을 갖는다.
- t 는 s상에 ts 로서 같은 값을 갖는다.
예:
R = (A, B, C, D)
S = (E, B, D)
결과 스키마 = (A, B, C, D, E)
r
s는 다음과 같이 정의된다.
r.A, r.B, r.C, r.D, s.E(r.B=s.Br.D=s.D(r  s))
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
31
자연 죠인 연산의 예제

릴레이션 r, s
A B C D
 1  a
 2  a
 4  b
 1  a
 2  b
B D
1 a
3 a
1 a
2 b
3 b
r

r
s
E





s
A
B
C
D
E





1
1
1
1
2





a
a
a
a
b





Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
32
나누기 계산


r s
“모두에 대한”이라는 구절을 내포한 질의에 적합하다.
r과 s를 각각이 다음과 같은 스키마 R, S상의 릴레이션이
라 하자.
- R = (A1, …, Am, B1, …, Bn)
- S = (B1, …, Bn)
r  s의 결과는 스키마 R-S = (A1, …, Am)상의 릴레이션이
다.
r  s = {t | t  R-S(r) u  s(tu  r)}
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
33
나누기 연산 (계속)


속성
- q = r  s라 하자.
- 그러면 q는 q  s  r을 만족하는 가장 큰 릴레이션이다.
기본 대수 연산의 표현으로 정의
r(R)과 s(S)를 릴레이션이라 하고 S  R이라 하자.
r  s = R-S(r) - R-S((R-S(r)  s) - R-S,S(r))
그 이유는 다음과 같다.
- R-S,S(r) 은 단순히 r의 애트리뷰트를 재배열한다.
- R-S((R-S(r)  s) - R-S,S(r)) 은 us 인 어떤 튜플에 대해
tur인 R-S(r) 내의 튜플 t를 구한다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
34
나누기 연산의 예제


릴레이션 r, s :
rs
A


A B
 1
 2
 3
 1
 1
 1
 3
 4
 6
 1
 2
B
1
2
s
r
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
35
또 다른 나누기 예제


릴레이션 r, s:
rs
A








B
a
a
a
a
a
a
a
a
C








D
a
a
b
a
b
a
b
b
E
1
1
1
1
3
1
1
1
D E
a 1
b 1
s
r
A


B
a
a.
C


Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
36
배정 연산



배정 연산()은 복잡한 질의를 편리하게 표현하는 방법을 제공한
다. 질의를 일련의 배정 연산과 질의의 결과 값이 디스플레이되는
표현식으로 구성된 순차 프로그램으로 작성한다.
배정은 항상 임시 릴레이션 변수로 작성되어야 한다.
예 : r  s는 다음과 같이 작성한다.
temp1  R-S(r)
temp2  R-S((temp1  s) - R-S,S(r))
result = temp1 - temp2
- 의 오른쪽 결과가 의 왼쪽의 릴레이션 변수에 배정된다.
- 연속 표현식내에 변수를 사용할 수 있다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
37
예제 질의

적어도 Downtown과 Uptown 지점에 예금을 가진 모든 고객을 찾
아라.
- 질의 1
CN(BN=“Downtown” (depositor
account)) 
CN(BN=“Uptown” (depositor
account))
여기서 CN은 customer-name을 나타내고 BN은 branch-name을 나타
낸다.
- 질의 2
customer-name,branch-name(depositor
account)
 temp(branch-name)({(“Downtown”),(“Uptown”)})
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
38
예제 질의

Brooklyn에 위치한 모든 지점에 예금을
가진 모든 고객을 찾아라.
customer-name,branch-name(depositor account)
 branch-name(branch-city=“Brooklyn”(branch))
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
39
튜플 관계형 해석

각 질의가 다음과 같은 형식인 비절차식 질의어
{ t | P(t) }




술어 P가 t에 대해 참인 모든 튜플 t의 집합이다.
t는 튜플 변수이고, t[A]는 애트리뷰트 A에 대한
튜플 t의 값을 의미한다.
t  r은 튜플 t가 릴레이션 r에 속함을 의미한다.
P는 술어 해석의 그것과 유사한 식이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
40
술어 해석 식
1. 애트리뷰트와 상수의 집합
2. 비교 연산자의 집합 : (예를 들어, <, , =, , >, )
3. 연결자의 집합 : and(), or(), not()
4. 내포() : x  y, x가 참이면 y도 참이다.
xyxy
5. 한정자의 집합 :
 t  r (Q(t))  술어 Q(t)가 참인 릴레이션 r내에 튜플 t가 존재한다.
 t  r (Q(t))  릴레이션 r내의 모든 튜플 t에 대해 Q가 참이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
41
은행 예제
branch (branch-name, branch-city, assets)
customer(customer-name, customer-street, customer-city)
account(branch-name, account-number, balance)
loan(branch-name, loan-number, amount)
depositor(customer-name, account-number)
borrower(customer-name, loan-number)
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
42
예제 질의



1,200불을 초과하는 대출에 대해 branch-name, loannumber 및 amount를 찾아라.
{t | t  loan  t[amount] > 1200}
1,200불을 초과하는 각 대출의 대출 번호를 찾아라.
{t | s  loan (t[loan-number] = s[loan-number]
 s[amount] > 1200)}
스키마 [customer-name]상의 릴레이션은 질의에 의해
묵시적으로 정의됨에 유의하라.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
43
예제 질의

은행에 대출, 예금 또는 모두를 가진 고객의 이
름을 찾아라.
{t | s  borrower(t[customer-name] = s[customer-name])
 u  depositor(t[customer-name] = u[customer-name])}

은행에 대출과 예금을 가진 모든 고객의 이름
을 찾아라.
{t | s  borrower(t[customer-name] = s[customer-name])
 u  depositor(t[customer-name] = u[customer-name])}
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
44
예제 질의

Perryridge 지점에 대출이 있는 모든 고객의 이름을 찾아라.
{t | s  borrower(t[customer-name] = s[customer-name]
 u  loan(u[branch-name] = “Perryridge”
 u[loan-number] = s[loan-number]))}

Perryridge 지점에 대출은 있지만, 은행의 어떤 지점에도 예금은 없
는 모든 고객의 이름을 찾아라.
{t | s  borrower(t[customer-name] = s[customer-name]
 u  loan(u[branch-name] = “Perryridge”
 u[loan-number] = s[loan-number])
  v  depositor(v[customer-name] = t[customer-name]))}
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
45
예제 질의

Perryridge 지점에서 대출을 받은 고객의 이름과 그들
이 살고 있는 도시를 찾아라.
{t | s  loan(s[branch-name] = “Perryridge”
 u  borrower(u[loan-number] = s[loan-number]
 t[customer-name] = u[customer-name]
 v  customer(u[customer-name] = v[customer-name]
 t[customer-city] = v[customer-city])))}
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
46
예제 질의

Brooklyn에 위치한 모든 지점에 예금을 가진 모
든 고객의 이름을 찾아라.
{t | s  branch(s[branch-city] = “Brooklyn” 
u  account(s[branch-name] = u[branch-name]
 v  depositor(t[customer-name] = v[customer- name]
 v[account-number] = u[account-number])))}
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
47
표현식의 안전성




무한 릴레이션을 생성하는 튜플 해석 표현식을 작성할
수가 있다.
예를 들어, {t | t  r}은 릴레이션 r의 어떤 애트리뷰트
도메인이 무한이면 무한 릴레이션을 생성한다.
이러한 문제점을 방지하기 위해 허용 가능한 표현식의
집합을 안전한 표현식으로 한정한다.
튜플 관계형 해석내의 표현식 {t | P(t)}는 t의 모든 요소
가 P내에 나타나는 릴레이션, 튜플 또는 상수 중의 하
나에 나타나면 안전하다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
48
도메인 관계형 해석


튜플 관계형 해석과 능력이 동등한 비절차식
질의어
각 질의는 다음과 같은 형식의 표현식이다.
{<x1, x2, …, x n> | P(x1, x2, …, x n)}
- x1, x2, …, x n 은 도메인 변수를 표현한다.
- P는 술어 해석의 그것과 유사한 식이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
49
예제 질의

1,200불을 초과하는 대출의 branch-name, loan-number 및 amount를
찾아라.
{< b, l, a >|< b, l, a >  loan  a > 1200}

1,200불을 초과하는 대출을 가진 모든 고객의 이름을 찾아라.
{< c > |  b, l, a (< c, l > borrower  < b, l, a >  loan
 a > 1200}

Perryridge 지점에서 대출을 받은 모든 고객의 이름을 찾아라.
{< c, a > |  l (< c, l >  borrower
  b (< b, l, a >  loan  b = “Perryridge”))}
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
50
예제 질의

Perryridge 지점에 대출, 예금 또는 모두를 가진 고객의 이름을 찾
아라.
{< c > |  l (< c, l >  borrower
  b, a(< b, l, a >  loan  b = “Perryridge”))
  a (< c, a >  depositor
  b, n(< b, a, n >  account  b = “Perryridge”))}

Brooklyn에 위치한 모든 지점에 예금을 가진 고객의 이름을 찾아
라.
{< c > |  x, y, z (< x, y, z >  branch  y =“Brooklyn”) 
 a, b (< x, a, b>  account  < c, a >  depositor)}
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
51
표현식의 안전성
{<x1, x2, …, x n>| P(x1, x2, …, x n)}
위의 표현식은 다음 조건을 모두 만족하면 안전하다.
1. 표현식의 튜플에 나타나는 모든 값이 dom(P)로 부터의 값이다
(즉, 값이 P 또는 P에 언급된 릴레이션의 튜플내에 나타난다).
2. x(P1(x)) 형태의 모든 “존재한다”는 부 식에 대해, 부 식이 참인 필
요 충분 조건은 P1(x) 가 참인 dom(P1)내에 값 x 가 존재하는 것이다.
3. x(P1(x)) 형태의 모든 “모든 에 대한”이라는 부 식에 대해, 부 식
이 참인 필요 충분 조건은 P1(x) 가 dom(P1)으로부터의 모든 값 x
에 대해 참인 것이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
52
확장 관계형 대수 연산

일반화 추출

외부 죠인

집성 합수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
53
일반화 추출




추출 리스트에 산술 함수를 사용 하도록 함으로써 추출
연산을 확장한다.
F1, F2, …, Fn(E)
E는 관계형 대수 표현식이다.
F1, F2, …, Fn 각각은 E의 스키마 내에 상수와 애트리뷰
트를 내포하고 있는 산술 표현식이다.
주어진 릴레이션 credit-info(customer-name, limit, creditbalance) 에 대해 각 개인이 얼마까지 사용할 수 있는지
를 찾아라.
 customer-name, limit – credit-balance (credit-info)
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
54
외부 죠인



정보의 손실을 피하는 죠인 연산의 확장
죠인을 계산하고 다른 릴레이션의 튜플과 부합
하지 않는 어떤 릴레이션의 튜플들을 죠인의
결과에 추가한다.
널 값을 사용한다.
- 널은 알려지지 않은 값이나 존재하지 않는 값을
의미한다.
- 널을 내포한 모든 비교는 정의에 의해 거짓이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
55
외부 죠인의 예제


릴레이션 loan
branch-name
loan-number
amount
Downtown
Redwood
Perryridge
L-170
L-230
L-260
3000
4000
1700
릴레이션 borrower
customer-name
Jones
Smith
Hayes
loan-number
L-170
L-230
L-155
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
56
외부 죠인의 예제

loan
borrower
branch-name loan-number amount customer-name
Downtown
Redwood

loan
L-170
L-230
3000
4000
Jones
Smith
borrower
branch-name loan-number amount customer-name
loan-number
Downtown
Redwood
Perryridge
L-170
L-230
null
L-170
L-230
L-260
3000
4000
1700
Jones
Smith
null
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
57
외부 죠인의 예제

loan
borrower
branch-name
Downtown
Redwood
null

loan
loan-number
L-170
L-230
L-155
amount
3000
4000
null
customer-name
Jones
Smith
Hayes
borrower
branch-name
Downtown
Redwood
Perryridge
null
loan-number
L-170
L-230
L-260
L-155
amount
3000
4000
1700
null
customer-name
Jones
Smith
null
Hayes
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
58
집성 함수

집성 연산자
G1, G2, …, Gn
는 값의 모임을 취해 하나의 값을 결과로 돌려준다.
avg: 평균 값
min: 최소 값
max: 최대 값
sum: 합계
count: 값의 개수
F1 A1, F2 A2, ..., Fm An(E)
- E는 관계형 대수 표현식이다.
- G1, G2, …, Gn 은 그룹핑할 애트리뷰트 리스트이다.
- Fi는 집성 함수이다.
- Ai는 애트리뷰트명이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
59
집성 함수의 예제


릴레이션 r :
A
sumC(r)
sum-C
B

.






C
7
7
3
10
27
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
60
집성 함수의 예제

릴레이션 account를 branch-name으로 그룹핑한다.
branch-name
Perryridge
Perryridge
Brighton
Brighton
Redwood
 branch-name
account-number
A – 102
A – 201
A – 217
A – 215
A – 222
balance
400
900
750
750
700
sum balance(account)
branch-name
Perryridge
Brighton
Redwood
sum-balance
1300
1500
700
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
61
데이터베이스의 수정

데이터베이스의 내용은 다음 연산을 사용해 수
정할 수 있다.
- 삭제
- 삽입
- 갱신

이들 모든 연산은 배정 연산자를 사용해 표현
된다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
62
삭제



삭제 요청은 사용자에게 튜플을 디스플레이하는 대신
선택한 튜플들이 데이터베이스에서 제거되는 것을 제
외하고는 질의와 유사하게 표현된다.
튜플을 통째로 삭제할 수 있지, 특정 애트리뷰트의 값
만을 삭제할 수는 없다.
삭제는 관계형 대수로 다음과 같이 표현된다.
rr-E
여기서 r은 릴레이션이고 E는 관계형 대수 질의이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
63
삭제 예제

Perryridge 지점의 모든 계좌 레코드를 삭제하라.
account  account - branch-name = “Perryridge” (account)

0부터 50 사이의 금액을 가진 모든 대출 레코드를 삭제하라.
loan  loan - amount  0 and amount  50 (loan)

Needham에 위치한 지점의 모든 계좌를 삭제하라.
r1  branch-city = “Needham” (account
branch)
r2  branch-name, account-number, balance(r1)
r3  customer-name, account-number(r2
depositor)
account  account - r2
depositor  depositor - r3
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
64
삽입

릴레이션에 데이터를 삽입하려면 다음과 같이 한다.
- 삽입될 튜플을 지정한다.
- 결과가 삽입될 튜플의 집합인 질의를 작성한다.

관계형 대수에서, 삽입은 다음과 같이 표현된다.
rr E
여기서 r은 릴레이션이고, E는 관계형 대수 표현식이다.

단일 튜플의 삽입은 E를 하나의 튜플을 내포한 상수 릴
레이션이 되도록하여 표현한다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
65
삽입의 예제

데이터베이스에 Smith가 Perryridge 지점에 1,200불의 계좌 A-973
을 가지고 있다는 정보를 삽입하라.
account  account  {“Perryridge”, A-973, 1200}
depositor  depositor  {“Smith”, A-973}

Perryridge 지점의 모든 대출 고객에게 200불의 저축 예금 계좌를
제공하고자 한다. 대출 번호를 새로운 저축 계좌의 계좌 번호로 하
자.
r1  (branch-name = “Perryridge” (borrower
loan))
account  account  branch-name, loan-number, 200(r1)
depositor  depositor  customer-name, loan-number(r1)
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
66
갱신


튜플 내의 모든 값을 바꾸지 않고 일부 값을 변
경하는 기법
일반화 추출 연산자를 사용한다.
r  F1, F2, …, Fn(r)
- 각 Fi는 i번째 애트리뷰트가 갱신되지 않거나
갱신될 r의 i번째 애트리뷰트이다.
- Fi는 애트리뷰트에 새로운 값을 주는 상수와 r
의 애트리뷰트만을 내포하는 표현식이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
67
갱신의 예제

모든 잔고에 5%의 이자를 지급하라.
account  BN, AN, BALBAL*1.05(account)
여기서 BAL, BN 및 AN은 각각 balance, branch-name 및
account-number를 나타낸다.

10,000불을 초과하는 잔고에는 6%의 이자를 지급하고 그
외의 잔고에는 5%의 이자를 지급하라.
account  BN, AN, BAL  BAL*1.06(BAL > 10000(account))
 BN, AN, BAL  BAL*1.05(BAL  10000(account))
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
68
뷰


어떤 경우에도, 모든 사용자가 전체 논리 모델을
보는 것이 바람직하지 않다(즉, 데이터베이스에 저
장된 모든 실제 릴레이션).
고객의 대출 번호는 알 필요가 있으나 대출 금액을
알 필요가 없는 개인을 고려해 보자. 이 사람은 다
음과 같이 관계형 대수로 기술된 릴레이션을 보아
야만 한다.
 customer-name, loan-number(borrower

loan)
개념적 모델의 일부는 아니지만 사용자에게 “가상
릴레이션”으로 보이는 릴레이션을 뷰라 한다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
69
뷰 정의



뷰는 다음과 같은 형식을 갖는 create view문을 사용해
정의한다.
create view v as < 질의 표현식 >
여기서 < 질의 표현식 >은 적법한 관계형 대수 질의 표
현식이다. 뷰명은 v로 표현된다.
일단 뷰가 정의되면, 뷰를 생성하는 가상 릴레이션을
참조하는데 뷰명이 사용될 수 있다.
뷰 정의는 질의 표현식을 평가함으로써 새로운 릴레이
션을 생성하는 것과는 다르다. 대신, 뷰 정의는 뷰를 사
용하는 질의내에 대치될 표현식을 저장한다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
70
뷰의 예

지점과 고객으로 구성된 뷰(뷰명 : all-customer)를 고려해
보자.
create view all-customer as
branch-name, customer-name (depositor
account)
 branch-name, customer-name (borrower
loan)

Perryridge 지점의 모든 고객은 다음과 같이 찾을 수 있다.
customer-name
(branch-name = “Perryridge” (all-customer))
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
71
뷰를 통한 갱신


뷰로서 표현된 데이터베이스 수정은 데이터베이스의
실제 릴레이션의 수정으로 변환되어야 한다.
loan 릴레이션에서 amount를 제외한 모든 대출 데이터
를 필요로 하는 개인을 고려해 보자. 그 사람에게 제공
되는 branch-loan 뷰는 다음과 같이 정의된다.
create view branch-loan as
branch-name, loan-number(loan)
릴레이션 명이 허용되는 어느 곳에나 뷰명이 나타날 수
있으므로, 그 사람은 다음과 같이 작성할 수 있다.
branch-loan  branch-loan  {(“Perryridge”, L-37)}
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
72
뷰를 통한 갱신(계속)

앞의 삽입은 뷰 branch-loan이 구축된 실제 릴레이션
loan으로의 삽입으로 표현되어야 한다.

loan에의 삽입은 amount 값을 필요로 한다. 삽입은 다음
둘 중 하나로 취급될 수 있다.
- 삽입을 거절하고 사용자에게 에러 메시지를 돌려준다.
- loan 릴레이션에 튜플 (“Perryridge”, L-37, null)을 삽입
한다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
73
다른 뷰를 사용해 정의한 뷰

하나의 뷰는 다른 뷰를 정의하는 표현식에 사용될 수
있다.

뷰 릴레이션 v1은 v2가 v1을 정의하고 있는 표현식에 사
용된다면 뷰 릴레이션 v2에 직접 종속한다고 말한다.

뷰 릴레이션 v1은 종속 그래프내에 v2에서 v1로의 경로
가 존재하면 뷰 릴레이션 v2에 종속한다고 말한다.

뷰 릴레이션 v가 그 자신에 종속하면 순환적이라 말한
다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
74
뷰 확장

다른 뷰의 용어로 정의된 뷰의 의미를 정의하는 방법

뷰 v1을 그 자신이 뷰 릴레이션의 사용을 내포할 수 있는 표현
식 e1 으로 정의된다 하자.

표현식의 뷰 확장은 다음과 같은 대치 절차를 반복한다.
repeat
e1에서 어떠한 뷰 릴레이션 vi 를 찾는다.
뷰 릴레이션 vi를 vi를 정의하고 있는 표현식으로 대치한다.
until 더 이상의 뷰 릴레이션이 e1내에 존재하지 않음

뷰 릴레이션이 순환적이지 않은 한 이 루프는 종료할 것이다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
75