다중 키 화일
하나의 데이터 화일에 여러 종류의 상이한 탐색 키를 이용한 여러 개의 접근 경로를 제공
탐색 키는 기본 키(primary key)와 보조 키(secondary key)로 구분
- 기본 키 : 하나의 레코드를 식별
- 보조 키 : 기본적으로 여러 개의 레코드를 식별
복수 접근을 지원하는 방법
1. 데이터 중복을 이용하여 여러 개의 동일한 내용의 화일을 제공
- 각 응용의 접근 요구에 맞는 화일을 개별적으로 구성
- 같은 내용의 데이터를 중복 저장함으로써 공간의 낭비
- 데이터 일관성 유지가 곤란
- 데이터 모순성으로 인한 데이터 유효성 문제 발생
- 데이터 무결성에 손상
2. 하나의 화일에 복수의 접근 경로를 지원하는 시스템이 다중 키 화일
- 접근 경로는 기본적으로 인덱스로 구축 : 이원 탐색 트리 / B-트리 / B+트리
- 인덱스와 레코드 사이의 리스트를 이용하여 구축 : 역 화일 / 다중리스트 화일
역 화일
역 화일 구조
- 기본적으로 인덱스를 이용하는 구조
- 원리는 도치(역)
- 인덱스 값으로 데이터 레코드 화일을 전도(도치)
역 인덱스
- 데이터 화일에 있는 인덱스 키 값을 인덱스 엔트리로 모두 포함
그 인덱스 키 값을 가지고 있는 모든 레코드들에 대한 포인터를 포함 - 인덱스 엔트리 : <인덱스 키 값, 레코드 포인터>
- DBMS의 물리적 데이터베이스 구조에 많이 이용됨
학생 데이터 화일을 “주민 번호” 필드를 인덱스 키로 도치시키면 오른쪽과 같은 역 인덱스가 된다.
-> 인덱스를 1차원으로 정렬시킨다. 장점 : 이원 탐색 기법을 사용할 수 있다.
이원 탐색:O (logN) / 순차 탐색:O(N/2)
- 역 인덱스의 정렬된 키의 순서와 레코드 순서는 반드시 일치하지 않음
- 데이터 화일에 레코드가 삽입되면 역 인덱스도 갱신
- 화일 관리 비용이 많이 든다.
- 인덱스 구조를 트리와 같은 동적 구조로 구성 -> 검색 시간이 빠름, 삽입/삭제 처리는 복잡해진다.
- 보통 인덱스 된 순차 화일이나 직접 화일 위에 구성
- 예시 : 학번을 기본 키로 하는 인덱스된 순차 화일에서 주민 번호로 역 인덱스를 구성하면
-> 학번, 주민 번호로 직접 접근 가능, 학번으로 순차 접근 가능,
‘주민 번호’로도 순차 접근이 가능하게 하려면 비용이 많이 든다. (역 인덱스에서 키 엔트리를 정렬)
역(inversion)의 본질
- 데이터 화일에서 인덱스 키 값을 제거하여 역 인덱스 엔트리에 위치
- 데이터 화일에는 인덱스 키 필드가 제거
- 일반적으로 인덱스 키 필드를 제거하지 않고 역 인덱스를 구성
완전 역 화일
- 데이터 레코드의 모든 필드에 대해 역 인덱스 구축
- 데이터 레코드 화일은 논리적으로 존재할 수 없다.
부분 역 화일
- 몇 개의 주요 필드에 대해서만 역 인덱스를 구성
만약 역 인덱스의 키 값을 데이터 레코드에서 제외했을 때는?
- 학번(기본 키)이 3358인 학생의 주민 번호(역 인덱스)는?
- 주민 번호는 역 인덱스에만 있고 이 역 인덱스와 데이터 화일은 레코드 주소로 연결되어 있음
- 데이터 화일에서 학번 3358로 학생 레코드의 주소를 직접 검색
- 주민 번호 역 인덱스에서 이 레코드 주소를 포함하고 있는 인덱스 엔트리를 탐색하여 주민 번호를 찾음 (순차 탐색으로 비효율적)
- 기본 키 : 유일 식별, 물리적 순서를 결정
- 보조 키 : 레코드 접근을 위한 필드
=> 대안 : 간접 주소 기법을 이용 / 역 인덱스의 엔트리를 <인덱스 키, 기본 키>로 구성
인덱스 엔트리에 복수의 포인터를 포함시키는 구현
- 가변 길이 인덱스 엔트리로 관리
- 고정 길이 인덱스 엔트리로 관리 : 최대 수의 기본 키 값을 수용할 수 있는 공간을 할당
- 인덱스 엔트리를 중복시켜 관리 : 역 인덱스의 엔트리는 <인덱스 키 값, 하나의 기본 키>로만 구성
복수의 포인터(기본 키)를 정렬시켜 유지하면 레코드 검색은 신속, 하지만 레코드 갱신 시 추가 부담
역 화일의 응용 : 인덱스만으로 질의가 처리 가능
- 주민 번호가 1036432인 학생이 있는가?
- 컴퓨터공학과에는 몇 명의 학생이 있는가?
- 기계과에 속하는 학생의 학번을 나열하라
- 주민 번호가 1032589인 학생의 학번은 무엇인가?
역 화일의 연산 : 데이터 파일과 역 인덱스 파일을 포함해야 하므로 고비용이다.
- 레코드의 삽입
- 기본 데이터 레코드 화일에 새 레코드 삽입함과 동시에 모든 역 인덱스 화일을 수정한다. - 인덱스 엔트리로 삽입하거나 레코드 포인터만 첨가 - 레코드의 삭제
- 기본 데이터 레코드 화일에서 원하는 레코드를 삭제시킨 뒤에 그 레코드가 참여하고 있는 모든 역 인덱스에서
삭제 연산을 수행, 포인터를 삭제하고 공백이 되면 인덱스 엔트리를 제거 - 레코드의 갱신
- 기본 데이터 레코드 화일에서 해당 레코드의 갱신 작업을 마친 뒤
영향을 받는 모든 역 인덱스 화일에 대한 삽입과 삭제 연산을 적절히 수행한다.
다중 리스트 화일
기본 개념
- 인덱스와 기본 데이터 화일을 연결하는 방법
- 현재 많은 상용 DBMS의 물리적 DB 구조의 기초
- 기본 데이터 레코드 화일과 각 보조 키에 대해, 하나의 다중 리스트 인덱스 화일로 구성
역 인덱스와 다중 리스트 인덱스의 차이점
- 역 인덱스 : <인덱스 키 값, 그 키 값을 가진 모든 레코드들에 대한 포인터>
- 인덱스 엔트리 : 여러 개의 포인터 값을 갖는 가변 길이 - 다중 리스트 인덱스 : <인덱스 키 값, 이 키 값을 가진 첫 번째 레코드에 대한 포인터>
- 나머지 레코드는 기본 데이터 레코드 화일에서 하나의 연결리스트로 유지
- 각 리스트의 헤드만 유지하는 디렉터리 역할
- 인덱스 엔트리는 하나의 포인터 값만 갖는 고정 길이
역 화일에서는 역 인덱스를 구성하더라도 데이터 레코드 화일 구조 자체에는 영향을 주지 않았다. 다중 리스트 화일 구조에서는 다중 리스트 인덱스를 구성하면 화일의 구조도 변경되어야 한다. 기본 데이터 레코드 화일은 각 다중 리스트 인덱스 키 값에 따라 접근할 수 있게 연결리스트를 구현할 링크 필드가 추가되어야 한다.
다중 리스트 인덱스 설계 시의 고려 사항
- 인덱스 키 값들은 정렬할 것인가?
- 인덱스의 구성 방법(구조)은?
- 주소법 : 직접 혹은 간접?
- 리스트의 데이터 레코드(노드)의 정렬 여부
레코드의 검색
질의 유형의 예시
- 컴퓨터공학과에는 몇 명의 학생이 있는가?
- 컴퓨터공학과에 속한 학생들의 학번을 모두 검색하라. 3. 학번이 6861인 학생의 학과가 컴퓨터공학과인가?
질의 처리 과정
- 역 화일은 인덱스만 접근해도 가능
- 다중 리스트 화일은 데이터 레코드에 접근을 해야 한다. (아니면 인덱스 엔트리에 리스트 길이 정보를 추가)
- 다중 리스트 인덱스 엔트리의 변형 : <인덱스 키 값, 첫 번째 레코드의 포인터, 리스트 길이>
리스트 길이 정보의 활용
- 특정 유형의 질의에 최적 접근 경로 선정 시 이용
- 질의 : 입학년도=01, 학과=컴퓨터 인 학생의 이름을 검색하라.
- 1. 학생 데이터 화일의 순차적 탐색 : 20개의 레코드에 대한 접근 필요
- 2. 학과 다중 리스트 인덱스 사용 : 4개의 데이터 레코드에 대한 접근 필요
- 3. 입학년도 다중 리스트 인덱스 사용 : 7개 데이터 레코드에 대한 접근 필요
=> 2번을 최적 방법으로 선택
=> 학과=컴퓨터 인 4개의 레코드를 접근하고 입학년도 필드를 검사하여 이름 검색 가능
레코드의 삽입
- 데이터 화일에 새 레코드를 삽입
- 다중 리스트 인덱스 필드를 전부 참조해서 데이터 레코드 화일의 연결리스트에 연결
- 레코드 키 값이 인덱스 엔트리에 없으면 새 인덱스 엔트리로 삽입
레코드의 삭제
- 데이터 화일에서 레코드 삭제
- 모든 다중 리스트 인덱스의 연결리스트에서 삭제
- 리스트 인덱스에서 유일한 멤버이면 인덱스 엔트리를 삭제
- 리스트 인덱스의 첫 번째 레코드가 삭제된 경우, 두 번째 레코드를 인덱스 엔트리 포인터에 연결
레코드의 갱신
- 데이터 화일과 다중 인덱스 리스트의 변경 초래
- 갱신되는 레코드가 다중 인덱스의 첫 번째 레코드인 경우, 다중 리스트 인덱스의 삭제나 변경이 필요
다중 리스트의 구현 방법
- 단순 연결 (원형) 리스트
- 이중 연결 (원형) 리스트
역 화일과 다중 리스트 화일의 비교
공통점
- 원하는 레코드 필드에 대해 인덱스를 유지
- 인덱스는 테이블이나 트리 형태로 구성
- 인덱스 엔트리들을 정렬 가능
- 데이터 레코드의 접근법은 직접/간접 주소법을 사용
차이점
'File Processing [FP]' 카테고리의 다른 글
[FP] 10. 다차원 공간 화일 (1) | 2024.01.24 |
---|---|
[FP] 08. 직접 화일 (1) | 2024.01.23 |
[FP] 07. 인덱스된 순차 화일 (2) | 2024.01.23 |
[FP] 06. 인덱스 구조 (2) | 2024.01.23 |
[FP] 05. 화일의 정렬/합병 (0) | 2024.01.22 |