Presentation is loading. Please wait.

Presentation is loading. Please wait.

9.다중 키 화일.

Similar presentations


Presentation on theme: "9.다중 키 화일."— Presentation transcript:

1 9.다중 키 화일

2  다중 키 화일(multikey file)의 개념
하나의 데이타 화일에 여러 종류의 상이한 탐색 키(search key)를 이용한 여러 개의 접근 경로 (access path)를 제공 탐색 키는 기본 키 (primary key)와 보조 키(secondary key)로 구분 기본 키(primary key): 하나의 레코드를 식별 보조 키(secondary key): 기본적으로 여러 개의 레코드를 식별 (예) 학생 레코드 구조 탐색 키 : 학번, 이름, 학과, 입학 년도, 지도 교수 학번 이름 학과 주민 등록 번호 입학 년도 지도 교수 주소

3 ▶ 화일의 복수 접근 경로 복수 접근을 지원하는 방법 데이타 중복(data duplication)을 이용하여 여러 개 동일한
▶ 화일의 복수 접근 경로 복수 접근을 지원하는 방법 데이타 중복(data duplication)을 이용하여 여러 개 동일한 내용의 화일을 제공 각 응용의 접근 요구에 맞는 화일을 개별적으로 구성 같은 내용의 데이타를 중복 저장함으로써 공간의 낭비 데이타 일관성(data consistency) 유지가 곤란 데이타 모순성(data inconsistency)으로 인한 데이타 유효성(data validity) 문제 발생 데이타 무결성(data integrity)에 손상 하나의 화일에 복수의 접근 경로(access path)를 지원하는 시스템이 다중키 화일 접근 경로는 기본적으로 인덱스로 구축 이원 탐색 트리, B-트리, B+-트리 인덱스와 레코드 사이의 리스트를 이용하여 구축 역 화일(inverted file) 다중리스트 화일(multilist file)

4  역 화일(inverted file) 역 화일 구조 역 인덱스(inverted index) 기본적으로 인덱스를 이용하는 구조
원리는 도치 즉 역(inversion) 인덱스 값으로 데이타 레코드 화일을 전도(도치) 역 인덱스(inverted index) 데이타 화일에 있는 인덱스 키 값을 인덱스 엔트리로 모두 포함. 각 엔트리는 그 인덱스 키 값을 가지고 있는 모든 레코드들에 대한 포인터를 포함 인덱스 엔트리 = <인덱스 키 값, 레코드 포인터> DBMS의 물리적 데이타베이스 구조에 많이 이용됨

5 ▶ 학생 데이타 화일 레코드 주소 학번 이름 학과 주민번호 입학 년도 지도교수 주소 1 2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19 20 1111 1121 1981 2014 2083 2918 3025 3112 3241 3358 3826 3874 4156 4862 5133 5342 5357 6412 6861 6945 이정진유근택이상수김성준용기환문용길나수영이상철황수관한재식이병찬홍병수송성헌김철수김연주유광석황시영이인기이규재안경화 컴퓨터기  계전  자컴퓨터기  계자  원화  공컴퓨터토  목전  자항  공항  공전  기전  자기  계토  목토  목전  자컴퓨터화  공 01 02 03 04

6 ▶ 레코드 주소를 이용한 주민번호 역 인덱스 주민번호 레코드 주소 1000611 1032436 1032589 1036432
111524 10 1 4 6 16 8 13 12 15 2 19 5 14 7 18 11 9 20 17 3

7 ▶ 역 인덱스의 구성 인덱스(주민번호)를 1차원으로 정렬시켜 유지하는 경우
이원 탐색 기법을 사용할 수 있음 이원 탐색 : O(log N), 순차 탐색 : O(N/2) 역 인덱스의 정렬된 키의 순서와 레코드 순서는 반드시 일치하지 않음 데이타 화일에 레코드가 삽입되면 역 인덱스도 갱신 화일 관리 비용이 많이 듬 인덱스 구조를 트리와 같은 동적 구조로 구성 검색 시간이 빠름 삽입이나 삭제는 처리가 복잡 보통 인덱스 된 순차 화일이나 직접 화일 위에 구성 학번을 기본 키로 하는 인덱스된 순차 화일에서 주민번호로 역 인덱스 구성 학번, 주민번호로 직접 접근이 가능하고, 학번으로 순차 접근이 가능 주민 번호에 의한 순차 접근도 지원하기 위해서는 비용이 많이 듦

