[대학교 교재 정리 - 데이터베이스 시스템(MC Graw Hill)] 데이터베이스 설계의 개요

2.1 데이터베이스 설계와 ER  다이어그램
데이터베이스 설계과정 여섯 단계
1. 요구분석
- 첫 단계는 데이터베이스에 무슨 정보를 저장할 것인가, 그 위에 어떤 응용을 구축할 것인가, 어떤 연산들이 가장 자주 수행되며 성능 요건은 무엇인가를 파악하는 일이다. 
2. 개념적 데이터베이스 설계
- 요구분석 단계에서 모은 정보들은 데이터베이스에 저장될 데이터와 이 데이터가 준수해야하는 제약조건들을 고수준으로 기술하기 위해 사용된다. 이 단계는 주로 ER 모델을 이용하여 수행된다.
3. 논리적 데이터베이스 설계
- 데이터베이스 설계를 구현하기 위해 DBMS를 선정하고, 개념적 데이터베이스 설계를 선정한 DBMS의 데이터 모델에 따른 데이터베이스 스키마로 변환해야 한다. 
4. 스키마 정제
- 관계 데이터베이스 스키마에 있는 릴레이션들을 분석하여 잠재적인 문제점들을 파악하고 정제하는 것이다.
5. 물리적 데이터베이스 설계
- 데이터베이스가 지원해야 할 일반적인 예상 작업량을 고려하여 데이터베이스 설계르 ㄹ원하는 성능기준에 맞도록 더 정제한다.
6. 응용 및 보안설계
- 응용 업무를 반영하는 모든 프로세스에서 각 개체의 역할을 그 업무를 위한 전체 작업 흐름의 일부로써 기술해야 한다.
- 각 역할별로, 접근될 수 있어야만 하는 데이터베이스 영역과 접근되어서는 안 되는 영역을 파악해야 한다.

2.2 개체, 애트리뷰트, 개체집합
개체(entity)는 실세계에서 다른 객체들로부터 구분될 수 있는 객체이다. 
객체들의 모임을 객체집합(entity set)이라고 한다.
하나의 개체는 애트리뷰트들(attributes)의 집합을 사용하여 기술된다.
주어진 개체집합에 속한 모든 개체들은 동일한 애트리뷰트들을 갖는다. 
개체집합과 관련한 각 애트리뷰트에 대해서, 가능한 값들의 도메인(domain)을 지정하여야 한다. 
각 개체집합에 대해서 키를 선택한다. 키는 주어진 집합에 속하는 한 개체를 유일하게 식별하는 값을 갖는 최소개의 애트리뷰트들로 이루어진 집합이다.
후보(candidate)키는 하나보다 더 많을 수 있는데, 그럴 경우에는 그들 중의 하나를 기본(primary)키로 지정한다. 

2.3 관계와 관계집합
관계(relationship)는 둘 이상의 개체들 사이의 관련성이다.
같은 종류의 관계들을 하나의 관계 집합(relationship set)으로 모을 수 있다.
관계도 기술적인 애트리뷰트들을 가질 수 있다. 
이 기술적인 애트리뷰트들은 참가하는 개체들 중 한 개체에 관한 정보보다는 관계에 관한 정보를 기록하기 위해 사용된다.
관계집합의 인스턴스는 관계들의 집합이다. 


2.4 ER 모델의 특별 기능
키 제약조건: 관계가 허용할 수 있는 인스턴스에서 각 개체는 많아야 하나의 관계에 나타난다는 것을 의미한다.
참여 제약조건: 관계집합에 개체집합의 참여는 전체적이라고 한다. 전체적이 아닌 참여도를 부분적이라고 한다. 
약개체: 애트리뷰트 일부와 식별 소유자에 해당하는 개체의 기본키를 결합하여야만 유일하게 식별될 수 있다.
- 소유자 개체집합과 약개체집합은 일-대-다 관계집합으로 참여해야 한다. 하나의 소유자 개체는 여러 약개체와 연관되지만, 각 약개체는 오직 하나의 소유자를 갖는다. 이러한 관계집합을 해당 약개체집합의 식별 관계집합(identifying relationship set)이라고 한다.
- 약개체집합은 식별 관계집하에 전체적으로 참여하여야 한다.
클래스 계층
- 특수화는 어떤 개체집합 슈퍼클래스에서 몇 개의 구별되는 특성을 공유하는 부분 집합을 식별하는 과정이다. 일반적으로, 슈퍼클래스가 먼저 정의되고, 서브클래스들이 다음으로 정의되며 서브 클래스 고유의 애트리뷰트들과 관계집합들이 그 다음으로 추가된다.
- 일반화는 여러 개체집합들의 모임에서 몇 개의 공통적인 특성들을 알아내고 이러한 공통 특성들을 가지는 개체들을 포함하는 새로운 개체집합을 생성하는 과정이다. 일반적으로, 서브클래스들이 먼저 정의되고, 슈퍼클래스가 다음에 정의되며 그 슈퍼클래스를 포함하는 관계집합이 있으면 그 다음에 정의된다.

 

