1. 회복(Recovery)

1)회복의 정의 

데이터베이스는 여러가지 요인으로 인해 데이터에 모순이 생기는 등 손상을 입는 경우가 있습니다. 이런 상황이 발생하면 DBMS에 있는 회복 관리자(recovery manager)를 통하여 데이터베이스가 손상되기 이전인 상태로 복구하는 작업을 하는데, 이것을 회복이라고 부릅니다. 회복은 대부분 로그 파일에 기록된 로그 정보를 이용해서 수행합니다. 데이터베이스의 회복이 이루어지는 동안에는 데이터베이스에 접근하여 업무를 처리할 수 없으므로 이 작업은 빠른 시간 내에 이루어져야 합니다.

로그(Log): 운영체제나 소프트웨어가 실행 중에 발생하는 이벤트나 각기 다른 사용자의 통신 소프트웨어 간의 메시지를 기록한 내역입니다. 여기서 데이터베이스에 쓰이는 로그를 트랜잭션 로그라고 하는데, 이는 데이터베이스에서 충돌이나 하드웨어 고장이 있었다고 해도 DBMS의 ACID특성을 보장하기 위해서 트랜잭션이 수행되어 데이터가 변경된 이력을 기록한 것입니다. 이런 로그 정보를 담은 파일을 로그 파일(Log File)이라 합니다.

 


 

2) 회복 기법

 - 즉시 갱신(Immediate Update) 기법: 트랜잭션 수행 중에 데이터를 변경한 연산의 결과를 데이터베이스에 즉시 반영하며, 장애 발생에 대비하기 위해 데이터 변경 사항을 로그 파일에도 기록합니다. 만일 장애가 발생하면 해당 로그의 내용을 토대로 회복 작업을 수행합니다.

 - 지연 갱신(Deferred Update) 기법: 트랜잭션의 수행 중에 데이터가 변경되어도 데이터베이스에 반영하지 않고 로그 파일에만 기록해두었다가, 부분 완료가 되면 로그에 기록된 내용을 통해 데이터베이스에 한꺼번에 반영하는 방법입니다. 트랜잭션이 수행 중 장애가 발생해도 데이터베이스에 반영된 것이 아니므로 데이터베이스는 그대로 유지되며, 로그에 기록된 내용은 파기됩니다.

 - 검사 시점(Check Point) 기법: 트랜잭션이 실행되는 중간에 일정 시간 간격으로 검사 시점(checkpoint)을 만들어두고, 해당 검사 시점까지 수행 및 완료된 내용을 데이터베이스에 적용시킵니다. 만일 장애가 발생하면 가장 최근 검사 시점 이전의 트랜잭션에는 회복 작업을 수행하지 않고, 이후의 트랜잭션에만 회복 작업을 수행합니다.

 - 그림자 페이징(Shadow Paging) 기법: 로그를 사용하지 않고선 데이터베이스를 동일한 크기의 단위인 페이지로 나눈 뒤, 각 페이지마다 복사하여 그림자 페이지를 보관하는 기법입니다. 데이터베이스의 변경되는 내용은 원본 페이지만 적용되고, 장애가 발생되면 그림자 페이지를 이용하여 회복합니다.

 


2. 병행 제어(Concurrenct Control)

1) 병행 제어란?

DBMS는 병행 수행(concurrency)기능을 지원하여 여러 개의 트랜잭션이 동시에 수행할 수 있게 만들며, 여러 사용자가 데이터베이스를 동시에 공유할 수 있도록 만들어줍니다. 병행 수행은 여러 트랜잭션들이 차례로 번갈아 수행되는 인터리빙(interleaving) 방식으로 진행되는데, 트랜잭션들이 동시에 같은 데이터에 접근하여 연산을 수행하는 경우 데이터의 모순, 갱신 분실, 연쇄 복귀 등의 문제가 생길 수 있습니다. 이러한 문제를 해결하기 위해 트랜잭션의 수행을 제어하는 것이 병행 제어입니다. 병행 제어는 동시성 제어라고도 부릅니다.

[참고] 병행 수행과 병행 제어 (데이터베이스 개론, 2013. 6. 30., 한빛아카데미(주))

 

 


2) 병행 제어 기법: 로킹(Locking)

  로킹은 병행 제어의 대표적인 기법입니다. 병행 수행도중 하나의 트랜잭션이 사용하는 데이터에 자물쇠를 걸어 다른 트랜잭션이 접근할 수 없게 만들어, 트랜잭션이 마무리 될때까지 독점해서 사용하도록 만드는 방법입니다. LOCK 명령어를 통해 독점권을 획득하고, 트랜잭션이 실행된 뒤 완료되면 UNLOCK명령어로 독점권을 해체하여 다른 트랜잭션이 데이터를 사용할 수 있게 만듭니다.

 로킹은 병행 수행에서 일어나는 위험성을 방지하지만, 하나의 데이터를 공유하는 다른 트랜잭션의 연산을 지연시키게 됩니다. 따라서 필요한 부분만 LOCK을 설정하는 것이 바람직합니다. 예를들어 2개의 트랜잭션이 동일한 데이터에게 'read연산→트랜잭션 연산→해당 데이터에게 write로 갱신' 작업을 하는 경우에는 모순이 생길 수 있어서 먼저 연산을 수행하는 트랜잭션이 read와 write 모두 LOCK을 거는것이 바람직합니다.

 하지만 2개의 트랜잭션이 모두 데이터를 단순히 읽어오기만 하는 read 연산만 한다면, 한 트랜잭션이 실행될 때 다른 트랜잭션도 데이터에 접근해서 연산을 수행해도 문제가 생기지는 않습니다. 이런 경우에는 쓰기는 허용하지 않되, 읽기는 허용하여 성능을 높일 수 있습니다.

 이렇게 로킹은 용도에 따라 공유 락배타 락으로 구분할 수 있습니다.

 

