제 3 장 관계형 모델 - 김건웅 교수...
TRANSCRIPT
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 1
제 3 장 관계형 모델 관계형 데이터베이스의 구조 관계형 대수 튜플 관계형 해석 도메인 관계형 해석 확장 관계형 대수 연산 데이터베이스의 수정 뷰
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 2
기본 구조 집합 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, Harr
ison), (Smith, North, Rye), (Curry, North, Rye),(Lindsay, Park, Pittsfield)} 인 릴레이션이다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 3
릴레이션 스키마
A1, A2, …, An 은 애트리뷰트이다 .
R = (A1, A2, …, An) 인 릴레이션 스키마이다 .
Customer-schema = (customer-name, customer-street, customer-city)
r(R) 은 릴레이션 스키마 R 상의 릴레이션이다 . customer(Customer-schema)
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 4
릴레이션 사례
릴레이션의 현재 값 ( 릴레이션 사례 ) 는 테이블로 표현된다 .
r 의 원소 t 는 튜플이며 , 테이블에서 행으로 표현된다 .
customer
customer-name customer-street customer-city Jones Main Harrison Smith North Rye Curry . North Rye Lindsay Park Pittsfield
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 5
키 K R 이라 하자 . K 의 값이 각각의 가능한 릴레이션 r(R) 의 고유한 튜플을
구분하는데 충분하다면 K 는 R 의 수퍼 키이다 . “ 가능한 r”이란 모델링하고 있는 조직에 존재할 수 있는 릴레이션 r 을 의미한다 .
예 : {customer-name, customer-street} 와 {customer-name} 은 어느 두 고객도 같은 이름을 가질 가능성이 없으므로 모두 Customer의 수퍼 키이다 .
K 가 최소 길이이면 후보 키이다 . 예 : {customer-name} 은 자신이 수퍼 키이고 ( 어느 두 고객도
같은 이름을 가질 가능성이 없다고 가정 ), 어떤 부분 집합도 수퍼 키가 아니므로 Customer 의 후보 키이다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 6
E-R 집합으로부터 키의 결정 강 엔티티 집합 . 엔티티 집합의 주 키는 릴레이션의 주
키가 된다 . 약 엔티티 집합 . 릴레이션의 주 키는 강 엔티티 집합의
주 키와 약 엔티티 집합의 구별자의 합집합으로 구성된다 . 관계 집합 . 관련된 엔티티 집합의 주 키의 합집합은
릴레이션의 수퍼 키가 된다 . 이진 다 대 다 관계 집합에서는 위의 수퍼 키가 또한 주
키이다 . 이진 다 대 일 관계 집합에서는 “다”쪽 엔티티 집합의 주
키가 릴레이션의 주 키가 된다 . 일 대 일 관계 집합에서는 어떤 쪽의 엔티티 집합의 주
키도 릴레이션의 주 키가 될 수 있다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 7
질의어
사용자가 데이터베이스로부터 정보를 요청하는 언어 언어의 부류 : - 절차식 - 비절차식 순수언어 : - 관계형 대수 - 튜플 관계형 해석 - 도메인 관계형 해석 순수 언어는 사람들이 사용하는 질의어의 기본을 이루고
있다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 8
관계형 대수 절차식 언어 6 가지 기본 연산자 - 선택 - 추출 - 합집합 - 차집합 - 카티전 곱 - 재명명 연산자는 입력으로서 하나 이상의 릴레이션을 취해 그
결과로 새로운 릴레이션을 생성한다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 9
선택 연산 표기법 : P(r) 다음과 같이 정의된다 . P(r) ={ t | t r and P(t)}
여기서 P 는 다음과 같은 유형의 표현을 다루는 명제 해석에서의 식이다 .
< 애트리뷰트 > = < 애트리뷰트 > 또는 < 상수 > > < (and), (or), (not) 으로 연결된다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 10
선택 연산 예제 릴레이션 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 서울산업대학교 전자계산학과 석상기 교수 11
추출 연산 표기법 : A1, A2, …, A k(r) 여기서 A1, A2 는 애트리뷰트명이고 r 은
릴레이션명이다 . 결과는 명시하지 않은 열을 제외한 k 열의
릴레이션으로 정의된다 . 릴레이션은 집합이기 때문에 중복 행은
결과에서 제거된다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 12
추출 연산 예제 릴레이션 r :
A, C(r)
A B C 10 1 20 1 30 1 40 2
A C 1 1 1 2
A C 1 1 2
=
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 13
합집합 연산 표기법 : r s 다음과 같이 정의된다 . r s = {t | t r or t s} r s 가 가능하려면 , 1. r 과 s 는 같은 항 ( 애트리뷰트의 수가 같음 ) 을
가져야 한다 . 2. 애트리뷰트의 도메인은 양립할 수 있어야 한다
( 즉 , r 의 두번째 열은 s 의 두번째 열의 것과 같은 유형의 값을 다룬다 ).
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 14
합집합 연산의 예제 릴레이션 r, s
r sr
s
A B 1 2 1 3
A B 1 2 1
A B 2 3
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 15
차집합 연산
표기법 : r - s 다음과 같이 정의된다 . r - s = {t | t r and t s} 차집합 연산은 양립할 수 있는 릴레이션 간에만
이루어질 수 있다 . - r 과 s 는 같은 항을 가져야 한다 . - r 과 s 의 애트리뷰트 도메인은 양립해야만
한다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 16
차집합 연산의 예제
릴레이션 r, s
r - s
rs
A B 1 2 1
A B 2 3
A B 1 1
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 17
카티전 곱 연산
표기법 : r s 다음과 같이 정의된다 . r s = {t q| t r and q s} r(R) 과 s(S) 의 애트리뷰트가 서로
다르다고 가정하자 ( 즉 , RS = ). r(R) 과 s(S) 의 애트리뷰트가 서로 다르지
않다면 , 재명명을 사용해야 한다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 18
카티전 곱 연산의 예제
릴레이션 r, s :
r s
rs
A B 1 2
C D E 10 + 10 + 20 - 10 -
A B C D E 1 10 + 1 10 + 1 20 - 1 10 - 2 10 + 2 10 + 2 20 - 2 10 -
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 19
복합 연산 여러 연산을 사용해 표현식을 만들 수 있다 . 예 : A=C(r s) r s
A=C(r s)
A B C D E 1 10 + 1 10 + 1 20 - 1 10 - 2 10 + 2 10 + 2 20 - 2 10 -
A B C D E 1 10 + 2 10 + 2 20 -
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 20
재명명 연산 이름을 줄 수 있도록 하여 관계형 대수 표현식의 결과를
참조하도록 한다 . 하나 이상의 이름으로 릴레이션을 참조하도록 한다 . 예 : x(E)
이름 x 로 표현식 E 를 돌려준다 .관계형 대수 표현식 E 가 n 항이면 , x (A1, A2, …,An)(E)
이름 x 하에 A1, A2, …,An 으로 재명명된 애트리뷰트를 가
진 표현식 E 의 결과를 돌려준다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 21
은행 예제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 서울산업대학교 전자계산학과 석상기 교수 22
예제 질의 1,200 불을 초과하는 모든 대출을 찾아라 . amount >1200(loan)
1,200 불을 초과하는 각 대출의 대출 번호를 찾아라 .
loan-number( amount >1200(loan))
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 23
예제 질의 은행에 예금 , 대출 또는 모두를 가진 고객의
이름을 찾아라 . customer-name(borrower) customer-name(depositor)
은행에 예금과 대출을 가진 모든 고객의 이름을 찾아라 .
customer-name(borrower) customer-name(depositor)
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 24
예제 질의 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 서울산업대학교 전자계산학과 석상기 교수 25
예제 질의 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 서울산업대학교 전자계산학과 석상기 교수 26
예제 질의가장 큰 예금 잔고를 찾아라 . account 릴레이션을 d 로 재명명한다 . 질의는 다음과 같다 :
balance(account) - account.balance
(account.balance < d.balance(account d(account)))
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 27
형식적 정의 관계형 대수에서의 기본 표현식은 다음 중 하나 이상으로 구성된다 . - 데이터베이스내의 릴레이션 - 상수 릴레이션 E1 과 E2 를 관계형 대수 표현식이라 하자 ; 다음은 모두 관계형 대수
표현식이다 : - E1 E2
- E1 - E2
- E1 E2
- P(E1), P 는 E1 내 애트리뷰트 상의 술어이다 .
- S(E1), S 는 E1 내 어떤 애트리뷰트로 구성된 리스트이다 .
- x(E1), x 는 E1 의 결과에 대한 새로운 이름이다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 28
추가 연산관계형 대수에 어떠한 능력도 추가되지 않지만 질의를 단순화하는 추가 연산을 정의한다 . 공통 집합 자연 죠인 나누기 배정
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 29
공통 집합 연산 표기법 : r s 다음과 같이 정의된다 . r s = {t | t r and t s}
가정 : - r 과 s 는 같은 항을 갖는다 . - r 과 s 의 애트리뷰트는 양립성이 있다 . 유의 : r s = r - (r - s)
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 30
공통 집합 연산의 예제 릴레이션 r, s
r s
rs
A B 2
A B 1 2 1
A B 2 3
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 31
자연 죠인 연산 표기법 : 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 서울산업대학교 전자계산학과 석상기 교수 32
자연 죠인 연산의 예제
릴레이션 r, s
r sr s
A B C D 1 a 2 a 4 b 1 a 2 b
B D E 1 a 3 a 1 a 2 b 3 b
A B C D E 1 a 1 a 1 a 1 a 2 b
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 33
나누기 계산 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 서울산업대학교 전자계산학과 석상기 교수 34
나누기 연산 ( 계속 )
속성 - 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 서울산업대학교 전자계산학과 석상기 교수 35
나누기 연산의 예제 릴레이션 r, s :
r s
r
s
A B 1 2 3 1 1 1 3 4 6 1 2
B 1 2
A
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 36
또 다른 나누기 예제 릴레이션 r, s:
r sr
s
A B C D E a a 1 a a 1 a b 1 a a 1 a b 3 a a 1 a b 1 a b 1
D E a 1 b 1
A B C a a .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 37
배정 연산 배정 연산 () 은 복잡한 질의를 편리하게 표현하는 방법을
제공한다 . 질의를 일련의 배정 연산과 질의의 결과 값이 디스플레이되는 표현식으로 구성된 순차 프로그램으로 작성한다 .
배정은 항상 임시 릴레이션 변수로 작성되어야 한다 . 예 : r s 는 다음과 같이 작성한다 . temp1 R-S(r)
temp2 R-S((temp1 s) - R-S,S(r))
result = temp1 - temp2 - 의 오른쪽 결과가 의 왼쪽의 릴레이션 변수에 배정된다 . - 연속 표현식내에 변수를 사용할 수 있다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 38
예제 질의 적어도 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 서울산업대학교 전자계산학과 석상기 교수 39
예제 질의 Brooklyn 에 위치한 모든 지점에 예금을
가진 모든 고객을 찾아라 .
customer-name,branch-name(depositor account)
branch-name(branch-city=“Brooklyn”(branch))
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 40
튜플 관계형 해석
각 질의가 다음과 같은 형식인 비절차식 질의어
{ t | P(t) }
술어 P 가 t 에 대해 참인 모든 튜플 t 의 집합이다 . t 는 튜플 변수이고 , t[A] 는 애트리뷰트 A 에 대한
튜플 t 의 값을 의미한다 . t r 은 튜플 t 가 릴레이션 r 에 속함을 의미한다 . P 는 술어 해석의 그것과 유사한 식이다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 41
술어 해석 식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 서울산업대학교 전자계산학과 석상기 교수 42
은행 예제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 서울산업대학교 전자계산학과 석상기 교수 43
예제 질의 1,200 불을 초과하는 대출에 대해 branch-name, loan-nu
mber 및 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 서울산업대학교 전자계산학과 석상기 교수 44
예제 질의 은행에 대출 , 예금 또는 모두를 가진 고객의
이름을 찾아라 . {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 서울산업대학교 전자계산학과 석상기 교수 45
예제 질의 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 서울산업대학교 전자계산학과 석상기 교수 46
예제 질의 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 서울산업대학교 전자계산학과 석상기 교수 47
예제 질의 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 서울산업대학교 전자계산학과 석상기 교수 48
표현식의 안전성 무한 릴레이션을 생성하는 튜플 해석 표현식을
작성할 수가 있다 . 예를 들어 , {t | t r} 은 릴레이션 r 의 어떤
애트리뷰트 도메인이 무한이면 무한 릴레이션을 생성한다 .
이러한 문제점을 방지하기 위해 허용 가능한 표현식의 집합을 안전한 표현식으로 한정한다 .
튜플 관계형 해석내의 표현식 {t | P(t)} 는 t 의 모든 요소가 P 내에 나타나는 릴레이션 , 튜플 또는 상수 중의 하나에 나타나면 안전하다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 49
도메인 관계형 해석
튜플 관계형 해석과 능력이 동등한 비절차식 질의어
각 질의는 다음과 같은 형식의 표현식이다 .
{<x1, x2, …, x n> | P(x1, x2, …, x n)}
- x1, x2, …, x n 은 도메인 변수를 표현한다 .
- P 는 술어 해석의 그것과 유사한 식이다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 50
예제 질의 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 서울산업대학교 전자계산학과 석상기 교수 51
예제 질의 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 서울산업대학교 전자계산학과 석상기 교수 52
표현식의 안전성 {<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 서울산업대학교 전자계산학과 석상기 교수 53
확장 관계형 대수 연산 일반화 추출
외부 죠인
집성 합수
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 54
일반화 추출 추출 리스트에 산술 함수를 사용 하도록 함으로써 추출
연산을 확장한다 . F1, F2, …, Fn
(E)
E 는 관계형 대수 표현식이다 . F1, F2, …, Fn 각각은 E 의 스키마 내에 상수와
애트리뷰트를 내포하고 있는 산술 표현식이다 . 주어진 릴레이션 credit-info(customer-name, limit, credit-bal
ance) 에 대해 각 개인이 얼마까지 사용할 수 있는지를 찾아라 .
customer-name, limit – credit-balance (credit-info)
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 55
외부 죠인
정보의 손실을 피하는 죠인 연산의 확장 죠인을 계산하고 다른 릴레이션의 튜플과
부합하지 않는 어떤 릴레이션의 튜플들을 죠인의 결과에 추가한다 .
널 값을 사용한다 . - 널은 알려지지 않은 값이나 존재하지 않는 값을
의미한다 . - 널을 내포한 모든 비교는 정의에 의해 거짓이다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 56
외부 죠인의 예제 릴레이션 loan
릴레이션 borrower
branch-name loan-number amountDowntownRedwoodPerryridge
L-170L-230L-260
300040001700
customer-name loan-numberJonesSmithHayes
L-170L-230L-155
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 57
외부 죠인의 예제
loan borrower
loan borrower
branch-name loan-number amount customer-nameDowntownRedwood
L-170L-230
30004000
JonesSmith
branch-name loan-number amount customer-name loan-number
Downtown Redwood Perryridge
L-170 L-230 L-260
3000 4000 1700
Jones Smith null
L-170 L-230 null
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 58
외부 죠인의 예제 loan borrower
loan borrower
branch-name loan-number amount customer-nameDowntownRedwoodnull
L-170L-230L-155
30004000null
JonesSmithHayes
branch-name loan-number amount customer-nameDowntownRedwoodPerryridgenull
L-170L-230L-260L-155
300040001700null
JonesSmithnullHayes
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 59
집성 함수 집성 연산자 는 값의 모임을 취해 하나의 값을 결과로 돌려준다 . avg: 평균 값 min: 최소 값 max: 최대 값 sum: 합계 count: 값의 개수
G1, G2, …, Gn F1 A1, F2 A2, ..., Fm An(E)
- E 는 관계형 대수 표현식이다 . - G1, G2, …, Gn 은 그룹핑할 애트리뷰트 리스트이다 .
- Fi 는 집성 함수이다 .
- Ai 는 애트리뷰트명이다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 60
집성 함수의 예제 릴레이션 r :
sumC(r)
A B C 7 . 7 3 10
sum-C
27
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 61
집성 함수의 예제 릴레이션 account 를 branch-name 으로
그룹핑한다 .
branch-name sum balance(account)
branch-name account-number balancePerryridgePerryridgeBrightonBrightonRedwood
A – 102A – 201A – 217A – 215A – 222
400900750750700
branch-name sum-balancePerryridgeBrightonRedwood
13001500700
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 62
데이터베이스의 수정 데이터베이스의 내용은 다음 연산을 사용해 수정할 수 있다 .
- 삭제 - 삽입 - 갱신 이들 모든 연산은 배정 연산자를 사용해 표현된다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 63
삭제 삭제 요청은 사용자에게 튜플을 디스플레이하는 대신
선택한 튜플들이 데이터베이스에서 제거되는 것을 제외하고는 질의와 유사하게 표현된다 .
튜플을 통째로 삭제할 수 있지 , 특정 애트리뷰트의 값 만을 삭제할 수는 없다 .
삭제는 관계형 대수로 다음과 같이 표현된다 .
r r - E
여기서 r 은 릴레이션이고 E 는 관계형 대수 질의이다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 64
삭제 예제 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 서울산업대학교 전자계산학과 석상기 교수 65
삽입 릴레이션에 데이터를 삽입하려면 다음과 같이 한다 . - 삽입될 튜플을 지정한다 . - 결과가 삽입될 튜플의 집합인 질의를 작성한다 .
관계형 대수에서 , 삽입은 다음과 같이 표현된다 . r r E 여기서 r 은 릴레이션이고 , E 는 관계형 대수
표현식이다 .
단일 튜플의 삽입은 E 를 하나의 튜플을 내포한 상수 릴레이션이 되도록하여 표현한다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 66
삽입의 예제 데이터베이스에 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 서울산업대학교 전자계산학과 석상기 교수 67
갱신 튜플 내의 모든 값을 바꾸지 않고 일부 값을
변경하는 기법 일반화 추출 연산자를 사용한다 . r F1, F2, …, Fn
(r)
- 각 Fi 는 i 번째 애트리뷰트가 갱신되지 않거나
갱신될 r 의 i 번째 애트리뷰트이다 . - Fi 는 애트리뷰트에 새로운 값을 주는 상수와 r
의 애트리뷰트만을 내포하는 표현식이다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 68
갱신의 예제 모든 잔고에 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 서울산업대학교 전자계산학과 석상기 교수 69
뷰 어떤 경우에도 , 모든 사용자가 전체 논리 모델을
보는 것이 바람직하지 않다 ( 즉 , 데이터베이스에 저장된 모든 실제 릴레이션 ).
고객의 대출 번호는 알 필요가 있으나 대출 금액을 알 필요가 없는 개인을 고려해 보자 . 이 사람은 다음과 같이 관계형 대수로 기술된 릴레이션을 보아야만 한다 .
customer-name, loan-number(borrower loan) 개념적 모델의 일부는 아니지만 사용자에게 “가상
릴레이션”으로 보이는 릴레이션을 뷰라 한다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 70
뷰 정의 뷰는 다음과 같은 형식을 갖는 create view 문을 사용해
정의한다 . create view v as < 질의 표현식 > 여기서 < 질의 표현식 > 은 적법한 관계형 대수 질의
표현식이다 . 뷰명은 v 로 표현된다 . 일단 뷰가 정의되면 , 뷰를 생성하는 가상 릴레이션을
참조하는데 뷰명이 사용될 수 있다 . 뷰 정의는 질의 표현식을 평가함으로써 새로운
릴레이션을 생성하는 것과는 다르다 . 대신 , 뷰 정의는 뷰를 사용하는 질의내에 대치될 표현식을 저장한다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 71
뷰의 예
지점과 고객으로 구성된 뷰 ( 뷰명 : 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 서울산업대학교 전자계산학과 석상기 교수 72
뷰를 통한 갱신
뷰로서 표현된 데이터베이스 수정은 데이터베이스의 실제 릴레이션의 수정으로 변환되어야 한다 .
loan 릴레이션에서 amount 를 제외한 모든 대출 데이터를 필요로 하는 개인을 고려해 보자 . 그 사람에게 제공되는 branch-loan 뷰는 다음과 같이 정의된다 .
create view branch-loan as branch-name, loan-number(loan) 릴레이션 명이 허용되는 어느 곳에나 뷰명이 나타날 수
있으므로 , 그 사람은 다음과 같이 작성할 수 있다 . branch-loan branch-loan {(“Perryridge”, L-37)}
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 73
뷰를 통한 갱신 ( 계속 )
앞의 삽입은 뷰 branch-loan 이 구축된 실제 릴레이션 loan 으로의 삽입으로 표현되어야 한다 .
loan 에의 삽입은 amount 값을 필요로 한다 . 삽입은 다음 둘 중 하나로 취급될 수 있다 .
- 삽입을 거절하고 사용자에게 에러 메시지를 돌려준다 . - loan 릴레이션에 튜플 (“Perryridge”, L-37, null) 을 삽입
한다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 74
다른 뷰를 사용해 정의한 뷰
하나의 뷰는 다른 뷰를 정의하는 표현식에 사용될 수 있다 .
뷰 릴레이션 v1 은 v2 가 v1 을 정의하고 있는 표현식에 사용된다면 뷰 릴레이션 v2 에 직접 종속한다고 말한다 .
뷰 릴레이션 v1 은 종속 그래프내에 v2 에서 v1 로의 경로가 존재하면 뷰 릴레이션 v2 에 종속한다고 말한다 .
뷰 릴레이션 v 가 그 자신에 종속하면 순환적이라 말한다 .
Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수 75
뷰 확장 다른 뷰의 용어로 정의된 뷰의 의미를 정의하는 방법
뷰 v1 을 그 자신이 뷰 릴레이션의 사용을 내포할 수 있는 표현식 e1 으로 정의된다 하자 .
표현식의 뷰 확장은 다음과 같은 대치 절차를 반복한다 . repeat e1 에서 어떠한 뷰 릴레이션 vi 를 찾는다 .
뷰 릴레이션 vi 를 vi 를 정의하고 있는 표현식으로 대치한다 .
until 더 이상의 뷰 릴레이션이 e1 내에 존재하지 않음
뷰 릴레이션이 순환적이지 않은 한 이 루프는 종료할 것이다 .