[대학교 교재 정리 - 데이터베이스 시스템(MC Graw Hill)] DBMS의 구조

 사용자가 어떤 질의를 입력하면, 구문이 분석된 질의는 질의 최적화기(query optimizer)로 넘겨진다.

질의 최적화기는 그 질의를 계산하기 위한 효율적인 실행 계획을 수립하기 위해 데이터가 어떻게 저장되어 있는가에 관한 정보를 이용한다.

실행 계획(execution plan)은 질의를 계산하기 위한 청사진으로, 대개 관계 연산자들의 트리로 표현된다. 

파일과 접근 방법 계층의 코드는 버퍼 관리기 계층 위에 위치한다. 버퍼 관리기는 읽기 요청에 따라 필요한 대로 페이지들을 디스크로부터 주기억장치로 가져온다.

DBMS 소프트웨어의 최하층은 데이터가 저장되는 디스크상의 공간을 관리한다. 그 위의 계층들은 디스크 공간 관리기라고 불리는 이 계층을 통해서 페이지를 할당하고, 반납하고, 읽고, 기록한다.

DBMS는 사용자의 요청들을 신중하게 스케줄링하고 데이터베이스의 모든 변경에 대한 로그를 유지함으로써 동시성과 손상복구를 지원하다. 

트랜잭션 관리기는 트랜잭션들이 적당한 잠금 프로토콜에 의하여 잠금을 요청하고 해제하도록 하며 트랜잭션들의 수행을 계획한다. 

잠금 관리기는 데이터베이스 객체에 대한 잠금들의 요청을 관리하며 그들이 이용 가능할 때 잠귿ㅁ들을 허가한다. 

복구 관리기는 로그를 유지관리하고, 시스템 장애가 일어나 후 다시 시스템을 일관적인 상태로 복구하는 역할을 담당한다.

[대학교 교재 정리 - 데이터베이스 시스템(MC Graw Hill)] 1.7 트랜잭션 관리

트랜잭션은 DBMS에서 사용자 프로그램의 일회 실행(동일 프로그램을 여러 번 실행하는 것은 여러 개의 트랙잭션을 생성하게 된다)이다. 트랜잭션은 DBMS가 보는 변경의 기본 단위이다. 부분적으로 수행된 트랜잭션들은 허용되지 않으며, 한 그룹의 트랜잭션들의 효과는 모든 트랜잭션들이 어떤 직렬 순서에 따라 수행한 효과와 동등하다. 


트랜잭션들의 동시 수행

- DBMS의 중요한 임무 중 하나는 다른 사람들이 동일한 데이터를 동시에 접근하고 있다는 사실을 아무 지장 없이 무시할 수 있도록 데이터의 동시접근을 계획하는 것이다. 

DBMS는 사용자들로 하여금 그들의 프로그램들이 DBMS에 의해 선택된 어떤 순서에 입각하여 차례대로 고립되어 실행하는 것처럼 생각하게 한다.

잠금 프로토콜(locking protocol)은 여러 트랜잭션들의 연산들이 인터리브하더라도, 실제 효과는 어떤 직렬 순서에 따라 모든 트랜잭션들을 수행하는 것과 동일하다는 것을 보장하기 위해, 각 트랜잭션이 준수해야하는 규칙들의 모임이다.

잠금(lock)은 데이터베이스 객체에 대한 접근 제어에 사용되는 메카니즘이다. 