- 공유 락(Shared Lock): LOCK을 설정한 데이터에 대해 read만 허용하고, write는 불허하는 방법

 

 

- 배타적 락(Exclusive Lock): LOCK을 설정한 데이터에 대해 read과 write모두 불허하는 방법

 

 

2-1) 로킹 단위(Locking Granularity)

로킹 단위는 LOCK을 설정하는 대상의 범위입니다. 이 단위는 속성, 튜플, 테이블, 전체 데이터베이스 등 다양한 범위로 설정이 가능합니다. 여기서 로킹의 단위가 크면 제어 기법을 구현하기 편리하지만 병행성 수준이 떨어집니다. 반대로 로킹 단위가 작으면 제어 기법을 구현하기 복잡하지만 병행성의 수준이 높아집니다.

 

 

2-2) 2단계 로킹 프로토콜(Two Phase Locking Protocol)

확장 단계축소 단계라는 2개의 단계로 구성된 로킹 기법입니다. 이 기업은 트랜잭션 스케줄의 직렬성을 보장해주지만, 교착 상태(deadlock)가 발생할 수 있다는 단점이 있습니다.

 

- 확장 단계(Growing Phase): 트랜잭션들이 LOCK연산만 수행할 수 있고, UNLOCK이 불가능합니다.

- 축소 단계(Shrinking Phase): 트랜잭션들이 UNLOCK연산만 수행할 수 있고, LOCK이 불가능합니다.

 

 


3) 타임 스탬프 순서기법

 시스템에 들어오는 트랜잭션의 순서대로 고유번호인 타임 스탬프를 부여하고, 이 타임 스탬프의 순서에 따라 데이터에 접근하여 실행하는 기법입니다. 타임 스탬프 기법은 정해진 순서에 따라 실행되므로 교착상태가 발생하지 않습니다.

 

트랜잭션(Transaction)

1) 트랜잭션의 정의

 트랜잭션이란 데이터베이스 내에서 한꺼번에 모두 수행해야 할 연산들의 집합으로, 하나의 작업 처리를 위한 논리적인 단위를 뜻합니다. 이는 동시성제어(Concurrency Control)의 기본 단위기도 합니다. 트랜잭션 내의 연산은 모두 한꺼번에 완료되어야 하며, 일련의 연산을 실행하는 도중 오류가 생긴다면 모든 작업을 취소해야 합니다. 트랜잭션이 성공적으로 종류되었을 경우에는 그 결과를 데이터베이스에 영구적으로 반영하기 위해 COMMIT 명령어를 사용하고. 도중 오류가 발생했을 경우에는 수행 작업을 취소하고 이전 상태로 되돌리기 위해 ROLLBACK 명령어를 사용합니다.

 [예시] 은행에서 계좌에 입금을 하는 경우 <계좌번호 입력> → <계좌번호 정보 불러오기> → <입금할 금액 입력> → <승인> → <계좌의 잔액에 입금된 금액을 추가> 이라는 일련의 작업이 하나의 트랜잭션이 될 수 있습니다. 이 작업들이 마지막까지 성공하여  COMMIT명령어가 실행되면 영구적으로 반영되지만, 도중에 오류가 생긴다면 ROLLBACK명령을 통해 모든 작업을 취소해야 합니다.

 


2) 트랜잭션의 특성

 

 

 이 트랜잭션에는 ACID로 요약되는 4가지 중요한 특성이 있습니다.

원자성(Atomicity): 트랜잭션의 가장 중요한 특성으로, 트랜잭션 내의 연산은 반드시 모두 반영되거나 아니면 전혀 반영되지 않아야 한다는 것을 뜻합니다. 즉, 부분 실행이 허용되지 않습니다.

일관성(Consistency): 트랜잭션이 실행을 성공적으로 완료했다면, 언제나 일관성 있는 데이터베이스 상태를 유지해야하며 결과에 모순이 없어야합니다.

- 독립성(Isolation): 격리성이라고도 부르며, 하나의 트랜잭션이 수행되고 있을때 다른 트랜잭션이 접근할 수 없는 성질입니다. 즉 각각의 트랜잭션은 독립적이여야 합니다.

- 지속성(Durability): 영속성이라고도 부르며, 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 반영되어야 합니다.

 


3) 트랜잭션의 상태도

 

트랜잭션이 수행되는 과정에는 활동, 부분완료, 완료, 실패, 철회 5가지의 상태가 있습니다. 아래는 그 상태들의 변화를 그린 상태도입니다.

 

 

 

 

 

- 활동(active): 트랜잭션이 현재 실행중인 상태

