Download presentation
Presentation is loading. Please wait.
1
객체-관계 데이터베이스
2
객체-관계 데이터베이스의 배경 (1) 복잡한 데이터를 필요로 하는 새로운 고급 응용의 출현
이미지(image), 텍스트(text), 오디오(audio), 비디오(video), 공간과 지리 데이터(spatial and geographical data), 시간 시리즈 데이터(time series data) 객체 지향 데이터 모델의 출현 객체-관계 데이터 모델(object-relational data model) 객체지향 개념과 관계 개념을 종합한 모델 관계 테이블, 질의어, 객체, 메소드, 클래스, 상속, 캡슐화, 복합 객체 등을 지원 객체-관계 데이터베이스(ORDB) 객체-관계 모델에 따라 정의된 릴레이션(relation)과 객체(object)의 집합 객체-관계 DBMS(ORDBMS) 객체-관계 데이터 모델을 직접 지원하는 DBMS 객체-관계 데이터베이스를 정의하고 처리하여 이용 Enhanced Relational DBMS RDBMS에 ODBMS의 기능을 확장
3
객체-관계 데이터베이스의 배경 (2) 상용 객체-관계 데이터베이스 객체 지향 개념을 지원할 수 있도록 확장
Informix의 Universal Server Oracle의 Oracle IBM의 DB2 Universal DB (UDB) 객체 지향 개념을 지원할 수 있도록 확장 다양한 유형의 확장 가능한 데이터 타입(extendible data type) 사용자 정의 데이터 타입(user-defined data type)과 이들 간의 상속(inheritance) 사용자 정의 함수(function), 프로시저(procedure), 연산자(operators) 대형 객체 타입(large object type)
4
ORDB와 SQL(1) SQL의 역사 관계 데이터 베이스 시스템의 표준 데이터 언어
ANSI가 1986년 처음 표준으로 채택 SQL:1986 또는 SQL1 1992년 이 표준을 다시 개정하여 표준으로 발표 SQL:1992 또는 SQL2 그 이후에는 객체 지향 개념을 지원할 수 있도록 개정 1999년 SQL:1999(SQL3) 2003년 SQL:2003(SQL4) 객체 처리를 위한 기능의 확장
5
ORDB와 SQL(2) SQL: 1999/2003의 특징 ORDBMS의 공통적인 인터페이스를 제공 관계 모델적 특징
새로운 데이터 타입, 조건식 타입 시스템의 강화 객체 지향 모델적 특징 사용자 정의 타입, 객체, 객체 식별자, 참조 타입, 상속 등의 도입 함수와 메소드의 지원 순환 질의(recursive query) 트리거(trigger) 개념을 지원하는 활동 데이터베이스 (active database) 기능 제공 어떤 사건(event)이나 조건이 발생하면 자동으로 명세된 활동(action)을 기동시키는 활동 규칙(active rule)을 제공하는 시스템 클라이언트-서버(client-server) 환경 지원 보안 및 뷰 갱신 기능 강화
6
ORDB와 SQL(3) SQL이 지원하는 객체-관계 데이터 베이스는 테이블의 집합으로 구성
테이블은 투플의 집합이거나 객체의 집합 객체-관계 모델과 객체 지향 모델의 차이점 객체-관계 모델에서 각 객체 인스턴스의 톱 레벨 구조는 항상 투플 객체 지향 모델에서 톱 레벨 구조는 임의의 값이 될 수 있음 객체-관계 모델과 전통적인 관계 모델의 차이점 관계 모델에서 투플 원소는 반드시 기본 값(primitive value) SQL이 제공하는 기본 데이터 타입 값 객체-관계 모델에서 투플 원소는 임의의 값이 될 수 있음 객체 지향 모델 > 객체-관계모델 > 관계 모델
7
SQL: 1999/2003의 관계 모델적 특징 새로운 데이터 타입 LOB (Large Object)
기본 타입에 LOB(LARGE OBJECT)와 BOOLEAN 타입이 첨가 복합 타입을 만들 수 있는 ARRAY와 ROW 타입이 지원 타입 생성자는 CREATE TYPE LOB (Large Object) 텍스트 화일이나 그래픽 화일과 같이 대량의 데이터를 저장하기 위한 타입 CLOB(Character Large Object)과 BLOB(Binary Large Object)으로 구분 1) CLOB (Character Large Object) 가변 길이 문자 스트링 접합(||), 서브스트링(SUBSTRING) 추출, 스트링 절단(TRIM), 문자 길이(CHAR_LENGTH) 등의 다양한 표준 스트링 처리 함수에 사용 2) BLOB (Binary Large Object) 가변길이 이진 스트링 접합, 서브스트링 추출, 스트링 절단, 길이 함수(BLOB_LENGTH), LIKE 프레디킷 등에 사용
8
▶ LOB 현재 DBMS들이 지원하는 BLOB (Binary Large Object) SQL:1999/2003
단순한 byte stream으로 아무런 내부 구조나 내용에 대한 지식이 없이 단순한 데이터의 저장과 추출만 가능 클라이언트-서버 환경에서 클라이언트 응용이 BLOB 데이터의 일부만 요구하더라도 전체 BLOB 데이터를 검색해서 전송 → 오버헤드 SQL:1999/2003 DBMS 자체가 Large Object 타입의 데이터 일부에 대한 연산 허용 접합, 서브스트링, 길이 함수 등의 연산이 허용됨 Large Object 타입을 DBMS가 처리하여 필요한 일부 데이터만을 클라이언트로 전송해 줄 수 있음 예) CLOB 타입의 Resume와 BLOB 타입의 Picture 필드 첨가 ALTER TABLE STUDENT ADD COLUMN Resume CLOB(100K); ALTER TABLE STUDENT ADD COLUMN Picture BLOB(4M);
9
▶ BOOLEAN Boolean 타입의 변수는 참(TRUE), 거짓(FALSE), 모름(UNKNOWN) 중의 하나의 값을 가짐
부정은 NOT를 사용 WHERE B …….(X) WHERE B IS TRUE …....(O)
10
▶ SQL 객체 SQL이 지원하는 객체는 <oid, v> 형태
SQL 투플 값(tuple value) : [A1 : v1, A2 : v2,···, An : vn]와 같은 형식 A1, ···, A2은 서로 상이한 애트리뷰트 각 vi 는 다음과 같은 값 중에 하나를 취함 기본 값(primitive value): CHAR, INTEGER, DECIMAL, BOOLEAN과 같은 일반 SQL의 기본 타입 참조 값(reference value): 객체 식별자(oid: object identifier) 투플 값(tuple value) : [A1 : v1, A2 : v2,···, An : vn] 집단 값(collection value): MULTISET이나 ARRAY 생성자로 만들어진 값
11
▶ ROW 타입과 ARRAY 타입 (1) 복합 객체(composite object)를 명세 ARRAY 타입 ROW 타입
동일한 타입의 값들의 모임 데이터베이스 테이블의 한 애트리뷰트 값으로 저장됨 ROW 타입 복합 애트리뷰트(composite attributes)로 정의 투플 형태의 애트리뷰트를 정의 ROW 타입을 구성하는 애트리뷰트는 경로식으로 접근 CREATE TABLE STUDENT ( Sno INTEGER NOT NULL, Sname CHAR(20), Info ROW(Year INTEGER, Dept CHAR(10)), Gpa REAL ARRAY[8], PRIMARY KEY(Sno));
12
ROW 타입과 ARRAY 타입 (2) 4번째 학기의 평균 성적이 90점 이상인 3학년 학생의 이름과 학과, 그 학생의 2번째 학기 성적을 검색 SELECT S.Sname, S.Info.Dept, S.Gpa[2] FROM STUDENT S WHERE S.Gpa[4] ≥ 90 AND S.Info.Year=3; - dot notation으로 ROW의 구성요소를 접근 - Gpa[1]은 첫 번째 원소를 참조 한 행을 삽입 INSERT INTO STUDENT VALUES(100, ‘홍길동’, ROW(3, ‘COMPUTER’) ARRAY[0, 0, 0, 0, 0, 0, 0, 0]);
13
ROW 타입과 ARRAY 타입 (3) ROW 타입의 Info 애트리뷰트 전체에 대한 갱신
UPDATE STUDENT SET Info = ROW(4, ‘Architecture’) WHERE Sno=100; UPDATE STUDENT SET Info.Dept = ‘Architecture’ WHERE Sno=100;
14
▶ 새로운 조건식 (1) SIMILAR 두 문자 스트링이 서로 일치되는가를 검사 다양한 와일드 카드 지원 예
WHERE NAME SIMILAR TO ‘(SQL:(1986|1992|1999|2003)) | (SQL(1|2|3|4))’
15
▶ 새로운 조건식 (2) DISTINCT 두개의 투플 값이 상이한 것인가를 검사
두 개의 투플은 애트리뷰트 수가 같아야 하고 대응되는 애트리뷰트의 타입이 호환 두 null 값은 서로 같은 것으로 간주 UNIQUE에서의 비교 조건과 다름 WHERE (SELECT S.Gpa[1], S.Gpa[2], S.Gpa[3] FROM STUDENT S WHERE S.Sno=100) IS DISTINCT FROM ( SELECT S.Gpa[1], S.Gpa[2], S.Gpa[3] WHERE S.Sno=200);
16
DISTINCT SQL:1992에서 WHERE 절이 참이 되기 위해서는 3학년 학생들의 이름이 모두 달라야 함
이때 하나 이상의 학생 이름이 NULL이 되어도 모두 상이한 것으로 간주하여 true를 반환 WHERE UNIQUE (SELECT S.Sname FROM STUDENT S WHERE S.Info.Year = 3)
17
SQL: 1999/2003의 객체 지향적 특징 ▶ 사용자 정의 타입(UDT: User Defined Type)
구별 타입(distinct type)과 구조화 타입(structured type) UDT는 CREATE TYPE 문으로 정의 구별 타입(distinct type) 애트리뷰트 도메인을 명세할 때 사용 SQL의 기본 타입(char, integer, …)에 대해서만 정의 타입 명세 뒤에는 항상 FINAL로 명세 서브타입(subtype)을 가질 수 없음 타입이 같은 서로 다른 애트리뷰트들의 값들을 직접 비교하는 것을 금지하는 경우 CREATE TYPE SNUMBER AS INTEGER FINAL; CREATE TYPE DYEAR AS INTEGER FINAL; 17
18
▶ UDT (2) 사용자가 정의한 distinct type SNUMBER와 DYEAR를 이용한 STUDENT 테이블
다음 표현은 모두 불법이 됨 만일 이러한 연산이 필요한 경우 CAST 함수 이용 CREATE TABLE STUDENT ( Sno SNUMBER NOT NULL, //distinct type Year DYEAR, //distinct type ); ) WHERE Sno > Year // Sno와 Year는 서로 다른 데이터 타입 SET Year = Year +1 // Year와 1은 서로 다른 데이터 타입 WHERE Sno > CAST(Year AS SNUMBER) SET Year = Year + CAST(1 AS DYEAR)
19
▶ UDT (3) 구조화 타입(structured type) Row 타입에 이름을 붙여 UDT로 정의할 수 있음
객체지향 개념을 지원하는 기본 타입 하나 이상의 애트리뷰트로 정의되고 각 애트리뷰트의 값은 기본 타입, 복합 타입, 다른 구조화 타입을 가질 수 있음 필요한 연산은 메소드나 함수로 정의 Row 타입에 이름을 붙여 UDT로 정의할 수 있음 CREATE TYPE row-type-name AS [ROW] (<component declaration>) CREATE TYPE POINT AS (X FLOAT, Y FLOAT); CREATE TYPE LINE AS (Point1 POINT, Point2 POINT); 19
20
▶ UDT (2) 구조화 타입 (Cont’d) 구조화 타입의 애트리뷰트는 캡슐화(encapsulation)되어 함수를 통해서만 접근, 수정이 가능 예 : A는 FLOAT, P는 POINT, L은 LINE 타입이라 할 때 다음 식은 모두 합법 값의 비교(value comparison)는 사용자 정의 함수를 통해서만 가능 타입 계층 (type hierarchy)에 참여하여 슈퍼/서브타입 (super/subtype) 관계를 정의할 수 있음 서브타입은 슈퍼타입의 모든 애트리뷰트와 연산자들을 상속받음 P.X L.Point1.X SET P.X = A SET L.Point1.X = A 20
21
UDT와 타입 계층 CREATE TYPE PERSON_TYPE AS ( Rno INTEGER NOT NULL UNIQUE,
Name CHAR(20) Address ROW(Number INTEGER, Street CHAR(20), Zip CHAR(10)) ); CREATE TYPE STUDENT_TYPE UNDER PERSON_TYPE AS ( Sno INTEGER NOT NULL UNIQUE, Year INTEGER, Dept CHAR(10) ) METHOD award_degree() RETURNS BOOLEAN; //실제 메소드 award_degree()의 정의 CREATE METHOD award_degree() FOR STUDENT_TYPE LANGUAGE C EXTERNAL NAME ‘file:/home/admin/award_degree’;
22
▶ UDT (5) SQL:1999/2003은 단일 상속(single inheritance)을 지원 UDT의 활용
① 테이블의 애트리뷰트 도메인(domain)을 명세하는데 사용 ②테이블의 타입(type)을 정의하는데 사용 CREATE TABLE … OF 문으로 정의된 테이블을 타입 테이블(typed table)이라 함 타입 테이블의 투플은 객체(object)로 취급 CREATE TABLE TRANSCRIPT ( Student STUDENT_TYPE, Course CHAR(6), Semester CHAR(6), Grade Char(1) ); CREATE TABLE STUDENT1 OF STUDENT_TYPE;
23
▶ TABLE 정의 1. CREATE TABLE 문으로 테이블 정의 2. CREATE TABLE … OF 문으로 테이블 정의
애트리뷰트 타입으로 UDT를 사용할 수 있음 애트리뷰트를 접근할 때는 닷트(.)를 이용한 경로식 사용 STUDENT.Data.Sno 투플은 단순히 값임 2. CREATE TABLE … OF 문으로 테이블 정의 키워드 OF 다음에 반드시 UDT를 명세 타입 테이블(typed table) STUDENT1의 애트리뷰트는 닷트(.)로 직접 접근 STUDENT1.SNO 투플은 객체가 되어 식별자가 제공됨 CREATE TABLE STUDENT ( Data STUDENT_TYPE, PRIMARY KEY (Sno)); CREATE TABLE STUDENT1 OF STUDENT_TYPE ( PRIMARY KEY (Sno));
24
▶ TABLE 상속 (1) 키워드 UNDER로 슈퍼 테이블 / 서브 테이블 관계를 정의 Advisor_No INTEGER,
CREATE TYPE GR_STUDENT_TYPE UNDER STUDENT_TYPE AS ( Advisor_No INTEGER, Thesis CHAR(100)); CREATE TYPE PART_TIME_STUDENT_TYPE UNDER STUDENT_TYPE AS ( P_Sno INTEGER NOT NULL UNIQUE, Studyday DATE, Job CHAR(20) ); CREATE TABLE STUDENT1 OF STUDENT_TYPE ( PRIMARY KEY (Sno)); CREATE TABLE GR_STUDENT OF GR_STUDENT_TYPE UNDER STUDENT1; CREATE TABLE PART_TIME_STUDENT OF PART_TIME_STUDENT_TYPE UNDER STUDENT1 ( PRIMARY KEY (P_Sno));
25
▶ TABLE 상속 (2) 테이블 상속 제약 조건 슈퍼테이블인 STUDENT1의 각 투플은 서브테이블인 GR_STUDENT나 PART_TIME_STUDENT에 속한 최대 하나의 투플하고만 대응 가능 서브테이블 GR_STUDENT와 PART_TIME_STUDENT에 있는 각 투플은 반드시 슈퍼테이블 STUDENT1에 있는 하나의 투플하고만 대응 이 제약 조건은 갱신 연산을 수행하는 경우에도 항상 자동적으로 지켜져야 함 ONLY를 목표 테이블 앞에 붙이면 연산의 대상이 그 테이블로 제한됨. 즉 슈퍼/서브 관계에 없는 투플에 한정됨.
26
▶ TABLE 연산 (1) 삽입, 검색 연산 슈퍼테이블 STUDENT1에 투플을 삽입하면 정상적인 삽입. 서브테이블 GR_STUDENT에 투플을 삽입하면 상속받은 애트리뷰트들에 대응하는 값은 슈퍼테이블 STUDENT1의 투플로 자동으로 삽입 슈퍼테이블 STUDENT1에서의 검색은 정상적인 검색. 여기에는 GR_STUDENT를 통해 삽입된 투플들도 함께 검색. 그러나 서브테이블 GR_STUDENT에서의 검색은 이 테이블이 마치 STUDENT1의 애트리뷰트를 포함하고 있는 것과 같은 두 테이블에서 투플들을 검색.
27
▶ TABLE 연산 (2) 삭제, 갱신 연산 슈퍼테이블 STUDENT1에서의 삭제는 정상적으로 수행. 이때 만일 삭제되는 투플에 대응되는 투플이 서브테이블 GR_STUDENT에 있으면 이 투플도 자동으로 삭제. 만일 서브테이블 GR_STUDENT에서 삭제가 일어나면 GR_STUDENT 테이블과 STUDENT1 테이블에서 동시에 삭제가 수행. 서브테이블 GR_STUDENT가 상속받지 않은 자신만의 애트리뷰트에 대한 갱신은 GR_STUDENT 테이블에서만 수행. 상속에 관련된 애트리뷰트에 대한 갱신은 STUDENT1이나 GR_STUDENT 테이블을 통해 개념적으로는 슈퍼테이블과 서브테이블 모두에서 수행.
28
▶ REF 애트리뷰트(1) SQL:1999/2003에서 객체(object)를 생성 방법 타입 테이블(typed table)
타입 테이블에 투플을 삽입 타입 테이블(typed table) 모든 투플은 자신의 식별자, oid를 가진 객체로 취급 타입 테이블 자체는 객체지향 개념의 클래스(class)에 대응 타입 테이블의 모든 투플들은 클래스의 extent에 대응
29
▶ REF 애트리뷰트(2) 다음 두 테이블 정의문 비교 STUDENT1 테이블의 투플들은 객체로 간주
애트리뷰트는 모두 동일함 STUDENT1 테이블의 투플들은 객체로 간주 STUDENT2 테이블의 투플들은 객체로 간주하지 않음 CREATE TABLE STUDENT1 OF STUDENT_TYPE; CREATE TABLE STUDENT2 ( Rno INTEGER NOT NULL UNIQUE, Name CHAR(20), Address ROW(Number INTEGER, Street CHAR(20), ZIP CHAR(20)), Sno INTEGER NOT NULL UNIQUE, Year INTEGER, Dept CHAR(10) );
30
▶ REF 애트리뷰트 (3) 타입 테이블을 정의할 때 참조 애트리뷰트를 표현하기 위하여 REF라는 참조 타입(reference type)으로 명세 타입 테이블을 정의할 때 자기 참조 애트리뷰트(self-referencing attribute)를 REF로 명세하는 것이 보통 위와 같이 REF 타입의 애트리뷰트가 없이 테이블을 정의하면 자기 참조 애트리뷰트가 내부적으로 만들어 짐. 그러나 이 참조 애트리뷰트를 접근할 수 있는 이름이 명시되지 않음 투플 객체들의 oid는 외부에서 접근 불가 CREATE TABLE STUDENT1 OF STUDENT_TYPE;
31
▶ REF 애트리뷰트 (4) REF IS 절로 자기 참조 애트리뷰트 이름을 명세
REF IS 절의 S_Oid는 STUDENT2의 애트리뷰트로서 각 투플을 식별할 때 사용하는 참조 애트리뷰트라는 것을 명세 REF 타입의 이 S_Oid의 값은 투플 객체 식별자 이 참조 애트리뷰트 S_oid는 다른 일반 애트리뷰트와 같이 취급 , 그러나 변경은 불가 질의문의 SELECT나 WHERE 절에서 이 참조 애트리뷰트 값(oid)을 이용할 수 있음 CREATE TABLE STUDENT2 OF STUDENT_TYPE ( REF IS S_Oid);
32
▶ REF 타입 (1) 투플 객체 식별자(oid)를 표현하는 애트리뷰트를 명세
SYSTEM GENERATED(default)나 DERIVED 형식이 있음 REF IS 절을 이용해 자기 참조 애트리뷰트(self-referencing attribute)를 명세 CREATE TYPE DEPT_TYPE AS ( Dept_No CHAR(3), Dname CHAR(30) ); CREATE TABLE DEPARTMENT OF DEPT_TYPE ( REF IS Dept_Oid, PRIMARY KEY (Dept_No));
33
▶ REF 타입 (2) 참조 테이블(referencing table) STUDENT 테이블 정의
DEPARTMENT 테이블은 Dept_Oid 값으로 투플 객체를 참조할 수 있게 하는 피 참조 테이블(referenced table) STUDENT 테이블 정의 CREATE TABLE STUDENT3 ( Sno INTEGER NOT NULL UNIQUE, Sname CHAR(10), Year INTEGER, Dept REF(DEPT_TYPE) SCOPE DEPARTMENT PRIMARY KEY (Sno));
34
▶ REF 타입 (3) 참조 관계는 내용참조(dereference) 연산자()를 이용한 경로식으로 표현
Sno(학번)이 100인 학생의 Dname(학과 이름) 검색 Dname이 ‘Computer’인 학생의 Sname 검색 SELECT S.Dept Dname AS DepartmentName FROM STUDENT3 S WHERE S.Sno = 100; SELECT S.Sname FROM STUDENT3 S WHERE S.Dept Dname = ‘Computer’:
35
▶ REF 타입 (4) 투플을 삽입할 때 REF 값의 처리
예: 학번이 500인 새로운 Computer과 학생 삽입 REF 타입의 Dept 값은 SELECT 문으로 검색된 DEPARTMENT 테이블에 속한 투플의 참조 애트리뷰트 Dept_Oid 값으로 저장 DEPARTMENT 테이블 정의에 REF IS Dept_Oid로 명세 INSERT INTO STUDENT3 (Sno, Name, Year, Dept) VALUES (500, '홍길동', 3, ( SELECT Dept_Oid FROM DEPARTMENT WHERE Dname='Computer') );
36
▶ TABLE 상속(1) UNDER로 슈퍼테이블/서브테이블이 명세되지 않은 경우 CREATE TYPE STUDENT_TYPE
UNDER PERSON_TYPE AS (….. CREATE TABLE PERSON OF PERSON_TYPE; CREATE TABLE STUDENT1 OF STUDENT_TYPE; STUDENT1 테이블에 다음과 같이 투플 하나를 삽입 삽입 연산을 수행하면 이 투플은 자동으로 PERSON 테이블에 나타나지 않음 슈퍼 테이블(supertable)로 명세된 테이블에만 나타남 INSERT INTO STUDENT1 (Rno, Name, Address, Sno, Year, Dept) VALUES (1234, ‘홍길동’, ROW(119, ‘Main St’, ‘ ’), 100, 3, ‘Comp’);
37
▶ TABLE 상속(2) UNDER로 슈퍼테이블/서브테이블을 명세 테이블 T1이 테이블 T2의 서브테이블이 되기 위한 조건
테이블 PERSON : 테이블 STUDENT1의 슈퍼 테이블 테이블 STUDENT1 : 테이블 PERSON의 서브테이블 테이블 T1이 테이블 T2의 서브테이블이 되기 위한 조건 타입 테이블 T1의 UDT1은 타입 테이블 T2를 정의한 UDT2의 서브타입이어야 한다. 타입 테이블 T1은 반드시 CREATE TABLE T1 OF UDT1 UNDER T2 형식으로 명세되어야 한다. CREATE TABLE STUDENT1 OF STUDENT_TYPE UNDER PERSON;
38
▶ collection 타입(1) MULTISET 집단 타입(collection type)
STUDENT_TYPE에 새로운 집합 값 애트리뷰트(set-valued attribute), Enrolled 추가 애트리뷰트 Enrolled의 도메인은 COURSE_TYPE의 투플에 대한 참조 타입으로 똑같은 oid를 중복해서 포함할 수 있는 다중집합, MULTISET CREATE TYPE STUDENT_TYPE UNDER PERSON_TYPE AS( Sno INTEGER NOT NULL UNIQUE, Year INTEGER, Dept CHAR(10), Enrolled REF(COURSE_TYPE) MULTISET );
39
▶ collection 타입(2) 투플 검색 질의문 예 S.Enrolled 결과는 S가 등록한 과목의 참조(oid) 다중집합
투플 검색 질의문 예 S.Enrolled 결과는 S가 등록한 과목의 참조(oid) 다중집합 이 다중집합을 투플 변수 E의 범위로 명세하는 것은 부적합 함수 UNNEST가 다중집합(multiset)을 단일 컬럼 테이블(one-column table)로 변환 TEMPCOURSE(C_Oid ) : 함수 UNNEST는 변환 결과를 저장하여 참조할 수 있도록 임시 릴레이션과 애트리뷰트를 명세 변수 E의 값은 참조 값이기 때문에 객체를 참조할 때는 내용 참조 연산자 를 사용해야 됨 SELECT S.Sno, C.Cname FROM STUDENT S, COURSE C WHERE C.Cno IN (SELECT E C_Oid FROM UNNEST(S.Enrolled) AS TEMPCOURSE(C_Oid ) E);
40
▶ collection 타입(3) UNNEST() 함수와 MULTISET() 함수
41
▶ collection 타입(4) 단일 컬럼 테이블에서 다중집합으로의 변환: multiset 함수
STUDENT 테이블에 투플 삽입 STUDENT의 Enrolled 애트리뷰트는 COURSE_TYPE의 다중집합 타입 먼저 중첩 질의문으로 참조를 포함한 단일 컬럼 테이블을 생성한 다음에 MULTISET 함수로 이것을 다중집합으로 변환 CREATE TABLE TRANSCRIPT1 ( Student REF(STUDENT_TYPE), Course REF(COURSE_TYPE), Semester CHAR(6), Grade Char(1) ); INSERT INTO STUDENT (Sno, Year, Dept, Enrolled) VALUES (100, 3, ‘Comp’, MULTISET(SELECT T.Course FROM TRANSCRIPT1 T WHERE T.Student Sno=100));
42
ODBMS와 ORDBMS ORDBMS ODBMS
RDBMS에 객체 지향 개념을 지원하도록 확장된 SQL:1999/2003의 여러 기능을 구현 ODBMS 다양한 기능을 지원하는 타입 시스템(type system)이 존재 데이터 객체의 영속성(persistent) 객체 지향 프로그래밍 언어와 DBMS와의 결합
43
▶ ODBMS와 ORDBMS의 유사점 사용자 정의 타입(user defined type) 지원
구조화 타입(structured type) 지원 객체 식별자와 참조 타입(oid and reference type) 지원 상속(inheritance) 지원 집단 타입(collection type)을 처리할 수 있는 질의어 (query) 제공 병행 제어(concurrency control)나 복구(recovery)와 같은 DBMS의 기능 제공
44
▶ ODBMS와 ORDBMS의 차이점 ODBMS ORDBMS 객체 지향 프로그래밍 언어와 매끄럽게 (seamless) 통합
객체 중심 처리 응용 몇 개의 객체들만 검색 메인 메모리 내의 객체들의 효율적인 참조가 중요함 긴 트랜잭션 지원 새로운 병행 제어 기법이 필요 질의 기능이 미비함 호스트 언어 안에 SQL명령을 삽입 투플과 객체 처리 응용 대규모 데이터를 검색 디스크 접근의 최적화가 가장 중요함 비교적 짧은 트랜잭션 지원 RDBMS의 병행제어 기법을 이용 질의 기능이 핵심 부분임
Similar presentations