객체-관계 DBMS - Database Research Lab. of Ewha Womans Univ.
Download
Report
Transcript 객체-관계 DBMS - Database Research Lab. of Ewha Womans Univ.
객체-관계 DBMS
Object-Relational DBMS
원서: Michael Stonebraker, Morgan-Kaufmann, 1996.
번역서: 이한출판사, 1996년.
이화여자대학교 컴퓨터학과
용 환승
[email protected]
DBMS 행렬
데이타베이스 응용의 구분
질의 있음
질의 없음
2. Relational
DBMS
4. Object-Relational
DBMS
1. File System
3. Object-Oriented
DBMS
단순 데이타
복합 데이타
Query는 declarative한 것으로 DBMS 기능의 핵심이다
단순 데이터는 기존의 atomic한 데이터 타입이고, 복합 데이터는 C의 struct,
array와 같이 단순 데이터 들이 구조화되어 구성된다.
Ewha Womans Univ., H.S.Yong
Page 2
사분면1: 질의없는 단순 데이타
문서 편집기: vi, Word, emacs등
파일 전체 단위의 연산 요구
문서의 일부분에 대한 검색 불가능
일부분의 변경 연산도 전체 파일 단위 처리 필요.
Lotus Notes, Documentum같은 문서관리, 그룹웨어 시스
템은 제외.
Image, Video 데이타도 화일시스템과 DBMS에 따라 차이.
Ewha Womans Univ., H.S.Yong
Page 3
사분면2: 질의있는 단순데이타
SQL-92 지원, 관계 DBMS
create table emp (
name
startdate
salary
dept
varchar (30),
date,
float,
varchar (20));
select name
from emp
where startdate > ‘1980-12-31’ and salary > 40000;
Business data processing 응용에 적합
Client development tool: Powerbuilder, 4GL, Visual Basic,
Delphi, Oracle’s Developer 2000등
Ewha Womans Univ., H.S.Yong
Page 4
사분면2 (계속)
성능
직렬성을 위한 2-Phase Locking
Transaction support: Commit, atomicity
장애 회복을 위해 WAL(Write ahead log)
보안/구조
클라이언트/서버 구조
클라이언트: SQL, 서버는 처리 결과 제공
Address space의 분리, 서버의 보호
Benchmark: TPC-A, B, C, D(parallel DBMS)
Ewha Womans Univ., H.S.Yong
Page 5
SQL DBMS 시장
주요 제품: ORACLE, INFORMIX, SYBASE, CA-Ingres,
IBM DB2, Microsoft SQL Server등
주요 요구 기능
SMP(Shared Multi-Processor, 공유메모리) 지원
TP-Monitor등의 트랜잭션 모니터 지원
많은 Hardware에서 수행
타 제품과의 게이트웨이 제공
질의를 병렬로 처리 가능
24시간 non-stop service 및 recovery 제공
Ewha Womans Univ., H.S.Yong
Page 6
SQL DBMS 시장 (계속)
시장규모: 80억불, 매년 25% 성장
Microsoft사의 진입
Foxpro 인수
Microsoft Access는 dBASE IV 대치
Windows NT와 SQL Server의 등장
UNIX 서버 및 S/W 시장 변화
DBMS S/W License 인하 유도
Ewha Womans Univ., H.S.Yong
Page 7
사분면3: 질의없는 복합데이타
개방형 사무실 공간 배치 응용
공간 배치 프로그램
여유 공간 수집 및 재할당 주기적으로 수행
create table employee (
name
varchar (30).
space
polygon,
adjacency set-of (employee));
create table floors (
number
asf
main ()
{
int,
swiss-cheese-polygon);
/* 공간 재배치 프로그램의 pseudo code */
read all employees;
read all floors;
compact();
write all employees;
직원 정보 검색
공간 배치 정보 검색
공간 압축 및 재배치
새 공간 배치 정보 저장
}
Ewha Womans Univ., H.S.Yong
Page 8
사분면3: 질의없는 복합데이타(계속)
Query는 불필요, 사용 데이터는 복잡
CAD 응용도 동일한 특성을 가짐
파일 시스템 방식
디스크 표현을 가상 메모리로 변환 필요
저장시 재변환
지속성 언어 사용(Persistent Language)
사용 데이터를 저장, 재수행시 이전 값을 사용
integer
I
persistent
integer
I;
main () /* 지속성 언어 사용시의 재배치 프로그램 */
{
compact();
}
Ewha Womans Univ., H.S.Yong
Page 9
지속성 시스템의 문제
J=J+1; 은 지속성 언어의 경우 갱신 연산
지속성 시스템과 관계 DBMS의 갱신 비교
지속성 시스템 경량(light weight) 연산
관계형 시스템의 Update Query 중량(heavy weight)
Ewha Womans Univ., H.S.Yong
Page 10
객체 지향 시스템의 공급자
O Vendors
Objectivity, Object Design, Versant, Servio, O2, Matisse등
년 8억불, 50%의 성장 기록
틈새 시장(niche market)
3사분면의 문제를 관계 DBMS로 해결
J=J+1; 과 같은 갱신을 SQL로 표현
속도 저하 문제 발생
2사분면 문제를 OODB로 해결
대부분 OODB는 제한된 SQL을 제공하거나 제공 안함
다수 사용자 동시성 제어 기능 등 취약
각 응용은 적합한 사분면의 DBMS 사용이 최적
Ewha Womans Univ., H.S.Yong
Page 11
사분면 4: 질의 있는 복합 데이타
캘리포니아 수자원부 응용 사례
수로와 관개용 운하 관리, 50만개의 슬라이드 보유
각 슬라이드에 표제( document, caption) 부여
create table slides (
id
int,
date
date,
caption
document,
picture
photo_CD_image);
create table landmarks (
name
varchar (30),
location point);
Ewha Womans Univ., H.S.Yong
식별자
촬영일자
주석(caption)
이미지
지명
Page 12
캘리포니아 수자원부 응용
예제 질의문
Sacramento로부터 20마일 이내에서 촬영한 석양 모습을
검색하라
select id
from slides P, landmarks L, landmarks S
where sunset (P.picture) and
contains (P.caption, L.name) and
L.location || S.location and
S.name = ‘Sacramento’;
Landmarks 테이블에서 Sacramento의 지리적 위치(S.location)
검색
S.location에서 20마일 이내의 다른 landmarks (L.location)을
검색, ‘||’는 사용자 정의 연산자이다.
Ewha Womans Univ., H.S.Yong
Page 13
캘리포니아 수자원부 응용(계속)
함수 contains는 사용자 정의 함수로, 키워드가 해당 문서에
포함여부 확인
sunset는 사용자 정의 함수로 이미지를 분석, 석양의 모습
여부를 확인(상단부의 색상이 오렌지인가 검사)
SQL-92에서는 지원 안함
현재 SQL-3 초안 작성 중
처리 성능
sunset 함수: 1억개의 명령어 수행 요구, 다른 조건절 먼저
처리 필요
‘||’ 연산자: 1차원 색인 B-트리로 곤란, 공간 질의용 색인 기
법인 격자(grid) 파일, R-트리, K-D-B 트리 기법 필요
Ewha Womans Univ., H.S.Yong
Page 14
객체-관계 DBMS 제품 및 전망
객체-관계 DBMS: SQL-3 언어 및 개발 도구 지원
관계형 + 객체-지향이 결합
Illustra, Omniscience, UniSQL, Hewlett-Packard의
Odapter, OpenODB
최근 ORACLE Version 8, IBM DB2, Informix Universal
Server 등이 기능 포함.
객체-관계 DBMS 전망
2005년 관계형의 150% 시장 확보 예상
확대 이유
새로운 멀티미디어 응용의 전산화
기존의 업무 데이터 응용의 고도화
보험회사는 사고다발지역 근처의 고객에게 보험료 할증
Ewha Womans Univ., H.S.Yong
Page 15
객체-관계 DBMS 전망 (계속)
관계 DBMS의 기술적 평가 절하 증대
Technological depreciation: C, UNIX, Java등
업무용 데이터 처리 부담 증가율: 1년에 10%
하드웨어 비용은 매년 1/2로 감소
업무용 데이터 처리 기술 난이도가 쉬워짐
객체-관계 데이터 처리 요구 증대
네트워크 모델 CODASYL에서 관계형 시스템으로의 전환
같은 “Great Wave” 예상
UNIX와 C로의 전환과 유사
Ewha Womans Univ., H.S.Yong
Page 16
제2장 특징1
기본 데이터 타입의 확장
2.1 기본 타입 확장의 필요성
2.2 확장 데이터 타입
2.3 사용자 정의 함수 및 연산자
2.4 완전한 객체-관계형 타입 확장
데이터 타입의 확장
Point(좌표) Data type의 사용
Illustra의 경우 2-D DataBlade 사용
alter table emp add column location point;
select r.name
from emp j, emp r
where j.name = ‘Joe’ and
distance (j.location, r.location) < 1;
이해하기 쉬운 형태로 표현
R-트리를 사용한 색인 제공
Ewha Womans Univ., H.S.Yong
Page 18
기본 데이터 타입의 생성
새로운 타입, mytype_t 생성 예
create type mytype_t (
internallength = 8,
-> 내부 메모리 크기
input = mytypeInput,
output = mytypeOutrput);
/* 새 데이터 타입을 사용한 테이블 예 */
create table my_table (
name
varchar(30),
some_data
mytype_t);
input, output 함수는 입/출력시 ASCII 표현을 내부 표현으
로 변환하는 데 사용.
입력 데이터 제약 의 용도로 사용 가능
Ewha Womans Univ., H.S.Yong
Page 19
사용자 정의 함수 및 연산자
새로운 타입에 대한 함수 및 연산자 정의 필요
SQL, C로 작성, 그외 Visual Basic, Java, Tcl등 사용 필요
create function function-name (type_name-1, …, type_name-k)
returns type-name as
(filename or SQL expression);
/* hourly_pay 함수 정의 예 */
create function hourly_pay (int)
returns float as
select ($1 / 2000 );
/* 실제 사용 질의문 */
select name
from emp
where hourly_pay (salary) > 12.50;
/* DBMS 에서 실행시 실제 수행 */
select name
from emp
where salary / 2000 > 12.50; /* unwound해서 실행 */
Ewha Womans Univ., H.S.Yong
Page 20
사용자 정의 함수 예
함수 salary_compare_Joe의 정의
직원 Joe와의 급여 비교값 계산
create function salary_compare_Joe (int)
returns int
as select $1 - salary
from emp
where name = ‘Joe’;
select salary_compare_Joe (e.salary)
from emp e
where e.name = ‘Fred’;
select f.salary - e.salary
from emp e, emp f
where e.name = ‘Fred’ and
f.name = ‘Joe’;
Ewha Womans Univ., H.S.Yong
<= 질의문에서 사용 예
<= 실제 DBMS에서 실행시
변환되어 실행
Page 21
C를 사용한 함수 정의
사원들의 근무연한으로 주식투자비율을 결정하는 경우
/* 파일 foo에 저장된 함수 vesting의 가상 코드 */
float vesting (startdate)
{
compute result = current_date - startdate;
convert result to months;
if result < 12 months return 0;
else return result / 60;
}
create function vesting (date)
return float
as external name ‘foo’
language C;
/* DBMS에 등록 */
select name
/* 질의문에서 사용 */
from emp
where vesting (startdate) > 0.6;
Ewha Womans Univ., H.S.Yong
Page 22
C를 사용한 함수 정의(계속)
C 프로그램은 내부가 투명하지 않다
DBMS는 SQL로 작성된 함수의 경우와 같이 사용자 SQL을
변환하여 수행 불가능.
실행 엔진은 질의문 처리중에 C 함수 호출
서버 또는 클라이언트 프로세스 속으로 실행 도중 함수의
코드를 링크, 동적으로 적재.
Ewha Womans Univ., H.S.Yong
Page 23
사용자 정의 함수와 연산자
연산자는 두 개의 인수를 가지는 함수와 동일
연산자는 두 인수들 가운데 사용
/* 다음 두 표현은 동일 */
select name
from emp
where salary > 10000;
select name
from emp
where GreaterThan(salary, 10000);
카풀 예제에서의 동일한 질의문 예
select r.name
from emp, emp r
where emp.name = ‘Joe’ and
distance (emp.location, r.location) < 1;
Ewha Womans Univ., H.S.Yong
select r.name
from emp, emp r
where emp.name = ‘Joe’ and
contained (r.location, circle (emp.location, 1));
또는
r.location << circle (emp.location, 1);
Page 24
사용자 정의 연산자 지원
새로운 연산자 등록: 특정 함수와 연결
create operator
binding opr-name
to function-name;
데이타베이스 프로시저와의 비교
사용자 정의 함수의 일종
SQL을 포함하는 프로그래밍 언어로 작성
클라이언트/서버간의 통신 회수 감소 목적으로 제안
단지 호출하여 실행만 가능
SQL 명령의 중간에 사용하는 것은 불가능
지능이 없는(brain-dead) 함수
Ewha Womans Univ., H.S.Yong
Page 25
완전한 객체-관계형 타입 확장
특성1: 동적 링크
정적인 링크의 문제점
새로운 함수의 등록에 따른 DBMS의 정지
시스템 관리자와 사전 협의
함수의 수정시 재정의 필요
DBMS 코드의 크기 증대로 인한 페이징 현상
특성2: 클라이언트 또는 서버측 구동
서버측 구동: local procedure call, 처리 부하 감소
다른 호스트 구동: remote procedure call, 호출 부담
sunset 함수의 경우는 서버의 로드를 감소하기 위해 사용 가
능
Ewha Womans Univ., H.S.Yong
Page 26
특성2: 클라이언트 또는 서버측 구동의
고려 사항
작은 클라이언트와 큰 서버의 예
주문형 비디오 시스템(VOD)
세트 탑(set-top) 박스의 비용을 최소화
대부분의 함수를 서버에서 실행 필요
대역폭 문제
sunset 함수를 클라이언트에서 실행하는 경우
많은 이미지 전송 필요
고속 LAN이면 가능, 저속의 통신망의 경우 불가능
응용에 따라 선택할 수 있도록 모두 제공하는 것이 바람직
Ewha Womans Univ., H.S.Yong
Page 27
특성 3: 보안
서버 측 구동 방식
사용자 프로그램이 보안 규칙 위반 가능성
DBMS의 사용자 ID로 수행
수행 시 오류가 발생하는 경우 전체 사용자에게 서비스 중
단
오류의 원인 파악 곤란: DBMS 또는 사용자 함수?
해결 방안
서버측 함수는 DBMS와 별도의 프로세스에서 수행
보안은 유지, 프로시져 호출에 따른 처리 부하로 수행 속도 감
소
방화벽(firewall) 기법
사용자 코드 검사, 방화벽 쌓기 수행
• 코드를 부가하여, 함수 영역을 벗어나지 못하게 함
Ewha Womans Univ., H.S.Yong
Page 28
특성4: 콜백(callback)
sunset 함수 구현시
석양의 이미지를 DB화
입력 이미지와 유사성을 비교하여 판단
sunset 함수 내에서 다시 DBMS의 SQL을 호출해야 함
콜백
즉 사용자 정의 함수에서 DBMS API(Application Program
Interface) 서버스 호출 가능
Ewha Womans Univ., H.S.Yong
Page 29
특성5: 사용자 정의 접근 기법
원점과 좌표(1,1)에 둘러싸인 사각형내의 사원을 검색하
라.
select name
from emp
where location << box (‘0, 0, 1, 1’);
좌표 데이터 타입을 위한 접근 기법
R-트리, 격자 파일, 쿼드 드리(quad tree), K-D-B 트리등 필
요
접근 기법을 DBMS에 추가하는 것 필요
Ewha Womans Univ., H.S.Yong
Page 30
특성6: 임의 길이 타입
emp의 location (좌표) 데이터: 고정 길이, 짧은 데이터
이미지: 고정 길이, 긴 데이타
압축 이미지: 가변 길이, 긴 데이터
좋은 객체-관계 DBMS는
{길다, 짧다}, {고정, 가변}의 조합을 모두 지원
관계 DBMS의 BLOB(binary large object)와 비교
고정, 가변, 긴 데이터 지원
BLOB에 대해 검색과 저장만 가능, 연산은 불가능
데이터 타입이 아님.
Ewha Womans Univ., H.S.Yong
Page 31
제4장
특징2: 복합 객체 (Complex Objects)
4.1 타입 생성자
4.2 타입 생성자의 사용
4.3 기본 타입과 복합 객체
타입 생성자(type constructor)
세 가지 종류의 생성자 제공
합성(composite, 레코드)
집합(set)
참조(reference)
합성 타입 생성자
create type phone_t (
area
varchar (3),
number
varchar (7),
description
varchar (20));
create type auto_t (
name
varchar (12),
year
int,
license
varchar (7));
/* 합성 타입의 인스턴스를 가지는 테이블 생성 예 */
create table phone of type phone_t;
create table auto of type auto_t;
합성
타입의
Ewha Womans
Univ.,
H.S.Yong구성요소에
다른 합성 타입 사용 가능
Page 33
타입 생성자 (계속)
테이블은 합성 타입의 인스턴스를 담는 컨테이너
(container)
타입과 테이블의 분명한 구분: 동일한 타입의 인스턴스를
가지는 테이블을 여러 개 허용할 수 있다.
테이블의 각 열을 합성 타입의 인스턴스로 정의 가능
create table jobs (
jobs_desc
employee
집합 타입 생성자
varchar (30),
employee_t );
T가 임의의 타입이면, setof (T)는 집합 타입이다.
참조 타입 생성자
T가 타입이면, ref (T)는 참조 데이터 타입
Ewha Womans Univ., H.S.Yong
Page 34
타입 생성자의 사용
부서 테이블의 예
create type dept_t (
dname
floor
manager
phone
autos
manager_ref
colors
workers
varchar (30),
int,
varchar (30),
phone_t,
setof (auto_t),
ref (employee_t),
setof (varchar (30)),
setof (ref (employee_t)));
create table dept of type dept_t;
합성 데이타의 조작
표준 SQL의 확장 필요
Ewha Womans Univ., H.S.Yong
Page 35
합성 데이터의 조작
사용자 정의 함수에서의 사용
합성 데이터 타입을 인수로 받고, 결과로 리턴 가능
/* 부서의 전화번호를 합하여 정수로 리턴하는 함수,
sum_digits를 정의, SQL표현식에서 사용 예 */
select sum_digits (phone)
from dept
where dname = ‘shoe’;
Ewha Womans Univ., H.S.Yong
select dname
from dept
where sum_digits (phone) = 50;
Page 36
FROM 절에서의 함수 사용
SQL에서는 FROM절에 테이블 이름만 사용
FROM절에 합성 데이터를 리턴하는 함수 사용 가능
하나의 합성 데이터는 단일 원소 집합으로 간주
합성 데이터를 리턴하는 SQL도 사용 가능
create function shoe_phone
returns phone_t as
select phone
from dept
where dname = ‘shoe’;
select number
from shoe_phone ()
where area = 510;
Ewha Womans Univ., H.S.Yong
select number
from (select phone
from dept
where dept = ‘shoe’)
where area = 510;
Page 37
연쇄 점 표기법
경로식(path expression)을 사용
SQL의 경우 열(column)을 참조하는 데 이미 사용
합성 타입의 열을 참조하는 데 사용
테이블_이름.열_이름
합성_이름.애트리뷰트_이름
열 표기법은 SELECT외에 WHERE절에서도 사용 가능
select phone.number
from dept
where dname = ‘shoe’;
select dname
from dept
where phone.area = 510;
합성 타입은 각 애트리뷰트는 값을 리턴하는 함수로 간주
할 수도 있음
애트리뷰트_이름 (합성_이름) 표기도 가능
Ewha Womans Univ., H.S.Yong
Page 38
합성 집합에 대한 조작
합성 데이터와 동일하게 적용
사용자 정의 함수
합성 데이터의 집합을 인수로 받는 함수 정의 가능
has85는 한 부서에서 1985년 자동차를 소유하는 경우 True를
리턴
select dname
from dept
where has85 (autos);
Ewha Womans Univ., H.S.Yong
Page 39
참조의 사용 (계속)
참조를 위한 SQL의 확장
참조를 가지고 실제 데이터를 리턴하는 함수 deref 필요
참조 타입을 인수로 받고, 리턴하는 함수 허용
select manager_ref
from dept
where dname = ‘shoe’;
select deref (manager_ref)
from dept
where dname = ‘shoe’
create function get_mgr (varchar)
returns employee_t as
select deref (manager_ref)
from emp
where dept = $1;
select get_mgr (‘shoe’);
Ewha Womans Univ., H.S.Yong
Page 40
참조의 사용 (계속)
deref의 역함수 ref의 사용
select ref (deref (manager_ref))
from dept
where dname = ‘shoe’;
ref를 사용한 갱신문: OID의 갱신
/* 관계 모델의 갱신과 ORDB의 갱신 */
update dept
update dept
set manager = ‘Mark’
set manager_ref =
where dname = ‘shoe’;
(select ref (emp)
from emp
where name = ‘Mark’)
where dname = ‘shoe’;
Ewha Womans Univ., H.S.Yong
Page 41
참조의 사용 (계속)
deref와 연쇄점 표기법의 사용
select deref (manager_ref).birthdate
from dept
where dname = ‘shoe’;
select deref (manager_ref).startdate, deref(manager_ref).salary
from dept
where dname = ‘shoe’;
OID를 사용한 참조 사용의 장점
객체의 값은 시간에 따라 변동 가능
OID는 유일, 불변 보장
Ewha Womans Univ., H.S.Yong
Page 42
참조 타입의 집합
집합 생성자 setof 를 사용
/* OID의 집합을 검색, 실제 사용자 입장에서는 무의미*/
select workers
from dept
where dname = ‘shoe’;
OID 집합의 실제 데이터를 검색하는 경우
/* 데이터 전체를 검색*/
select deref (*)
from (select workers
from dept
where dname = ‘shoe’);
Ewha Womans Univ., H.S.Yong
/* OID 데이터 중의 특정 항목 검색*/
select deref (*).startdate
from (select workers
from dept
where dname = ‘shoe’);
Page 43
제6장
특징 3: 계승 (inheritance)
6.1 데이터 계승
6.2 함수의 계승
데이터 계승
합성 타입에만 적용
create type person_t (
name
varchar (30));
create type employee_t (
salary
int,
startdate
date,
address
varchar (30),
city
varchar (30),
state
varchar (30),
zipcode
int)
under
person_t;
/* person_t의 항목 상속 */
create type student_t (
gpa
float)
under
person_t;
Ewha Womans Univ., H.S.Yong
Page 45
다중 계승(multiple inheritance)지원
student_t와 employee_t를 계승받는 student_emp_t
create type student_employee_t (
percent float)
under employee_t, student_t;
총 항목의 종류
person_t로부터 계승된 name
employee_t로부터 salary, startdate, address, city, state,
zipcode
student_t로부터 gpa
타입 정의시 명세된 percent
타입 계층 구조 형성(Lattice 구조)
Ewha Womans Univ., H.S.Yong
Page 46
다중 계승 지원 (계속)
모호성 발생 가능
예로 student_t에 address 항
목을 추가 (employee_t의
address와 다름) 하는 경우
student_emp_t는 동일한 이
름의 항목으로 인한 충돌 발생
person_t
employee_t
student_t
해결방안
충돌 발생하는 경우 정의 불가
능, 상위 항목 재정의 요구
모호성 해결 규칙 정의
student_emp_t
예) 정의 시 이름 순서
계승 계층의 예
Ewha Womans Univ., H.S.Yong
Page 47
테이블 계층
계승은 타입에만 적용되므로, 타
입을 정의한 후 테이블 정의 필요
타입을 가지지 않는 테이블은 계
승 기능 사용 불가능
create table person of type person_t;
person
emp
student
create table emp of type employee_t
under person;
create table student of type student_t
under person;
create table student_emp of type
student_emp_t under student, emp;
Ewha Womans Univ., H.S.Yong
student_emp
테이블 계층의 예
Page 48
테이블 계층 (계속)
테이블 계층을 사용 인스턴스 들의 범위 제어 용이
테이블 계층에서 한 테이블의 인스턴스는 하위 계층 테이블
인스턴스를 포함
예) 테이블 person은 직원(employee), 학생(student), 직원
겸 학생(student_emp) 테이블의 인스턴스 모두 포함
/* emp와 student_emp에서 검색*/
select name
from emp
where salary = 10000;
Ewha Womans Univ., H.S.Yong
/* emp 테이블에서만 검색*/
select name
from only (emp)
where salary = 10000;
Page 49
인스턴스 표현법
P개의 person 인스턴스와 E개의 emp 인스턴스 가정
person name
P 인스턴스
emp
name startdate address
city
state
zipcode
E 인스턴스
(a) Illustra 에서의 표현
person name
P + E 인스턴스
emp ref(person) startdate address city
state
zipcode
E 인스턴스
(b) 다른 종류의 표현법, person과 emp의 조인을 위해 reference를 사용
Ewha Womans Univ., H.S.Yong
Page 50
인스턴스 표현법(계속)
두 번째 표현은 다음 질의에 유리
select name
from person;
단점
person 테이블 접근만으로 해결
select salary
from only (emp)
where name = ‘Joe’;
emp에 대한 검색이지만, person 테이블도 검색 필요 (name)
항목 검색)
하나의 테이블(컨테이너)에 모든 인스턴스를 저장
특정 테이블 인스턴스 검색을 위한 색인 필요
컨테이너별 테이블 모델은 색인 불필요
Ewha Womans Univ., H.S.Yong
Page 51
검색시 고려사항
계승에 따른 다양한 클래스에 대한 검색
검색 애트리뷰트의 수가 클래스마다 다르게 됨
select *
from emp
where salary = 1000;
이 질의문에서 emp와 student_emp의 인스턴스를 검색
공통 애트리뷰트만 검색 or 모든 애트리뷰트 검색
가변 갯수의 애트리뷰트의 리턴(Jagged return)
select e
from emp e;
/* OID 집합을 리턴 */
위의 질의문 사용하여 클라이언트에서 처리가 바람직
Ewha Womans Univ., H.S.Yong
Page 52
함수의 계승
함수도 데이터와 같이 계승
함수가 인수로 가지는 데이터 타입의 계승 계층을 사용
타입 employee_t를 사용하는 함수 overpaid를 정의
Joe의 급여보다 크면 TRUE
create function overpaid (employee_t)
returns Boolean as
return $1.salary > (select salary from emp where name = ‘Joe’);
overpaid
person_t
student_t
employee_t
student_emp_t
Ewha Womans Univ., H.S.Yong
수정된 타입 계층
Page 53
함수의 계승(계속)
함수도 상위 타입에서 자동으로 계승
(1) emp의 함수 사용
select e.name
from only (emp) e
where overpaid (e) ;
함수 요청에 대해 상위타입을 탐색하여 사용
(2) student_emp는 함수 계승
select e.name
from emp e
where overpaid (e) ;
student_emp_ t는 overpaid 함수가 없으므로, 상위 계층 탐
색, employee_t의 함수를 사용
하위타입은 별도로 다른 의미를 가지는 동일 이름의 함수
정의 가능
Ewha Womans Univ., H.S.Yong
Page 54
함수의 계승(계속)
student_emp_t에 대한 overpaid 함수 별도 정의 예
create function overpaid (student_emp_t)
returns Boolean as
return $1.salary > (select salary
from student_emp where name = ‘Bill’);
overpaid
person_t
student_t
employee_t
student_emp_t
overpaid
Ewha Womans Univ., H.S.Yong
추가로 수정된 타입 계층
Page 55
함수의 계승(계속)
다형성(polymorphism)
하나의 함수가 다른 타입에 대해 다른 의미로 사용
함수의 중복(overloading): 함수가 인수에 따라 의미를 결정
다음의 질의문은
select e.name
from emp e
where overpaid (e);
아래의 두 질의문을 입력한 것과 동일 의미
select e.name
from only (emp) e
where overpaid (e) ;
Ewha Womans Univ., H.S.Yong
select s.name
from only (student_emp) s
where overpaid (s) ;
Page 56
다중 계승(multiple inheritance)
타입 계층과 질의문 예
overpaid
overpaid
person_t
student_t
employee_t
student_emp_t
수정된 타입 계층
select s.name
from student_emp s
where overpaid (s);
계승의 모호성 발생: 어느 상위 타입의 함수를 계승(?)
함수의 이름을 변경 유도
student_emp_t를 위한 함수 정의 등 다양한 해결 방안 필요
Ewha Womans Univ., H.S.Yong
Page 57
제7장
특징 4: 규칙 시스템
7.1 갱신-갱신 규칙
7.2 질의-갱신 규칙
7.3 갱신 -질의 규칙
7.4 질의-질의 규칙
7.5 의미론
7.6 요약
규칙 시스템
Rule system: AI의 전문가 시스템의 rule과 연관
DBMS를 지능화(intelligent) 함.
규칙의 기본 구성
ON 사건(event)
DO 연산(operation)
사건 구동 프로그래밍(event-driven programming)
cf) Visual Basic: 개체와 연관된 사건에 부가된 코드로 응용
을 구성
Ewha Womans Univ., H.S.Yong
Page 59
7.1 갱신-갱신 규칙
사건은 갱신, 연산도 갱신
예) Mike의 급여가 갱신되는 경우 Jane의 급여도 갱신
create rule new_update_update as
on update to emp.salary where current.name = ‘Mike’
do update emp
set salary = new.salary
where name = ‘Jane’;
/* 다음 질의문에 의해 위의 규칙이 수행 */
update emp
set salary = ‘52500’
where name = ‘Mike’;
SQL에 current (갱신 중인 레코드), new는 갱신된 레코드
를 가리키는 키워드 사용.
Ewha Womans Univ., H.S.Yong
Page 60
갱신-갱신 규칙(계속)
일반적인 갱신-갱신 규칙 가능
1980년 이전 입사 직원의 급여가 조정되는 경우 $500의
특별 가산금을 추가하라.
create rule bonus_40_update as
on update to emp.salary where current.startdate < ‘1980-01-01’
do update emp
set salary = new.salary + 500
where current.name = emp.name;
트리거(trigger)라고도 함
무결성 유지에도 사용
참조 무결성 선언에 갱신-갱신 규칙 기능 사용 (Illustra)
Ewha Womans Univ., H.S.Yong
Page 61
질의-갱신 규칙
사건은 질의, 연산에서 갱신이 수행
Mike의 급여가 검색되는 경우 검색자(user), 검색된 값, 검
색 시간을 특정 테이블에 기록하라.
create rule query_update as
on select to emp.salary where current.name = ‘Mike’
do insert into audit values
(current.salary, user, current_timestamp);
사건의 발생을 감시하는 데 사용
Ewha Womans Univ., H.S.Yong
Page 62
갱신-질의 규칙
경보(alerter)의 역할 제공
중요한 데이터가 갱신되는 경우 메시지 전달
create alerter my_alert
/* 경보 이름 및 특성 설정 */
(mechanism = ‘callback’);
create rule update_query as
on update to emp.salary where current.name = ‘Mike’
do alert my_alert;
경보의 전달은 두 가지로 구분
콜백: 서버가 클라이언트에게 비동기적으로 통지
poll: 클라이언트가 주기적으로 조사
Ewha Womans Univ., H.S.Yong
Page 63
질의-질의 규칙
갱신-갱신을 이용한 Mike와 Jane의 급여 갱신은 질의-질
의 규칙으로도 처리 가능
create rule query_query as
on select to emp.salary where current.name = ‘Jane’
do instead
select salary
from emp
where name = ‘Mike’;
/* 다음 질의문에 의해 위의 규칙이 수행 */
select salary
from emp
where name = ‘Jane’;
Jane의 급여는 검색되지 않는 가상 애트리뷰트가 됨.
Ewha Womans Univ., H.S.Yong
Page 64
질의-질의 규칙 (계속)
정교한 보안 시스템 구축에 활용
SQL은 Grant/Revoke 명령을 사용 테이블과 뷰에 대한 접
근 권한 제어
보안 시스템의 문제점
Mark는 $10,000 이하의 직원 급여 검색 권한 부여 가정
다음과 같은 뷰 mark_emp를 정의하여 권한을 부여
create view mark_emp as
select name, salary
from emp
where salary < 10000;
Ewha Womans Univ., H.S.Yong
Page 65
질의-질의 규칙 (계속)
Mark가 다음 질의문을 수행
select name, salary
from mark_emp
where name = ‘Emma’;
결과로 null 값이 리턴되는 경우
Emma의 급여 정보에 대한 보안 사항이 누출
즉 Emma는 $10,000 이상의 급여를 받는 것을 추론 함.
Ewha Womans Univ., H.S.Yong
Page 66
보안 문제의 해결 방법
적극적인 보안 해결 방법
거짓 정보의 출력
create rule query_query as
on select to emp.salary where current.salary >= 10000
do instead
return rand_salary (); /* 난수 급여값을 리턴 */
규칙의 연산부분에 SQL문장의 집합 기록이 가능
네 가지 규칙이 합성된 규칙 정의 가능
Ewha Womans Univ., H.S.Yong
Page 67
복합 규칙의 정의
질의-갱신과 질의-질의의 합성 규칙 예
create rule query_query as
on select to emp.salary where current.name = ‘Jane’
do instead begin
insert into audit values
(current.salary, user, current_time)
select unique salary from emp where name = ‘Mike’
end;
규칙 시스템은 정교한 DBMS 응용 작성에 매우 강력한 수
단을 제공
Ewha Womans Univ., H.S.Yong
Page 68
의미론: 규칙 시스템의 미해결 부분
동일한 사건에 구동된 다중 규칙 문제
사용자는 임의 갯수의 규칙 정의 가능
create rule strange_1 as
on update to emp.salary where current.name = ‘Mike’
do update emp
set salary = new.salary
where name = ‘Jane’;
create rule strange_2 as
on update to emp.salary where current.name = ‘Mike’
do update emp
set salary = 2 * new.salary
where name = ‘Jane’;
어느 규칙을 먼저 실행할 것인가?
Ewha Womans Univ., H.S.Yong
Page 69
체인 규칙
체인 규칙의 예
create rule chain_1 as
on update to emp.salary where current.name = ‘Mike’
do update emp
set salary = new.salary
where name = ‘Jane’;
create rule chain_2 as
on update to emp.salary where current.name = ‘Jane’
do update emp
set salary = new.salary
where name = ‘Sam’;
Mike의 급여 갱신은 “chain_1”에 의해 Jane의 급여로 전
파, 다시 “chain_2”에 의해 Sam의 급여로 전파
Ewha Womans Univ., H.S.Yong
Page 70
체인 규칙으로 인한 무한 루프(loop)
잘못된 체인 규칙의 예: 무한 루프)
create rule bad_chain_1 as
on update to emp.salary where current.name = ‘Mike’
do update emp
set salary = new.salary
where name = ‘Jane’;
create rule bad_chain_2 as
on update to emp.salary where current.name = ‘Jane’
do update emp
set salary = new.salary
where name = ‘Mike’;
ORDBMS는 순환 조건을 파악, 한번만 수행등의 조치 필
요
Ewha Womans Univ., H.S.Yong
Page 71
규칙 연산부의 취소(abort)
규칙의 연산부도 트랜잭션의 부분으로 구동되어 수행
트랜잭션이 취소되면 규칙의 연산부도 취소
갱신-갱신 규칙의 예
create rule update_update as
on update to emp.salary where current.name = ‘Mike’
do update emp
set salary = new.salary
where name = ‘Jane’;
Mike의 갱신이 취소되면, Jane의 갱신도 취소되어야 함,
Ewha Womans Univ., H.S.Yong
Page 72
규칙 연산부의 취소(abort) (계속)
규칙의 연산부 취소의 예외 상황
질의-갱신의 예
Mike의 급여 검색시 감사 추적 테이블에 추가하는 규칙
create rule query_update as
on select to emp.salary where current.name = ‘Mike’
do insert into audit values
(current.salary, user, current_timestamp);
규칙이 별도의 트랜잭션으로 수행
모든 접근 정보를 기록하는 것으로 취소가 바람직하지 않다.
사용자 트랜잭션의 취소와 별도로 COMMIT
사용자가 규칙의 연산부를 선택
사용자 트랜잭션에 포함 또는 별도의 트랜잭션으로 수행
Ewha Womans Univ., H.S.Yong
Page 73
규칙 연산부의 실행 시간
규칙의 실행 종류
즉시(immediate) 실행: 사건이 발생하는 경우 실행
지연(deferred) 실행: 트랜잭션이 완료(commit)될 때 실행
즉시 실행의 예
/* 규칙: 직원이 삭제될 때는 그 직원이 관리하는 부서도 삭제 */
create rule immediate_rule_1 as
on delete emp
do
delete dept where manager = current.name;
Ewha Womans Univ., H.S.Yong
Page 74
규칙 연산부의 실행 시간 (계속)
지연 실행의 예
/* 응용 트랜잭션의 예*/
begin
delete emp where name = ‘John’;
update dept
set manager = ‘Joe’ where manager = ‘John’
end
직원 John의 삭제는 즉시 John이 관리하는 부서의 삭제
가 되는 데, 이 경우 부서의 새로운 관리자 Joe로 갱신할
수 없게 된다.
즉시/지연 실행 규칙을 사용자가 선택
Ewha Womans Univ., H.S.Yong
Page 75
규칙 시스템 요약
특성1: 검색과 갱신으로 구성되는 사건과 연산부분 제공
트리거(갱신-갱신 규칙)는 규칙 시스템의 일부분.
특성2: 다른 객체-관계형 능력과 통합
임의의 SQL을 사건과 연산부분에서 사용
사용자 정의 함수, 계승등
emp에 대한 규칙은 student_emp 테이블에도 계승
특성3: 실행시의 다양한 선택을 제공
즉시, 지연 실행
동일 트랜잭션, 다른 트랜잭션의 부분으로 연산부 실행
특성4: 무한 루프의 방지 및 복구 기능
Ewha Womans Univ., H.S.Yong
Page 76