- 부분 완료(partially committed): 실행을 마치고선 데이터베이스에 결과를 저장하기 직전의 상태

- 완료(committed): 트랜잭션의 변경 내용을 성공적으로 저장한 상태

- 실패(failed): 트랜잭션 실행 중 오류가 난 상태

- 철회(aborted): ROLLBACK명령어를 통해 트랜잭션의 수행 이전상태로 돌린 상태

 


4) 트랜잭션 스케쥴

 여러 트랜잭션들이 동시에 실행되는 경우 스케쥴링을 통하여 트랜잭션의 연산들이 실행되는 순서를 정합니다. 이런 스케쥴 기법에는 직렬 스케쥴(Serial Schedule)비직렬 스케쥴(Nonserial Schedule)이 있습니다.

- 직렬 스케쥴(Serial Schedule): 각 트랜잭셜 별로 구분하여 한 트랜잭션을 구상하는 일련의 연산들이 모두 실행된다면, 다른 트랜잭션을 실행하는 방법입니다.

- 비직렬 스케쥴(Nonserial Schedule): 인터리브(Interleave) 실행기법을 통하여 각 트랜잭션의 연산들이 번갈아가며 병행 실행히는 방법입니다.

직렬 가능 스케쥴(Serializable Schedule): 직렬 스케쥴을 이용한 결과와 비직렬 스케쥴을 이용한 결과가 동일하게 나오는 경우를 말합니다.

1. 순차접근(Full Table Scan)

 데이터베이스의 한 릴레이션에서 데이터를 찾거나 재배열하기 위해 데이터가 저장된 목록 중의 모든 데이터 요소를 차례차례 조사하여 원하는 것을 찾아내는 것순차접근(Full Table Scan)이라 합니다. 이런 순차 접근에 의한 검색은 튜플의 수가 많아지면 검색 시간이 매우 오래걸린다는 단점이 있습니다. 만일 데이터가 오름차순 또는 내림차순으로 정렬되어 있다면, 이진 탐색을 통하여 검색시간을 줄일 수 있겠지만, 데이터들이 지속적인 변화를 통해 삽입,삭제,갱신 작업이 일어나므로 항상 오름차운이나 내림차순으로 유지하기에는 현실성이 떨어집니다.


 2. 인덱스(Index)

 1) 인덱스 정의, 인덱스의 장단점

 스캔기법의 단점을 보완하기 위해 등장한 것이 인덱스입니다. 인덱스는 데이터의 주소를 기억하고 관리하는 인덱스 파일(Index File)실제 데이터를 기억하는 데이터 파일(Data File)로 구성되어 있습니다. 데이터를 검색 시, 먼저 인덱스 파일에서 찾고자하는 데이터가 저장된 주소를 찾고 그 뒤 찾은 주소값을 통해 데이터 파일에서 데이터를 찾습니다. 이 인덱스 기법은 수많은 데이터 중에서 원하는 자료를 빠르게 검색할 수 있도록 해줍니다.

 하지만 인덱스는 저장공간을 차지하는 문제와 함께, 항상 정렬상태를 유지해야하기 때문에 튜플의 값이 변경되거나 수정, 삭제가 되면 인덱스도 재정렬을 해야합니다. 그래서 인덱스를 많이 사용한다면, 인덱스의 재정렬에서 많은 시간이 소요되어 DBMS의 성능을 저하하는 단점이 있습니다. 그래서 인덱스는 필요한 속성에만 사용해야합니다. 여기서 중복값을 허용하지 않는 인덱스를 고유 인덱스라고 부르는데, 이는 가장 좋은 선택성을 가집니다.

※ 선택성(=분포도, Selectivity): 전체 행의 수 분에 해당 값

 인덱스 기법은 여러가지 구조로 형성되는데 그 구조 중에선 B트리B+트리, 클러스터드 인덱스, 넌클러스터드 인덱스가 있습니다.

[예시]

[데이터 파일]

 주소값

제품코드 

제품명 

 분류

가격 

 100

AA01

탁자

가구

700,000

 200

AA02 

나무옷장

가구

400,000

 300

AA03

침대

가구

1,100,000

 400

BA01

50인치 TV 

가전

900,000

 500

BA02 

전기밥솥

가전

250,000

 600

BA03 

냉장고

가전 

1,500,000

제품의 정보들을 저장하는 데이터 파일이 있고, 왼쪽에 각 값에 해당하는 주소값이 배정되어 있다고 가정해봅니다. 이 데이터베이스의 인덱스 파일을 작성하면 아래와 같습니다.

 

[인덱스 파일]

제품코드

주소

AA01

 100

AA02

 200

AA03

 300

BA01

 400

BA02

 500

BA03

 600

이렇게 작성된 인덱스 파일을 통해 자료를 검색할 수 있습니다. 만일 제품코드 'BA01'이란 값의 데이터를 찾으려고 한다면, 먼저 인덱스 파일을 통해 해당 값이 저장된 물리적 주소인 '400'을 찾습니다. 그 뒤 데이터 파일에서 400주소값을 가지는 항목을 바로 찾아가 원하는 데이터를 찾을 수 있습니다. 만일 순차접근방식을 통해 검색한다면 AA01부터 BA01까지 모두 검색하여 더 많은 시간이 소요될것입니다.

 


 

 

 