8 ▶ 역 화일의 종류 역(inversion)의 본질 역 인덱스가 만들어지는 수에 따라
데이타 화일에서 인덱스 키 값을 제거하여 역 인덱스 엔트리에 위치 데이타 화일에는 인덱스 키 필드가 제거 일반적으로 인덱스 키 필드를 제거하지 않고 역 인덱스를 구성 역 인덱스가 만들어지는 수에 따라 완전 역 화일 (completely inverted file) 데이타 레코드의 모든 필드에 대해 역 인덱스 구축 데이타 레코드 화일은 논리적으로 존재할 수 없음 2. 부분 역 화일 (partially inverted file) 몇 개의 주요 필드에 대해서만 역 인덱스를 구성

9 ▶ 효율적인 역 인덱스 구성 역 인덱스의 키 값을 데이타 레코드에서 제외했을 때 키 대안
질의문: "학번(기본 키)이 3358인 학생의 주민번호는 ?“ 가정: 주민번호는 역 인덱스에만 있고 이 역 인덱스와 데이타 화일은 레코드 주소로 연결되어 있음 처리: ① 데이타 화일에서 학번 3358로 학생 레코드의 주소를 직접 검색 ② 주민번호 역 인덱스에서 이 레코드 주소를 포함하고 있는 인덱스 엔트리를 탐색하여 주민번호를 찾음 순차 탐색으로 검색이 비 효율적임 기본 키 (primary key) : 유일 식별, 물리적 순서를 결정 보조 키 (secondary key) : 레코드 접근을 위한 필드 대안 간접 주소 기법을 이용 역 인덱스 엔트리 = <인덱스 키, 기본 키>

10 ▶ 기본 키(학번)를 이용한 주민번호 역 인덱스
(장점) 데이타 화일의 물리적 재구성 또는 재조직이 가능 → 역 인덱스 화일에 영향 없음 주민번호 학번(기본 키) 111524 3358 1111 2014 2918 5342 3112 4156 3874 5133 1121 6861 2083 4862 3025 6412 3826 3241 6945 5357 1981

11 ▶ 보조 키에 대한 역 인덱스 학과에 대한 역 인덱스 역 인덱스 설계의 문제점 인덱스는 어떻게 구성할 것인가?
주소 기법(직접/간접)은? 인덱스 키 값 엔트리(학번)들을 정렬할 것인가? 학 과 학 번 기 계 자 원 전 기 전 자 컴퓨터 토 목 항 공 화 공 1121, 2083, 5133   2918   4156   1981, 3358, 4862, 6412   1111, 2014, 3112, 6861   3241, 5342, 5357   3826, 3874   3025,

12 ▶ 인덱스 엔트리에 복수의 포인터를 포함시키는 구현
▶ 인덱스 엔트리에 복수의 포인터를 포함시키는 구현 ① 가변 길이 인덱스 엔트리로 관리 ② 고정길이 인덱스 엔트리로 관리 - 최대 수의 기본 키 값을 수용할 수 있는 공간을 할당 ③ 인덱스 엔트리를 중복시켜 관리 -역 인덱스의 엔트리는 <인덱스 키 값, 하나의 기본 키> 로만 구성 복수의 포인터(기본 키)을 정렬시켜 유지하면 레코드 검색은 신속하나, 레코드 갱신 시 추가 부담 역 화일의 응용: 인덱스만으로 질의 처리가 가능 ①주민번호가 인 학생이 있는가 ? ② 컴퓨터공학과에는 몇 명의 학생이 있는가 ? ③ 기계과에 속하는 학생의 학번들을 나열하라. ④주민번호가 인 학생의 학번은 무엇인가 ?