두 가지 종류의 잠금이 DBMS에 의해 일반적으로 지원된다.

공용 잠금( shared lock)은 동시에 두 개의 다른 트랜잭션들에 의하여 소유될 수 있으나, 한 객체에 대한 전용 잠금(exclusive lock)은 다른 트랜잭션들이 이 객체에 어떠한 잠금도 소유할 수 없도록 한다.

트랜잭션 T1은 어떤 데이터 객체를 수정하려고 하고 트랜잭션 T2는 동일한 데이터 객체를 읽으려고 한다. 직관적으로, 만약 그 객체에 대한 T1의 전용 잠금의 요청이 먼저 승낙되면, T2는 T1이 이 잠금을 해제할 때까지는 진행할 수 없다. 공용 잠금에 대한 T2의 요청은 그때까지 DBMS에 의하여 승낙되지 않을 것이기 때문이다. 따라서, T2가 시작되기 전에 T1의 모든 작업들이 완료될 것이다. 


미완료 트랜잭션과 시스템 붕괴

DBMS는 완료되지 않은 트랜잭션들에 의해 수행된 변경들이 데이터베이스로부터 제거되는 것을 보장해야 한다. 이를 수행하기 위하여, DBMS는 데이터베이스에 쓴 모든 기록 작업에 대한 로그(log)를 유지관리한다. 이를 로그 우선 기록(Write-Ahead Log, WAL)이라 한다.

로그는 성공적으로 완료된 트랜잭션에 의해 수행된 변경들이 시스템 붕괴 때문에 손실되지 않는다는 것을 보장하기 위해서도 사용된다. 시스템이 한번 붕괴된 이후에 데이터베이스를 일관된 상태로 복구하는 작업은 느리고 더딘 작업이다. 

붕괴로부터 복구하기 위하여 요구되는 시간은 적당량의 정보를 디스크에 주기적으로 강제 출력함으로써 감소될 수 있다. 이러한 주기적인 연산을 검사점(checkpoint)이라고 한다.


유의사항 3가지

1. 하나의 트랜잭션에 의해 읽혀지거나 긹되는 모든 객체는 각기 공용 모드나 전용 모드로 먼저 잠금이 걸린다. 어떤 객체에 잠금을 거는 것은 그 객체의 가용성을 다른 트랜잭션들에게 제한하며 따라서 성능에 영향을 미친다.

2. 효율적인 로그 관리를 위해서, DBMS는 주기억장치에 있는 페이지들을 선택적으로 디스크에 강제 출력할 수 있어야 한다. 이 연산에 대한 운영 체제의 지원이 항상 만족스럽지는 않다.

3. 주기적인 검사점을 실시하는 것은 붕괴로부터 복구하는 데 걸리는 시간을 줄일 수 있다. 물론, 너무 자주 검사점을 실시하는 것은 정규 작업의 처리 속도를 둔화시키므로 그 균형이 유지되어야 한다.

[대학교 교재 정리 - 데이터베이스 시스템(MC Graw Hill)] 1.6 DBMS에서의 질의

DBMS에 저장되어 있는 데이터에 관한 질문을 질의(query)라고 한다.

DBMS는 질의들이 작성될 수 있는 질의어(qeury language)라고 하는 특수한 언어를 제공한다.

관계해석은 수학적인 논리에 바탕을 둔 일종의 정형 질의어로서, 이 언어로 작성된 질의들은 직관적이며 정확한 의미를 갖는다.

관계대수는 또다른 정형 질의어로서 릴레이션을 조작하기 위한 연산자들의 모임에 기반을 두고 있는데, 표현력에서 관계 해석과 동등하다.

질의처리의 효율성은 데이터가 물리적으로 어떻게 저장되어 있는가에 의해 대부분 결정된다.

DBMS는 사용자들로 하여금 데이터 조작어(Data Manipulation Langguage: DML)를 통하여 데이터를 생성, 수정, 질의할 수 있게 한다. 질의어는 DML의 한 부분일 뿐이다.

DML은 데이터를 삽입, 삭제, 수정하기 위한 구성자들을 제공한다.

DML과 DDL이 C나 COBOL과 같은 호스트 언어내에 내재될 때 데이터 부속어(data sublanguage)라 한다.