2) 인덱스의 종류

- B―트리(Balanced Tree)

 자료 구조를 균형있는 트리구조로 나타내어 검색의 효율을 증진시키는 방법입니다. 트리의 한 노드는 다음과 같이 구성됩니다.

여기서 P1은 data1보다 작은 값을 가지는 하위 노드의 주소를 가리키며, P2는 마찬가지로 data2보다 작은 값을 가지는 하위 노드의 주소를, P3는 data3보다 작은 값을 가지는 하위노드의 주소를 가리킵니다.

[예시]

여기서 연파란색의 배경이 있는 된 표의 셀은 주소값을, 배경이 투명한 표의 셀은 데이터를 나타냅니다. 


- B+―트리

B 트리의 변형으로 단말 노드를 찾기 위한 인덱스 세트와, 단말 노드로만 구성순차 세트로 구성되어 있습니다.

[예시]

 


- 클러스티드 인덱스(Clustered Index)

 

테이블에서 하나의 속성을 기준으로 정렬시켜 재구성한뒤, 그 테이블을 토대로 인덱스를 만드는 방법입니다. 그래서 테이블의 물리적 순서와 인덱스의 순서가 동일하게 됩니다.

 

- 넌클러스티드 인덱스(Non Clustered Index)

 테이블을 재구성하지 않고, 데이터 주소를 이용하여 인덱스를 만든 뒤 주소값을 이용하여 검색하는 방법입니다.

1. 정규화(Normalization)

정규화란 논리적 데이터 모델링 단계에서 데이터의 중복과 종속으로 인한 이상 현상(anomaly)을 방지하기 위해, 속성들 간의 종속 관계를 분석하여 무결성을 유지하면서 다수의 릴레이션으로 분리하는 과정을 말합니다. 장점으로는 이상의 발생 가능성을 줄이지만, 연산 시간이 증가한다는 단점이 있습니다.

정규화를 통해 분해된 결과를 정규형이라 하며, 이 정규형의 종류는 1정규형, 제2정규형, 제3정규형, BCNF, 제4정규형, 제5정규형 등이 있습니다. 이 정규형들은 차수가 높아질 수록 제약조건이 증가된다는 특징을 갖춥니다.

 

1) 제1정규형(1NF, First Noraml Form)

한 릴레이션을 구성하는 모든 도메인이 원자값으로 된 정규형입니다.

 

2) 제2정규형(2NF, Second Normal Form)

제1정규형을 만족하면서 릴레이션에 존재하는 부분 함수적 종속을 제거하여, 모든 속성이 기본키에 완전 함수 종속이 되도록 만들어진 정규형입니다.

 

3) 제3정규형(3NF, Third Normal Form)

제2정규형을 만족하면서 릴레이션을 구성하는 속성들 간의 이행적 종속관계를 분해하여 속성들이 비이행적 함수 종속관계를 만족하도록 만들어진 정규형입니다.

 

4) 보이스-코드(BCNF, Boyce-Codd Normal Form)

제3정규형을 만족하면서 릴레이션의 모든 결정자가 후보키가 되도록 하는 정규형입니다.

 

5) 제4정규형(4NF, Fourth Normal Form)

BCNF를 만족하면서 릴레이션에서 다치 종속 관계를 제거한 정규형입니다.

 ※다치 종속(MVD, Multival Dependency): 두 속성이 1:다 대응이 되는 경우입니다.

[예시] 예를들어 '학번'과 '수강과목' 속성이 있다면, 한 학생은 여러 과목을 수강할 수 있는 경우 하나의 '학번'은 여러개의 '수강과목'에 대응하므로 다치 종속 관계입니다.

 

6) 제5정규형(5NF, Fifth Normal Form)

후보키를 통하지 않은 조인종속(Join Dependency)을 제거한 정규형입니다.

 


 

2. 역정규화(DeNormalization)

역정규화란 정규화를 통해 분리되었던 릴레이션에서 중복을 허용하고 다시 통합하거나 분할하여 구조를 재조정하는 과정입니다. 정규화된 릴레이션은 하나의 릴레이션을 분해하기 때문에 원하는 자료가 하나의 릴레이션에 존재하지 않아 외래키를 이용해 참조해야하는 상황이 잦아집니다. 이는 데이터베이스에 저장된 자료를 검색하는 시간을 증가시키며 성능을 저하시킬 수 있습니다. 따라서 데이터베이스의 물리적 설계 과정에서 성능을 향상시키기 위해 역정규화를 실행합니다. 역정규화의 종류로는 릴레이션 역정규화, 속성 역정규화가 있습니다.

 

1) 릴레이션 역정규화: 릴레이션의 역정규화에는 릴레이션을 병합하는 방법과 분할하는 방법이 있습니다.

- 릴레이션 병합: 두 릴레이션 간의 잦은 참조로 성능이 저하될 경우 이 문제점을 해결하기 위해 병합합니다.

