11. 객체 데이터베이스
새로운 데이데이터베이스 응용 전통적인 데이터베이스 응용들의 특성 통일성(uniformity)-같은 데이터 아이템에 같은 크기 레코드 중심(record-oriented)- 고정 길이의 레코드 원자 필드 (atomic field)- 레코드는 원자 값으로 구성 단기 트랜잭션(short transaction)- 짧은 실행 시간 정적 스키마(static schema)- 변경이 없거나 단순
새로운 데이터베이스 응용 (2) 새로운 응용들 컴퓨터 이용 설계(CAD, Computer-Aided Design) CAD 데이터베이스, design components, versions 컴퓨터 이용 소프트웨어 공학 (CASE, Computer-Aided Software Engineering) CASE 데이터베이스, source code, definitions and uses 멀티미디어(Multimedia) 데이터베이스 image, spatial data, audio/video data, geographical data 사무 정보 시스템(OIS, Office Information System) schedule, documents, document contents 하이퍼텍스트(hypertext) 데이터베이스 시스템 world wide web, link-based document retrieval and query
객체 지향 개념의 배경 기존 관계 데이터 모델은 새로운 응용 영역에 부적합 새로운 데이터 모델과 질의어, 트랜잭션 모델(transaction model)을 요구 객체 지향 프로그래밍 언어의 개념에 기반한 객체 지향 데이터 모델 등장 C++, Java, Smalltalk
객체 데이터 모델 객체 지향 개념(object-oriented concepts) 객체 및 객체 식별자(object and object identifier) 애트리뷰트와 메소드(attributes and method) 클래스, 클래스 계층(class and class hierarchy) 상속(inheritance) 복합 객체(complex object) 객체 데이터 모델(ODM: object data model) 객체 지향 개념을 지원하는 데이터 모델
객체 데이터 모델(2) 객체 데이터베이스(object database) 객체 데이터 모델에 따라 객체의 상태(state)와 행태(behavior), 관계(relationship)가 정의되는 객체의 집합 객체 데이터베이스 관리 시스템(ODBMS, object DBMS) 객체 데이터 모델을 직접 지원하는 DBMS 객체 데이터베이스 시스템(ODBS, object DBS) 객체 데이터베이스를 정의하고 처리할 수 있는 데이터베이스 시스템
▶ 객체와 객체 식별자 객체(Object) 객체 식별자(OID: Object IDentifier) 유일한 식별, 내포된 성질을 가지고 다른 객체들과 상호작용 할 수 있는 실세계 개체(entity)의 추상적 표현 개체는 구성요소와 관계성으로 정의 객체 = entity(데이터) + 연산자 유일한 식별성(identity) 객체 식별자(OID: Object IDentifier) 객체의 유일성 표현 관계 모델의 기본 키와 달리 변경할 수 없음(user-defined value vs. system-defined value) 객체 탐색의 수단 다른 객체의 OID를 이용해 객체간 참조 관계를 표현
▶ 애트리뷰트와 메소드 애트리뷰트 인스턴스 변수(instance variable) : 객체의 상태를 표현 한 객체의 애트리뷰트 집합을 객체 구조(object structure) 유일한 이름과 도메인으로서의 데이터 타입을 가짐 Student S_number Name Date_of_birth Dept Grade Address Courses-taken Advisor 123-45-6789 홍길동 10/21/62 컴퓨터정보공학 3.1 관악구 신림동 56-1 PL; DB; DS; OS; 이 일 로 Student 객체의 애트리뷰트
▶ 애트리뷰트와 메소드 (2) 객체 상태(Object State) 메소드(method) 어느 한 시점에서 객체의 애트리뷰트들의 값 시간에 따라 변화 메소드(method) 객체 상태를 처리하기 위해 수행되는 연산 객체 행태(object behavior) 한 객체에 명세된 메소드 집합 캡슐화(encapsulation) 객체의 내부 즉 애트리뷰트의 데이터 표현과 메소드 구현이 다른 객체에게 은닉된 상태 데이터 메소드 1 3 2
▶ 클래스( Class)(1) 동일한 속성(attributes)과 행위(methods, operations)를 포함하고 있는 객체(object)들의 집합 똑같은 특성을 갖는 객체(인스턴스)의 모형(template) 클래스 정의 속성(attributes)과 행위(methods)의 명세 클래스의 한 인스턴스(instance)가 객체(object) 클래스와 객체는 instance-of 관계 한 클래스의 모든 인스턴스들을 그 클래스의 익스텐트(extent)라 함 클래스는 객체 데이터베이스의 질의의 대상
클래스의 예 차재병 박정숙 채진영 S_number Name Date_ of_birth Dept Grade Address Course_taken Advisor Sgrade() Mail() Student 클래스 Student 인스턴스(객체) 메소드 인스턴스 변수 (애트리뷰트)
▶ 클래스( Class)(2) 메타 클래스(meta-class) 특수 논리적 클래스(logical class) 클래스 자체를 객체로 취급할 필요가 있을 때 메타클래스의 인스턴스로 간주 객체 생성 시 메시지 전달을 받는 객체 역할 객체만 메시지를 전달 받을 수 있음 클래스 애트리뷰트(class attribute) 그 클래스의 모든 인스턴스들이 공용하는 요약 정보 등을 표현 클래스 메소드(class method)
▶ 클래스 계층 클래스 계층(class hierarchy) 일반화(generalization) 관계 클래스들의 세분화(specialization)에 따라 계층 형성 서브클래스(subclass)와 슈퍼클래스(superclass) 구조 트리(tree) 격자(lattice) :비사이클 방향 그래프(DAG, Directed Acyclic Graph) 일반화(generalization) 관계 슈퍼클래스는 서브클래스의 일반화 개념 서브클래스는 슈퍼클래스의 세분화 개념 서브클래스와 슈퍼 클래스는 ISA 관계
클래스 계층의 예 Vehicle tree structure Car Truck Domestic Car Import Car
▶ 상속(Inheritance) 클래스 계층 구조에 따라 상위 클래스의 애트리뷰트와 메소드를 상속받는 것 구조 상속(structural inheritance) 애트리뷰트(인스턴스 변수) 상속 행태 상속(behavioral inheritance) 메소드 상속 코드 재사용(code reuse)을 지원 단일 상속(single inheritance) : tree 다중 상속(multiple inheritance) : lattice 폴리모피즘(polymorphism)/오버로딩(overloading) 하나의 이름을 둘 이상의 상이한 메소드가 사용하는 것 적용되는 객체에 따라 상이한 응답
다중 상속 (multiple inheritance) : DAG Person rrno name addr lattice Student Employee sno dept year eno sal dept major advisor PartTimeStudent
▶ 다중 상속(multiple inheritance) 이름 충돌과 상속 범위 서브클래스 우선 서브클래스에서 정의된 같은 이름의 메소드, 애트리뷰트는 상속 하지 않음 슈퍼클래스들 사이의 우선 순위 다중 상속에서 슈퍼클래스들 충돌에서 발생하는 문제점 슈퍼클래스들 사이에 명세된 우선 순위에 따라 상속
▶ 복합 객체(Complex Object) 애트리뷰트 값: 도메인으로 명세된 클래스의 인스턴스 애트리뷰트의 도메인 시스템이 정의한 기본 클래스(primitive class) 정수, 스트링: 인스턴스(객체)의 oid가 없음 애트리뷰트 값 : 정수 값 또는 스트링 값 사용자 정의 클래스(user-defined class) 애트리뷰트 값 : 저장되는 값은 해당 인스턴스의 OID 복합 객체 애트리뷰트 값으로 다른 객체의 oid를 사용: 객체 참조 애트리뷰트의 도메인으로 사용자 정의 클래스가 사용됨 클래스의 중첩 구조를 형성 중첩 관계 모델(nested relational model) 클래스 구성 계층(class composition hierarchy) 형성 part-of 관계 클래스 간의 상속과는 관계가 없음
클래스 구성 계층의 예 VehicleEngine Vehicle Employee Company Car Truck ID weight engine manufacturer size cylinder Employee Company rrno name age city name location president Car Truck DomesticCar ForeignCar DomesticAutoCo ForeignAutoCo 슈퍼클래스/서브클래스 링크 애트리뷰트/도메인 링크
ODMG의 ODBMS ODMG(Object Data Management Group) 표준화(standardization) ODBMS의 기술 표준화를 위한 국제 산업체 컨소시엄 OMG(Object Management Group) 산하 소그룹 1993/1997/2000년에 ODMG 1.0/2.0/3.0 표준 ODBMS를 위한 ODMG 구조의 주요 구성 요소 객체 모델(OM: Object Model), 객체 정의어(ODL), 객체 질의어(OQL), 객체 지향 언어 바인딩(C++, Java, Smalltalk) 등 포함 표준화(standardization) 이식성(portability) – capability to execute applications on different system with minimal modifications. 상호 운영성(interoperability) – ability of applications to access multiple distinct systems.
▶ ODMG 객체모델 객체 모델(Object Model) 객체(Object) - 4 개의 특성을 명세 객체 질의어(OQL)와 객체 정의어(ODL)의 기반이 되는 데이터 모델 기본 개념 : 객체(object)와 리터럴(literal) 객체(Object) - 4 개의 특성을 명세 객체 식별자(OID) : unique 이름(name) : optional, but unique 수명(lifetime) : 영속적(persistent) 또는 일시적(transient) 객체가 DB에 저장되느냐 아니면 프로그램 실행 동안만 존재 구조(structure) : 객체 생성자(constructor)에 의해 생성되는 방법
▶ ODMG 객체모델 (2) 객체 타입 리터럴(literal) 집단 객체 타입(collection object type) Set, Bag, List, Array, Dictionary Dictionary는 <key, value> 쌍의 집합 원자 객체 타입(atomic object type) 사용자 정의 객체 타입을 의미 ODL의 키워드 class를 사용하여 정의 리터럴(literal) 식별자(oid) 없이 값만 존재 객체를 구성하는 요소로 사용 개별 참조는 불가
▶ ODMG 객체모델 (3) 리터럴(literal) 타입 클래스 정의 원자 리터럴(atomic literal) 타입 long, short, char, string 구조화 리터럴(structured literal) 타입 system-defined structure: date, time, timestamp, interval user-defined structure: struct 키워드를 사용 집단 리터럴 (collection literal) 타입 Set, Bag, List, Array, Dictionary 클래스 정의 애트리뷰트(attribute) 관계(relationship) 어떤 객체에 대한 참조(reference)나 참조의 집합을 표현 ODMG에서는 이원 관계(binary relationship)만 허용 역 관계 (inverse relationship) 명세 가능 연산(operation) : 객체에 적용하는 함수
▶ ODL ODL(Object Definition Language) 인터페이스(interface) 정의 ODMG 데이터베이스 스키마를 정의 객체의 명세(specification)를 정의하는 언어 서로 다른 ODBMS간에 데이터베이스 스키마를 쉽게 이식(portability) 객체 타입은 interface와 class 정의로 명세 인터페이스(interface) 정의 객체 타입의 추상적 행태, 즉 연산 시그니쳐(signature)를 명세 다른 인터페이스나 클래스가 상속 가능 자체 인스턴스의 생성은 불가
인터페이스 정의의 예 interface Object { ··· boolean same-as(in object other-object); //in은 매개변수 애트리뷰트로 out, inout도 있음 object copy(); void delete(); }; interface Time : Object { //Object interface를 상속 unsigned short hours(); unsigned short minutes(); unsigned short seconds(); unsigned short milliseconds(); boolean equal(in Time other-time); boolean greater(in Time other-time);
▶ ODL (2) Class 정의 Relationship 클래스 계층(superclass/subclass) 관계 애트리뷰트, 관계, 연산을 명세 객체 인스턴스 생성 가능 클래스에 속하는 인스턴스 집합 이름 앞에 extent로 명세 Relationship 다른 객체의 참조 명세 일대일(1:1), 일대다(1:n), 다대다(n:m) 관계로 구분 클래스 계층(superclass/subclass) 관계 extends로 superclass/subclass를 명세 상태(애트리뷰트, 관계)(state inheritance) 상속 및 행태 상속(behavior inheritance)이 가능
클래스 정의 예 extent : 한 클래스에 속하는 객체(인스턴스)들의 집합을 총칭 class Student ( extent Students key sno ) { struct Department { string dname, string location }; attribute integer sno; attribute string sname; attribute Department dept; relationship set <Course> take inverse Course:: enrol; } extent : 한 클래스에 속하는 객체(인스턴스)들의 집합을 총칭
클래스 정의 예 Course 클래스의 정의 class Course ( extent Courses key cno ) { attribute string cno; attribute string cname; attribute string professor; attribute integer credit; relationship set <Student> enrol inverse Student:: take; float noOfStudents(); } Course 클래스의 서브클래스로 SeminarCourse 정의 class SeminarCourse extends Course ( extent SeminarCourses ) { attribute integer maxAttendees; }
▶ 익스텐트의 set/subset relationship class Course ( extent Courses key cno ) { attribute string cno; ……………. } class SeminarCourse extends Course ( extent SeminarCourses ) { attribute integer maxAttendees; } 익스텐트 SeminarCourses에 속하는 객체 집합은 반드시 익스텐트 Courses에 속하는 객체 집합의 부분집합이 됨.
▶ OQL(Object Query Language) ODMG 객체 모델을 지원하는 객체 질의어 SQL을 기반으로 객체 개념을 확장 예제 SELECT S.sno FROM Students S WHERE S.sname = ‘홍길동’ * From 절의 Students는 Student 클래스의 extent로 객체 집단을 표시 * 질의의 대상은 클래스의 객체 집단인 extent임 * extent의 객체는 반복 변수(iterator variable)로 반복적으로 접근 객체 집단 반복 변수
▶ OQL (2) 예제 수강생 수가 20명 미만인 과목을 수강하는 학생의이름 (student_name), 소속학과명(department), 과목명(course_name)을 검색하라. SELECT student_name: S.sname, department: S.dept.dname, course_name: C.cname FROM Students S, S.take C WHERE C.noOfStudents() < 20 S.take C는 현재 바인딩된 S가 수강(take)하는 Course(C)를 바인딩 경로식(path expression): S.dept.dname 결과 필드 이름 참조 연산: SQL의 JOIN과 비슷
▶ OQL (3) 예제 SELECT creditno: C.credit avgNum: AVG( SELECT P.C.noOfStudents() FROM partition P ) FROM Courses C GROUP BY C.credit * partition은 GROUP BY 결과로 만들어진 그룹들을 나타냄 * p는 반복 변수
▶ OQL (4) 예제 avgNum: AVG( SELECT P.C.noOfStudents() FROM partition P ) SELECT low, high, avgNum: AVG( SELECT P.C.noOfStudents() FROM partition P ) FROM Courses C GROUP BY low: C.credit < 3, high: C.credit >= 3 * 2개의 투플을 결과로 생성 * GROUP BY 는 low, high 두 그룹을 생성하고 partition이 이들을 표현 *SELECT 절의 low와 high는 불리언 변수가 되어 noOfStudent()가 실행하는 그룹에 따라 True나 False를 출력 시킴
▶ OQL (5) 예제 * ORDER BY 절로 내림차 순으로 정렬된 원소는 인덱스 0, 1, 2, .. 등으로 접근 ( SELECT C.cname FROM Courses C ORDER BY C.noOfStudents() DESC ) [0:4] * ORDER BY 절로 내림차 순으로 정렬된 원소는 인덱스 0, 1, 2, .. 등으로 접근 * 인덱스 0에서 4까지 상위 5개의 과목 이름만 검색