Transcript PPT File
제 3 장 관계형 모델
관계형 데이터베이스의 구조
관계형 대수
튜플 관계형 해석
도메인 관계형 해석
확장 관계형 대수 연산
데이터베이스의 수정
뷰
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
1
기본 구조
집합 A1, A2, …, An이 주어지면 릴레이션 r은 A1A2 … An의 부
분 집합이다
따라서, 릴레이션은 aiAi인 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=BD>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
rs
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)의 애트리뷰트가 서로 다르다
고 가정하자(즉, RS = ).
r(R)과 s(S)의 애트리뷰트가 서로 다르지
않다면, 재명명을 사용해야 한다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
17
카티전 곱 연산의 예제
릴레이션 r, s :
A
C
B
1
2
r
rs
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 +
rs
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
rs
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 가 RS의 애트리뷰트 각각에 같은 값을 가지면, 다음과 같
이 튜플 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.Br.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)) 은 us 인 어떤 튜플에 대해
tur인 R-S(r) 내의 튜플 t를 구한다.
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
34
나누기 연산의 예제
릴레이션 r, s :
rs
A
A B
1
2
3
1
1
1
3
4
6
1
2
B
1
2
s
r
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
35
또 다른 나누기 예제
릴레이션 r, s:
rs
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도 참이다.
xyxy
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
삭제
삭제 요청은 사용자에게 튜플을 디스플레이하는 대신
선택한 튜플들이 데이터베이스에서 제거되는 것을 제
외하고는 질의와 유사하게 표현된다.
튜플을 통째로 삭제할 수 있지, 특정 애트리뷰트의 값
만을 삭제할 수는 없다.
삭제는 관계형 대수로 다음과 같이 표현된다.
rr-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
삽입
릴레이션에 데이터를 삽입하려면 다음과 같이 한다.
- 삽입될 튜플을 지정한다.
- 결과가 삽입될 튜플의 집합인 질의를 작성한다.
관계형 대수에서, 삽입은 다음과 같이 표현된다.
rr 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, BALBAL*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