- 릴레이션 분할: 릴레이션의 데이터를 검색할때는 목록중의 데이터를 순차적으로 조사하여 원하는 자료를 찾습니다. 그래서 자주 사용하지 않는 속성이나 튜플이 릴레이션에 있을 경우 검색시 성능을 저하하게 만듭니다. 이 경우에는 자주 사용하는 속성이나 튜플을 분해하여 성능을 향상시킵니다. 이 분할에는 수직 분할(자주 사용하는 속성과 그렇지 않는 속성을 구분해서 분할)수평 분할(자주 사용하는 튜플과 그렇지 않는 튜플을 구분해서 분할)이 있습니다.

 

2) 속성 역정규화: 릴레이션의 성능을 향상시키기 위해 속성 또는 파생속성을 추가합니다.

   ※파생 속성(Delivered Attribute): 현재 릴레이션에는 없는 속성이지만 작업의 효율을 위해 힌 속성으로부터의 계산이나 가공에 의해 파생되는 속성입니다.

함수적 종속(Functional Dependency)

 함수적 종속이란 어떤 릴레이션 R이 있을때 X와 Y를 각각 속성의 부분집합이라고 가정해봅니다. 여기서 X의 값을 알면 Y의 값을 바로 식별할 수 있고, X의 값에 Y의 값이 달라질 때, Y는 X에 함수적 종속이라고 합니다. 이 경우 X를 결정자, Y를 종속자라고 합니다. 이를 기호로 표현하면 X→Y입니다. 이런 함수적 종속관계에는 완전 함수적 종속부분 함수적 종속이행적 함수 종속이 있습니다.

[예시]

학번  이름 나이  성별  전공코드 전공명 
 110011 박지현  26 여성  AAA1 국문학과
 110011 박지현  26 여성  C0B7 컴퓨터공학과 
 131001 김민석 25  남성   C0A5 전기전자공학과
 120006 홍현희  25 여성   B1027 무용과
 150705 한태민  23  남성   C0A5 전기전가공학과 
 171024 설화영  22 여성 B01K2 공예과

이 릴레이션에서는 '학번'을 알면 '이름', '나이', '성별' 속성을 식별할 수 있으며, '힉번'이 다르면 그에따른 값도 다릅니다. 따라서 '이름', '나이', '성별' 속성은 '힉번'에 함수적인 종속관계입니다. 같은 이유로 전공 속성또한 '전공코드'에 함수적인 종속관계에 있습니다.

학번→이름, 학번→나이, 학번→성별

 


1) 완전 함수적 종속(Full Functional Dependency)

완전 함수적 종속이란, 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우입니다.

[예시]

 

회원번호  이름 나이  거주지역
 A001 송민지 17 서울
 A002 박아람 15 부산
 A003 이예은 16 대전

이 릴레이션에서는 기본키가 '회원번호' 속성으로 구성되어 있다. 여기서 '이름', '나이', '거주지역' 속성은 기본키인 '회원번호'을 알아야 식별 가능하다. 따라서 '이름', '나이', '거주지역'은 '회원번호'에 완전 함수 종속된 관계입니다.

 

고객ID  상품코드 주문상품 수량  가격 
AAAA01 T001 티셔츠 12000
AAAA01  B110 청바지  11000
AAAA02 B110 청바지 2 22000
AAAA03 T091 와이셔츠 1 15000
AAAA03 O100 원피스 1 19000

해당 릴레에션의 기본키는 '고객ID'와 '상품코드' 속성으로 구성되어 있습니다. 여기서 '수량' 속성은 기본키를 구성하는 '고객ID', '상품코드' 속성을 모두 알아야 식별할 수 있습니다. 따라서 '수량'은 완전 함수 종속된 관계입니다.

 

 


 

2) 부분 함수적 종속(Partial Functional Dependency)

부분 함수적 종속이란, 릴레이션에서 종속자가이 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 속성 중 일부만 종속되는 경우입니다.

[예시]

 

고객ID  제품코드 주문상품  수량  가격 
AAAA01 T001 티셔츠 12000
AAAA01  B110 청바지  11000
AAAA02 B110 청바지 2 22000
AAAA03 T091 와이셔츠 1 15000
AAAA03 O100 원피스 1 19000

기본키가 '고객ID'와 '상품코드' 속성으로 구성된 위의 릴리이션에서서 '주문상품'은 기본키 중 '상품코드'만 알아도 식별할 수 있습니다. 이 경우에는 '주문상품' 속성은 기본키에 부분 함수 종속된 관계입니다.

 

 


3) 이행적 함수 종속(Transitive Functional Dependecy)

릴레이션에서 X, Y, Z라는 3 개의 속성이 있을 때 X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z가 성립될 때 이행적 함수 종속이라고 합니다. 즉, X를 알면 Y를 알고 그를 통해 Z를 알 수 있는 경우를 말합니다.

[예시]

상품번호  상품명 소분류 대분류
 A001 검은 체크무늬 셔츠 상의 의류
 A002 유선 마우스 마우스 전자제품
 A003 유기농 양배추 야채 식료품
 A004 포테이토 칩 스낵 식료품
 A005 32인치 4K 모니터 모니터 전자제품
 A006 청바지 하의 의류
 A007 분홍 스웨터 상의 의류

