반응형

CS/DB 24

[DB] 회복

개요 트랜잭션이 버퍼에는 갱신 사항을 반영했지만, 버퍼의 내용이 디스크에 기록되기 전에 고장이 발생할 수 있다. 고장이 발생하기 전에 트랜잭션이 완료 명령을 수행했다면 회복 모듈은 이 트랜잭션의 갱신 사항을 재수행(REDO)하여 트랜잭션의 갱신이 지속성을 갖도록 해야 한다. 고장이 발생하기 전에 트랜잭션이 완료 명령을 수행하지 못했다면 원자성을 보장하기 위해서 이 트랜잭션이 데이터베이스에 반영했을 가능성이 있는 갱신 사항을 취소(UNDO)해야 한다. 저장 장치의 유형 주기억 장치와 같은 휘발성 저장 장치에 들어 있는 내용은 시스템이 다운된 후에 모두 사라진다. 디스크와 같은 비휘발성 저장 장치에 들어 있는 내용은 디스크 헤드 등이 손상을 입지 않는 한, 시스템이 다운된 후에도 유지된다. 안전 저장 장치는..

CS/DB 2022.06.15

[DB] 동시성 제어

개요 대부분의 DBMS들은 다수 사용자용이기 때문에, 여러 사용자들이 동시에 동일한 테이블을 접근하기도 한다. DBMS의 성능을 높이기 위해서는 여러 사용자의 질의나 프로그램들을 동시에 수행하는 것이 필수적이다. 동시성 제어 기법은 여러 사용자들이 다수의 트랜잭션들을 동시에 수행하는 환경에서 부정확한 결과를 생성할 수 있는, 트랜잭션들 간의 간섭이 생기지 않도록 한다. 종류 직렬 스케줄(Serial schedule) 여러 트랜잭션들의 집합을 한 번에 한 트랜잭션씩 차례대로 수행한다. 비직렬 스케줄(Non-serial schedule) 여러 트랜잭션들을 동시에 수행한다. 직렬 가능(Serializable) 비직렬 스케줄의 결과가 어떤 직렬 스케줄의 수행 결과와 동등할 때를 말한다. 데이터베이스 연산 Inp..

CS/DB 2022.06.14

[DB] 시스템 카탈로그

시스템 카탈로그 개요 데이터베이스의 객체(사용자, 릴레이션, 뷰, 인덱스, 권한 등)와 구조들에 대한 모든 데이터를 포함한다. 메타데이터라고도 한다. 메타데이터는 데이터에 대한 데이터라는 의미이다. 시스템 카탈로그는 사용자 및 질의 최적화 모듈 등 DBMS 자신의 구성요소에 의해서 결정된다. 시스템 카탈로그는 관계 DBMS마다 표준화되어 있지 않아서 관계 DBMS마다 서로 다른 형태로 시스템 카탈로그 기능을 제공한다. 시스템 카탈로그는 데이터 사전(data dictionary) 또는 시스템 테이블이라고도 부른다. 질의 처리에서의 시스템 카탈로그 SELECT 문이 문법적으로 정확한가를 검사한다. SELECT 문에서 참조하는 EMPLOYEE 릴레이션이 데이터베이스에 존재하는가를 검사한다. EMPLOYEE 릴..

CS/DB 2022.06.09

[DB] 뷰

뷰의 개요 ANSI/SPARC 3단계 아키텍처에서 외뷰 뷰는 특정 사용자가 보는 데이터베이스 구조를 의미했다. 관계 데이터베이스에서의 뷰는 한 사용자의 전체 외뷰 뷰 대신에 하나의 가상 릴레이션을 의미한다. 뷰는 기존의 기본 릴레이션에 대한 SELECT문의 형태로 정의된다. 사용자는 여러 개의 릴레이션과 뷰를 사용할 수 있다. 뷰는 릴레이션으로부터 데이터를 검색하거나 갱신할 수 있는 동적인 창의 역할을 한다. 스냅샷 스냅샷이란, 어느 시점에 SELECT문의 결과를 기본 릴레이션의 형태로 저장해 놓은 것이다. 스냅샷은 사진을 찍은 것과 같아서 스냅샷을 정의하는 시점의 기본 릴레이션의 내용이 스냅샷에 반영된다. 어떤 시점의 조직체의 현황, 예를 들어 몇년 몇월 시점에 근무하던 사원들의 정보, 재고 정보 등이..

CS/DB 2022.06.07

[DB] 정규화와 역정규화

제 1정규형 한 릴레이션 R이 제 1정규형을 만족할 필요충분조건은 릴레이션 R의 모든 애트리뷰트가 원자값만을 갖는다는 것이다. 릴레이션의 모든 애트리뷰트에 반복 그룹이 나타나지 않으면 제 1정규형을 만족한다. 제 1정규형을 만족하지 않은 릴레이션을 제 1정규형으로 변환하는 방법 반복 그룹 애트리뷰트에 나타나는 집합에 속한 값마다 하나의 튜플로 표현한다. 또는 모든 반복 그룹 애트리뷰트들을 분리해서 새로운 릴레이션에 넣는다. 원래 릴레이션의 기본 키를 새로운 릴레이션에 애트리뷰트로 추가한다. 제 1정규형에 존재하는 갱신 이상 밑의 릴레이션은 모든 애트리뷰트가 원자값을 가지므로 제 1정규형을 만족한다. 이 릴레이션의 키는 (학번, 과목번호)이다. 수정 이상 한 학과에 소속된 학생 수만큼 그 학과의 전화번호가..