13 ▶ 역 화일의 연산 역 화일의 연산 레코드의 삽입 레코드의 삭제 레코드의 갱신 데이타 화일 : 레코드 삽입
데이타 화일과 역 인덱스 화일을 포함해야 되므로 고 비용 레코드의 삽입 데이타 화일 : 레코드 삽입 모든 역 인덱스 화일을 수정 인덱스 엔트리로 삽입하거나 레코드 포인터만 첨가 레코드의 삭제 데이타 화일 : 레코드 삭제 포인터를 삭제하고 공백이 되면 인덱스 엔트리를 제거 레코드의 갱신 데이타 화일에서 레코드 갱신 갱신 영향을 받은 모든 역 인덱스 화일에 삽입, 삭제 연산을 수행

14  다중 리스트 화일(multilist file)
인덱스와 기본 데이타 화일을 연결하는 방법 현재 많은 상용 DBMS의 물리적 DB 구조의 기초 기본 데이타 레코드 화일과 각 보조 키에 대해 하나의 다중 리스트 인덱스 화일(multilist index file)로 구성 역 인덱스와 다중 리스트 인덱스의 차이점 역 인덱스 <인덱스 키 값, 그 키 값을 가진 모든 레코드들에 대한 포인터> 인덱스 엔트리 : 여러 개의 포인터 값을 갖는 가변길이 다중 리스트 인덱스 <인덱스 키 값, 이 키 값을 가진 첫 번째 레코드에 대한 포인터> 나머지 레코드는 기본 데이타 레코드 화일에서 하나의 연결 리스트로 유지 각 리스트의 헤드만 유지하는 디렉터리 역할 인덱스 엔트리는 하나의 포인터 값만을 갖는 고정길이

15 ▶ 다중리스트 화일의 구조 다중 리스트 인덱스

16 ▶ 다중 리스트 화일의 구조 역 화일 다중 리스트 화일 역 인덱스를 구성하더라도 데이타 화일 구조에는 영향 없음
다중 리스트 인덱스의 구성은 데이타 화일 구조의 변경이 필요 데이타 화일에는 인덱스 리스트 구축을 위한 링크 필드가 추가되어야 함 데이타 레코드의 링크 필드의 수 = 다중 리스트 인덱스 수 인덱스 엔트리는 하나의 포인터 값만 포함하는 고정길이

17 ▶ 학과, 입학년도에 대한 다중 리스트 인덱스 학 과 학 번 기 계 자 원 전 기 전 자 컴 퓨 터 토 목 항 공 화 공
학과에 대한 다중 리스트 인덱스 학 과 학 번 기 계 자 원 전 기 전 자 컴 퓨 터 토 목 항 공 화 공 1121 2918 4156 1981 1111 3241 3826 3025 ► 입학 년도에 대한 다중 리스트 인덱스 입학 년도 학 번 01 02 03 04 1111 1121 1981 5133

18 ▶ 학과, 입학년도, 다중리스트에 대한 학생 데이타 화일

19 ▶ 다중리스트 화일의 구조 데이타 레코드 구조 다중 리스트 인덱스 설계 시의 고려 사항 인덱스 키 값들을 정렬할 것인가?
인덱스의 구성 방법(구조)은? 주소법 : 직접/간접? 리스트의 데이타 레코드(노드)의 정렬 여부 다중 리스트 인덱스 필드 1 링크 필드 1 인덱스 필드 2 링크 필드 2

20 ▶ 레코드의 검색 과정 질의 유형의 예 ① 컴퓨터공학과에는 몇 명의 학생이 있는가 ?
② 컴퓨터공학과에 속한 학생의 학번을 모두 검색하라. ③ 학번이 6861인 학생의 학과가 컴퓨터 공학과인가 ? 질의 처리 과정 역 화일은 인덱스만 접근해도 가능 다중리스트는 데이타 레코드를 접근해야 가능 (대안) 인덱스 엔트리에 리스트 길이 정보를 추가 다중 리스트 인덱스 엔트리의 변형 인덱스 엔트리 = <인덱스 키 값, 첫번째 레코드의 포인터, 리스트 길이>