이 릴레이션에서 '상품번호'를 알면 '소분류'를 알 수 있고, '소분류'을 알면 '대분류'도 알 수 있습니다. 따라서 '상품번호'를 알면 '대분류'를 알 수 있으므로 이행적 함수 종속 관계입니다.
이때, 대분류는 소분류에 의해 관계되는 항목이지만, 상품번호를 통해 귀속되어있습니다. 따라서 이런 관계를 이행적 함수 종속이라고 합니다

 

 

 

이상(Abnormal)

 릴레이션에서 일부 속성들의 종속이나 데이터의 중복으로 인해 데이터 조작시 불일치가 발생하는 것을 말합니다. 이상의 종류에는 삽입이상, 삭제이상, 갱신 이상이 있습니다.

학번

 이름

나이 

성별 

전공코드

전공명 

 110011

박지현 

26

여성

 AAA1

국문학과

 110011

박지현 

26

여성

 C0B7

컴퓨터공학과 

 131001

김민석

25 

남성 

 C0A5

전기전자공학과

 120006

홍현희 

25

여성 

 B1027

무용과

 150705

한태민 

23 

남성 

 C0A5

전기전가공학과 

 171024

설화영 

22

여성

B01K2

공예과

 

- 삽입 이상(Insert Abnormal): 자료를 삽입할때 의도하지 않은 자료까지 삽입해야만 자료를 데이터베이스에 추가하는게 가능한 현상입니다.

[예시] 데이터베이스에 '간호학과'라는 전공을 저장해야 한다면, 전공코드와 전공명만 추가하는 것이 아니라 수강하는 학생들의 정보까지 추가해야합니다.

 

- 갱신 이상(Update Abnormal): 중복된 데이터 중 일부만 수정되어 데이터의 모순이 일어난 이상입니다.

[예시] 학번이 '110011'번인 학생 '박지현'이 이름을 '박현지'로 개명했을때 모든 튜플의 정보를 변경해야 한다. 만일 국문학과 전공이 저장된 항목만 이름이 변경되고, 컴퓨터공학과 전공이 저장된 항목에선 이름이 변경되지 않았다면, 데이터의 불일치가 발생합니다.

 

- 삭제 이상(Delete Abnormal): 어떤 정보를 삭제하면, 유용한 다른 정보까지 삭제되어버리는 이상입니다.

[예시] 학번이 '120006'번인 학생 '홍현희'의 자료를 지우면 해당 릴레이션에서 저장된 전공 정보중 무용과라는 전공도 지워져버립니다.

1. 키(Key)란?

 키(Key)는 데이터베이스에서 저장되어 있는 튜플을 유일하게 구분할 수 있는 식별자를 말합니다. 이런 식별자는 단일 속성 이나 속성들의 집합이 될 수 있습니다. 키의 종류로는 후보키, 기본키, 대체키, 외래키, 슈퍼키가 있습니다.

회원번호

이름

주민등록번호

나이 

성별 

0001 

강혜지

920504-2*****6 

27 

여 

0002 

박인호

931111-1*****5

26 

남 

0003

최민희 

890713-2*****4

30

0004 

민형석

921224-1*****7

27

- 슈퍼키(Super Key)튜플을 유일하게 구분할 수 있는 하나 이상의 속성들로 구성된 키를 뜻합니다. 유일성을 만족하지만 최소성은 만족하지 않습니다.

[예시]:  슈퍼키로 올 수 있는 조합은 (회원번호), (주민등록번호), (회원번호, 이름), (회원번호, 주민등록번호), (회원번호, 나이), (회원번호, 성별), (회원번호, 이름, 나이), (회원번호, 주민등록번호, 성별), (회원번호, 주민등록번호, 나이), (주민등록번호, 이름), (주민등록번호, 나이, 성별) 등등이 될 수 있습니다.

유일성: 각각의 튜플을 유일하게 구분하는 성질입니다. 예를들면 '성별'이란 속성의 경우 이 속성의 값을 가지고 검색하면 여러개의 튜플들이 검색되지만, '회원번호'의 경우 값을 통해서 검색하면 오로지 하나의 튜플만 찾아낼 수 있습니다. 타라서 '성별'은 유일성을 만족할 수 없지만, '회원번호'는 유일성을 만족합니다.

 

후보키(Candidate Key): 릴레이션에서 슈퍼키의 조건을 만족하면서, 튜플을 유일하게 구분하는데 필요한 최소한의 속성으로된 키입니다. 유일성최소성을 모두 만족되어야 후보키가 될 수 있습니다.

[예시]:  '회원번호', '주민등록번호'가 튜플을 유일하게 식별할 수 있습니다. 따라서 후보키는 '회원번호'와 '주민등록번호'가 됩니다.

 ※ 최소성: 최소한의 속성을 통해 각 튜플을 유일하게 구별해내는 성질입니다.

 

- 기본키(Primary Key): 후보키들 중에서 1개의 키를 선택한 것입니다. 기본키는 중복될 수 없으며, NULL을 가질 수 없습니다. 또한 후보키와 마찬가지로 유일성최소성을 만족해야 합니다.

[예시]:  후보키인 '회원번호', '주민등록번호' 둘 중에서 하나가 될 수 있습니다. '회원번호'를 기본키로 선택했다면, 기본키가 '회원번호'가 됩니다.

 

- 대체키(Alternate Key): 후보키 중에서 기본키를 제외한 속성들입니다.