CS/DB 2022.05.28

[DB] 릴레이션 분해

릴레이션 분해 개요 릴레이션 분해란, 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것이다. 릴레이션을 분해하면 중복이 감소되고 갱신 이상이 줄어드는 장점이 있는 반면에, 바람직하지 않은 문제들을 포함하여 몇 가지 잠재적인 문제들을 야기할 수 있다. 첫 번째, 릴레이션이 분해되기 전에는 조인이 필요 없던 질의가 분해 후에는 조인을 필요로 하는 질의로 바뀔 수 있다. 두 번째, 분해된 릴레이션들을 사용하여 원래 릴레이션을 재구성하지 못할 수 있다. 무손실 분해(Lossless decomposition) 분해된 두 릴레이션을 조인하면, 원래의 릴레이션에 들어 있는 정보를 완전하게 얻을 수 있다. 여기서 손실이란 정보의 손실을 말한다. 정보의 손실은 원래의 릴레이션을 분해한 후에 생성된 릴레이션들을 조인..

CS/DB 2022.05.26

[DB] 함수적 종속성

함수적 종속성 개요 함수적 종속성은 정규화 이론의 핵심이다. 릴레이션의 애트리뷰트들의 의미로부터 결정된다. 릴레이션 스키마에 대한 주장이지, 릴레이션의 특정 인스턴스에 대한 주장이 아니다. 릴레이션의 가능한 모든 인스턴스들이 만족해야 한다. 실세계에 대한 지식과 응용의 의미를 기반으로 어떤 함수적 종속성들이 존재하는가를 파악해야 한다. 함수적 종속성은 제2정규형부터 BCNF까지 적용된다. 결정자 어떤 애트리뷰트의 값은 다른 애트리뷰트의 값을 고유하게 결정할 수 있다. 사원 릴레이션에서 사원번호는 사원 이름을 고유하게 결정한다. 주소는 사원 이름을 고유하게 결정하지 못한다. 결정자는 주어진 릴레이션에서 다른 애트리뷰트(또는 애트리뷰트들의 집합)를 고유하게 결정하는 하나 이상의 애트리뷰트를 의미한다. 결정자..

CS/DB 2022.05.26

[DB] 정규화 개요

릴레이션 정규화 부주의한 데이터베이스 설계는 제어할 수 없는 데이터 중복을 야기하여 여러 가지 갱신 이상을 유발한다. 어떻게 좋은 데이터베이스를 설계할 것인지, 데이터베이스에 어떤 릴레이션들을 생성할 것인지, 각 릴레이션에 어떤 애트리뷰트들을 둘 것인지 고민해야 한다. 정규화(Normalization)는 주어진 릴레이션 스키마를 함수적 종속성과 기본 키를 기반으로 분석하여, 원래의 릴레이션을 분해함으로써 중복과 세 가지 갱신 이상을 최소화한다. 좋은 관계 데이터베이스 스키마를 설계하는 목적 1. 정보의 중복과 갱신 이상이 생기지 않도록 한다. 2. 정보의 손실을 막는다. 3. 실세계를 훌륭하게 나타낸다. 4. 애트리뷰트들 간의 관계가 잘 표현되는 것을 보장한다. 5. 어떤 무결성 제약조건의 시행을 간단하..

CS/DB 2022.05.26

[DB] 다단계 인덱스

다단계 인덱스 인덱스 자체가 클 경우에는 인덱스를 탐색하는 시간도 오래 걸릴 수 있다. 인덱스 엔트리를 탐색하는 시간을 줄이기 위해서 단일 단계 인덱스를 디스크 상의 하나의 순서 화일로 간주하고, 단일 단계 인덱스에 대해서 다시 인덱스를 정의할 수 있다. 다단계 인덱스는 가장 상위 단계의 모든 인덱스 엔트리들이 한 블록에 들어갈 수 있을 때까지 이런 과정을 반복한다. 가장 상위 단계 인덱스를 마스터 인덱스 (master index)라고 부른다. 마스터 인덱스는 한 블록으로 이루어지기 때문에 주기억 장치에 상주할 수 있다. 대부분의 다단계 인덱스는 B+-트리를 사용한다 SQL의 인덱스 정의문 SQL의 CREATE TABLE문에서 PRIMARY KEY절로 명시한 애트리뷰트에 대해서는 DBMS가 자동적으로 기..

CS/DB 2022.05.20

[DB] 화일 조직

화일에는 다음과 같은 유형이 있다. 히프 화일 순차 화일 인덱스된 순차 화일 직접 화일 히프 화일 가장 단순한 화일 조직이다. 일반적으로 레코드들이 삽입된 순서대로 화일에 저장된다. 삽입 : 새로 삽입되는 레코드는 화일의 가장 끝에 첨부된다. 검색 : 원하는 레코드를 찾기 위해서는 모든 레코드들을 순차적으로 접근해야 함. 삭제 : 원하는 레코드를 찾은 후에 삭제한다. 삭제된 레코드가 차지하는 공간을 재사용하지는 않는다. 좋은 성능을 유지하기 위해 하프 화일을 주기적으로 재조직할 필요가 있다. 모든 레코드들을 참조하고, 레코드들을 접근하는 순서는 중요하지 않을 때 사용한다. (ex : SELECT 문) 특정 레코드를 검색할 때에는 비효율적 -> b개의 블록이 있다고 하면 평균적으로 b/2개의 블록을 읽어야..

CS/DB 2022.05.19
반응형