21 ▶ 학과에 대한 다중리스트 인덱스 학 과 학 번 길 이 기 계 자 원 전 기 전 자 컴 퓨 터 토 목 항 공 화 공 1121
기 계 자 원 전 기 전 자 컴 퓨 터 토 목 항 공 화 공 1121 2918 4156 1981 1111 3241 3826 3025 3 1 4 2

22 ▶ 입학 년도에 대한 다중 리스트 인덱스 입학 년도 학 번 길 이 01 02 03 04 1111 1121 1981 5133 7

23 ▶ 리스트 길이 정보의 활용 특정 유형의 질의에 대한 최적 접근 경로 선정 시 이용
질의: "입학년도 = 01 이고 학과 = 컴퓨터인 학생의 이름을 검색하라" 3 가지 처리 방법 ① 학생 데이타 화일의 순차적 탐색 20개의 레코드에 대한 접근이 필요 ② 학과 다중 리스트 인덱스 사용 4개의 데이타 레코드에 대한 접근이 필요 ③ 입학년도 다중 리스트 인덱스 사용 7개의 데이타 레코드에 대한 접근이 필요 최적인 방법으로 ②를 선택 왜냐하면 학과 = 컴퓨터인 4 개의 레코드를 접근하고 입학년도 필드를 검사해서 이름을 검색할 수 있음

24 ▶ 다중 리스트 화일의 연산 (1) 레코드의 삽입 레코드의 삭제 데이타 화일에 새 레코드를 삽입
다중 리스트 인덱스 필드를 전부 참조해서 데이타 레코드 화일의 연결 리스트에 연결 레코드 키 값이 인덱스 엔트리에 없으면 새 인덱스 엔트리로 삽입 레코드의 삭제 데이타 화일에서 레코드 삭제 모든 다중 리스트 인덱스의 연결 리스트에서 삭제 리스트 인덱스에서 유일한 멤버이면 인덱스 엔트리를 삭제 리스트 인덱스의 첫 번째 레코드가 삭제된 경우에는 두 번째 레코드를 인덱스 엔트리 포인터에 연결 (예) “이정진” 학생을 삭제할 때 : 학과, 입학년도를 연결 리스트에서 삭제, 인덱스의 링크 변경

25 ▶ 다중 리스트 화일의 연산 (2) 레코드의 갱신 다중 리스트의 구현 방법 데이타 화일과 다중 인덱스 리스트의 변경 초래
갱신되는 레코드가 다중 리스트 인덱스의 첫 번째 레코드인 경우에는 다중 리스트 인덱스가 삭제되거나 변경 필요 다중 리스트의 구현 방법 단순 연결 (원형) 리스트(singly linked (circular) list) 이중 연결(원형) 리스트 (doubly linked (circular) list)

26  역 화일과 다중 리스트 화일의 비교 공통점 차 이 점 역 인덱스 다중 리스트 인덱스 인덱스 엔트리
원하는 레코드 필드에 대해 인덱스를 유지 인덱스는 테이블이나 트리 형태 로 구성 인덱스 엔트리들을 정렬 가능 데이타 레코드의 접근법은 직접/간접 주소법을 사용 차 이 점 역 인덱스 다중 리스트 인덱스 인덱스 엔트리 해당 레코드들의 모든 포인터를 포함 첫 번째 레코드 포인터만 포함 나머지 레코드는 연결 리스트 엔트리 길이 가변 길이 고정 길이 정 렬 오버헤드 데이타 화일 구조 영향 없음 링크 필드들이 추가로 확장 질의와 구조 유지 •질의 처리 능력 우월 (역 인덱스만의 접근 으로 응답 가능) • 인덱스를 사용하지 않는 프로그래머에게 투명(인덱스 존재를 몰라도 됨) • 인덱스 관리가 용이 (고정 길이 엔트리) • 링크 필드에 대한 투명성 보장을 위해 데이타 관리자의 별도 작업이 필요 • 한 화일에 상이한 정렬 순서 지원이 가능


Download ppt "9.다중 키 화일."

Similar presentations


Ads by Google