[예시]:  후보키인 '회원번호'를 기본키로 설정했다면 '주민등록번호'가 대체키로 됩니다. 반대로 '주민등록번호'가 기본키라면 후보키는 '회원번호'가 됩니다.

 

- 외래키(Foreign Key):  한 릴레이션에서 다른 릴레이션을 참조할 때, 참조의 기준이 되는 속성입니다. 이는 참조하고자 하는 릴레이션의 기본키와 동일합니다. 그렇기에 외래키에서는 NULL이 올 수 없습니다. 다만 외래키의 속성명과 참조하는 릴레이션의 기본키 속성명이 일치하지 않아도 무방합니다.

 

 

 

 

2. 무결성 제약조건(Integrity Constraint)

무결성이란 데이터의 내용이 서로 모순되는 일이 없고, 데이터베이스에 걸린 제약을 완전히 만족하게 되는 성질을 뜻합니다. 이러한 무결성은 데이터베이스의 정합성과 안정성을 지켜줍니다. 무결성을 유지하기 위해 여러 제약조건들이 있는데, 제약조건에는 참조 무결성, 개체 무결성, 도메인 무결성, 이 있습니다.

- 개체 무결성: 기본키는 NULL이 올 수 없으며, 기본키를 구성하는 어떠한 속성값이라도 중복값이나 NULL값을 가질 수 없습니다.

- 참조 무결성: 참조할 수 없는 외래키 값은 가질 수 없습니다. 즉 외래키는 NULL값을 가질 수 없으며, 참조하는 릴레이션의 기본키와 동일해야합니다.

- 도메인 무결성: 각 속성값은 반드시 정의된 도메인(하나의 속성이 가질 수 있는 값들의 범위)만을 가져야합니다.

1. 관계형 데이터 모델(Relation Data Model)의 정의

관계 데이터 모델은 2차원 구조의 테이블 형태를 통해 자료를 표현하는 것을 말합니다.

[예시]

 회원번호

이름 

수강과목 

나이 

A0001

김영희

수학 

17

A0002

박선주

수학

13

A0003

한민석

국어

19

A0004

이철수

영어

15

A0005

 강현지

영어

18

 

2. 관계형 데이터 모델의 용어

- 릴레이션(Relation): 데이터들을 2차원 테이블의 구조로 저장한 것

- 속성(Attribute): 릴레이션의 열(=Column), 개체를 구성하는 속성들을 나타냅니다. 

 [예시] 회원번호, 이름, 수강과목, 나이

- 튜플(Tuple): 릴레이션의 행(=Row). 속성들의 집합이며 레코드(Record)라고도 부릅니다.

 [예시] 김영희, 박선주, 한민석, 이철, 강현지

- 차수(Degree): 릴레이션을 구성하는 속성의 수

 [예시] 위의 예시 테이블에서 차수는 4

- 카디널리티(Cardinality): 릴레이션에 입력된 튜플의 수

 [예시] 위의 예시 테이블에서 카디널리티는 5

- 도메인(Domain): 하나의 속성이 가질 수 있는 값들의 범위

- 널(Null): 정보 부재를 나타내기 위해 사용되는 특수한 데이터 값

- 릴레이션 스키마(Relation Schema): 릴레이션의 이름과 속성 이름의 집합(=릴레이션 스킴 =릴레이션 내포)

- 릴레이션 인스턴스(Relation Instance): 릴레이션의 어느 시점까지 입력된 튜플들의 집합(=릴레이션 외연)

 

3. 릴레이션의 특징

- 릴레이션의 튜플들은 모두 다르며, 유일한 존재입니다.

- 릴레이션의 튜플들 간의 순서는 의미가 없습니다.

- 릴레이션의 속성들 간의 순서는 의미가 없습니다.

- 튜플들의 삽입, 갱신, 삭제작업이 실시간으로 일어나므로 릴레이션은 수시로 변합니다.

- 속성은 더이상 분해할 수 없는 원자값만 가집니다.

 

4. 사상(Mapping Rule)

E-R다이어그램에서 관계형 데이터베이스 이론이 입각하여, 릴레이션 스키마로 변환하는 과정을 말합니다.

[예시]

E-R 다이어그램

릴레이션 스키마

[학생 테이블]

 학번

이름 

학년 

 

 

[과목 테이블]

 학번

과목코드

과목명

1. E-R 모델이란?

개체 관계 모델(Entity-Relationship Model, ERM)은 P.Chen박사에 의해 최초로 제안된 모델로, 데이터베이스에 사용되는 개체, 속성, 관계를 약속된 기호로 표현하여 도식화한 모델입니다. E-R모델을 통해 설계된 산출물을 E-R 다이어그램이라 부릅니다.

 

2. E-R 모델의 기호

 기호

 의미

개체(Entity)

속성(Attribute)

관계(Relationship)

 키 속성

 

3. 다양한 관계 표현법

 기호

의미 

 1개

 

 0개

 

 다수

[예시]

 

→ 하나의 A는 다수의 B와 연관되어 있다

 

→ 다수의 A는 다수의 B와 연관되어 있다

 

→ 하나의 A는 하나 또는 0개의 B와 연관되어 있다

 

→ 하나의 A는 하나의 B와 연관되어 있다

 

 

이런 관계표현은 기호를 사용하는 경우도 있지만, 숫자를 통해 나타내어지기도 합니다.

[예시]

나의 A는 다수의 B와 연관되어 있다.

 

→ 학번, 이름, 학년이란 속성을 가진 학생 개체는 다수의 과목 개체와 수강이란 관계를 가지고있다. 과목 개체는 과목코드와 과목명이란 속성으로 구성되어있다. 여기서 학번 속성은 학생의 기본키이며, 과목코드 속성은 과목의 기본키이다.

 

데이터베이스 설계

데이터베이스 설계는 사용자 요구를 토대로 현실 세계의 대상을 구현가능한 컴퓨터 데이터베이스의 구조로 개발하는 작업입니다. 데이터베에스 설계는 스키마를 정의하고 이를 구현하기 위한 전반적인 과정을 거칩니다.

이 과정들을 세분화하면, 요구조건 분석설계(개념적 설계→논리적 설계→물리적 설계) → 구현운영 및 유지보수 입니다.


1) 요구조건 분석: 업무 프로세스 및 사용자가 필요한 정보가 무엇인지, 해결해야할 문제가 무엇인지를 분석하는 과정입니다. 이렇게 분석된 자료를 토대로 요구조건 명세서를 작성합니다.

  [예시]: ㅁㅁ대학교의 학생들을 데이터베이스로 구현한다. 학생에게는 고유의 학번이 부여되며, 그 외에 이름, 나이, 학년, 전공이란 속성을 가진다.


 

2) 개념적 설계: 요구조건을 분석한 결과를 기반으로, 데이터베이스에 저장해둘 데이터 요소(개체 및 속성)가 무엇인지 정하고 그 요소들 간의 관계를 파악하여 개념적으로 표현합니다.  개체-관계 모델(Entity-Relation Model, E-R모델, ERM)을 통하여 개체 타입과 이들간의 관계타입을 이용하여 현실 세계를 개념적으로 표현할 수 있습니다. 이렇게 E-R모델을 이용해 표현한 산출물을 개체-관계 다이어그램(Entity-Relationship Diagram, E-R다이어그램, ERD)이라고 합니다.

E-R모델(Entity-Relation Model): 데이터베에스에 사용되는 개체, 속성, 관계를 약속된 기호로 표현하여 데이터베이스의 전반적인 구조를 이해하기 쉽도록 표현한 모델.


3) 논리적 설계: 개념적 설계에서 만들어진 구조를 기반으로 DBMS가 처리할 수 있는 데이터베이스의 논리적 구조를 설계하는 단계입니다. 여기서 스키마를 정의하게 됩니다. 목표 DBMS에 따라 관계형, 계층형, 망형 모델로 설계될 수 있습니다. 이 단계에서 정규화 또한 진행됩니다.

 

※스키마(Schema): 데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술·정의한 것입니다. 스키마의 계층으로는 개념 스키마, 외부 스키마, 내부 스키마가 있습니다.

 

(스키마의 3계층 사진. 출처: https://en.wikipedia.org/wiki/Three-schema_approach )

 

  * 외부 스키마(External Schema):  전체 데이터 중에서 사용자가 바라보는 일부분에서의 논리적 구조를 말합니다. 이는 사용자에 따라 다르며, 여러개가 존재합니다. 서브 스키마라고도 합니다.

  * 개념 스키마(Conceptual Schema): 논리적 관점(사용자 관점)에서 본 전체적인 데이터의 논리적 구조입니다. 개념 스키마를 줄여서 그냥 스키마라 부르기도 하며, 전체적인 뷰라고도 부릅니다. 데이터베이스 전체를 기술한 것이기에, 한 데이터베이스 시스템에선 유일합니다.

  * 내부 스키마(Internal Schema): 물리적인 저장장치 관점에서 본 데이터베이스의 구조입니다.


4) 물리적 설계: 논리적으로 설계된 데이터베이스 구조를 토대로 하드웨어나 운영체제의 특성을 고려하여 그에 알맞은 인덱스의 구조와 내부 저장 구조 및 접근 경로를 설계하는 단계입니다. 그 외에 저장레코드의 양식을 설계하고, 물리적인 데이터의 타입이나 사이즈 등을 정의합니다. 여기서 성능을 향상시키기 위한 역정규화 작업도 실시합니다.


5) 구현: 설계 과정에서 얻어진 것을 토대로 실제 데이터베이스를 만드는 과정입니다. 


6) 운영 및 유지보수: 구현된 데이터베이스를 실제로 운영해보면서 문제점과 개선점을 파악합니다. 그렇게 파악된 문제점을 토대로 데이터베이스의 튜닝유지보수를 합니다.

 * 데이터베이스 튜닝(Database Tuning):  데이터베이스가 일정한 성능을 유지할 수 있도록 데이터베이스의 여러 요소들을 조율하여 비효율적인 요소를 제거하고 성능을 개선하는 작업입니다.

데이터베이스 유지보수:  데이터베이스를 운영하면서 사용자 및 비지니스 환경 변화, 업무 절차 변화가 일어날 수 있습니다. 이런 환경의 변화에 따라 데이터베이스를 지속적으로 변경하는데, 이런 일련의 작업을 유지보수라고 합니다.

+ Recent posts