스키마

개념(Conceptual) 스키마

- 전체적으로 통합된 논리적 데이터 구조로서, 접근 권한, 제약 조건, 보안 정책, 무결성 규칙을 명세

- 조직이나 기관 전체에서 정의

내부(Internal) 스키마

- 물리적 저장징치의 입장에서 본 데이터베이스 구조

- 실제로 데이터베이스에 저장될 레코드의 형식 저장, 저장 데이터 항목 표현 방법, 내부 레코드의 물리적 순서 나타냄


Q. 3계층 스키마 중 개념 스키마에 대한 설명으로 옳은 내용은? ②,③,④

① 물리적 저장장치의 관점에서 본 데이터베이스이 명세

② 범 기관적 입장에서 본 데이터베이스의 정의를 기술한 것

③ 개체간의 관계와 유지해야 할 제약 조건 나타냄

④ 접근 권한, 보안 정책, 무결성 규칙을 명세함



데이터베이스 설계

개념적 설계

- 트랜잭션 모델링 수행

- 독립적인 개념 스키마 설계

논리적 설계

- 트랜잭션 인터페이스 설계

- 종속적인 논리적 스키마 설계

- DBMS가 지원하는 자료구조로 설계

물리적 설계

- 저장 레코드의 양식 설계

- 파일 조직 방법, 저장 방법, 파일 접근 방법등을 선정

- 물리적 설계 옵션 선택 시 고려 사항 : 응답시간, 저장공간 효율화, 트랜잭션 처리도

(보기로 같이 나오는데 오답인 것들 : 스키마의 평가 및 정제, 트랜잭션 모델링, 목표 DBMS에 맞는 스키마 설계, 트랜잭션 인터페이스 설계)



정규화

- 정규화는 속성간의 중복성, 종속성을 피하기 위함(개체간의 종속성X)

- 하나의 릴레이션을 여러 개의 릴레이션으로 분해(결합X, 통합X)

- 정규형들은 차수가 높아질수록 만족시켜야 할 제약조건 증가함

이상(Anomaly) 종류 : 삽입, 삭제, 갱신

정규화 과정

도메인이 원자값(비정규 릴레이션 → 1NF)

부분적 함수 종속 제거/완전 함수 종속(1NF → 2NF)

이행적 함수 종속 제거(2NF → 3NF)

결정자이면서 후보키가 아닌 것 제거(3NF → BCNF)

다치 종속 제거(BCNF → 4NF)

조인 종속성 이용(4NF → 5NF)



관계 대수 : 원하는 정보와 그 정보를 어떻게 유도하는 가를 기술하는 절차적

Select, Project, Join, Division(Part X)

관계 해석 : 원하는 정보가 무엇이라는 것만 정의하는 비절차적

관계대수와 관계해석은 관계 데이터베이스를 처리하는 기능과 능력면에서 동등함




이분 검색(이진 검색)

- 특정 레코드를 찾기 위해 순서화된 연접 리스트를 찾는 빠른 방법은 그 레코드가 알려져 있는 리스트의 마지막 반쪽 부분을 연속적으로 살피는 것(피보나치 검색X)

- 특징

탐색 효율이 좋고 탐색 시간이 적게 소요

검색할 데이터가 정렬되어 있어야 함

비교 횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어듦

해싱 탐색

- 탐색 방법 중 키 값으로부터 레코드가 저장되어 있는 주소를 직접 계산하여, 산출된 주소로 바로 접근하는 방법으로 키-주소 변환 방법이라고도 함

- 해싱함수의 종류

제곱 방법, 숫자분석 방법, 제산 방법

순서 논리 회로

- 논리 게이트 외에 메모리 요소귀환(feedback) 기능 포함

- 출력은 현재 상태의 입력상태와 전 상태에 의해 결정되므로 언제나 일정한 값을 갖지는 않음

- 회로의 동작은 내부 상태와 입력 등의 시간순차에 의해 결정

정보처리기사 필기 - 1과목 데이터베이스


5장 자료 구조의 기본


030 자료 구조의 개념


① 자료 구조의 정의


- 효율적인 프로그램을 작성할 때 가장 우선적인 고려사항은 저장공간의 효율성과 실행시간의 신속성

- 자료구조는 프로그램에서 사용하기 위한 자료를 기억장치의 공간 내에 저장하는 방법과 저장된 그룹 내에 존재하는 자료 간의 관계, 처리 방법 등을 연구 분석하는 것

· 자료 구조는 자료의 표현과 그것과 관련된 연산

· 자료 구조는 일련의 자료들을 조직하고 구조화하는 것

· 어떠한 자료 구조에서도 필요한 모든 연산들을 처리하는 것이 가능

· 자료 구조에 따라 프로그램 실행시간이 달라짐


② 자료 구조의 분류


[그림 1] 자료 구조 분류



③ 자료 구조의 이용


· 정렬(Sort) : 기억장치 내의 자료를 일정한 순서에 의해 나열하는 것

· 검색(Search) : 기억장치 내의 자료를 찾는 것 

· 파일 편성 : 자료를 기억 매체에 저장할 때의 파일 구조

· 인덱스 : 파일에서 특정 자료를 빠르게 찾기 위한 색인표



031 리스트


① 선형 리스트(Linear List)


· 선형 리스트는 배열과 같이 연속되는 기억장소에 저장되는 리스트

· 연접 리스트 또는 축자구조라고도 함

· 선형 리스트의 대표적인 구조 : 배열(Array)


특징

· 가장 간단한 자료 구조

· 접근 속도 빠름

· 중간에 자료를 삽입하기 위해서는 연속된 빈 공간 있어야 함

· 기억장소를 연속적으로 배정받기 때문에 기억장소 이용 효율은 밀도가 1로서 가장 좋음

· 자료의 개수가 n개일 때 삽입 시의 평균 이동 횟수는 (n+1)/2이고, 삭제 시에는 (n-1)/2

· 삽입, 삭제 시 자료의 이동이 필요하기 때문에 작업이 번거로움


② 연결 리스트(Linked List)


연결 리스트는 자료들을 반드시 연속적으로 배열시키지는 않고 임의의 기억공간에 기억시키되, 자료 항목의 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결시킨 자료 구조


연결 리스트의 특징

· 노드의 삽입, 삭제 작업이 용이

· 기억공간이 연속적으로 놓여 있지 않아도 저장이 가능

· 연결을 위한 링크(포인터)부분이 필요하기 때문에 순차 리스트에 비해 기억공간 이용 효율이 좋지 않음

· 연결을 위한 포인터를 찾는 시간이 필요하기 때문에 접근 속도 느림

· 중간 노드 연결이 끊어지면 그 다음 노드를 찾기 힘듦

· 희소 행렬을 링크드 리스트로 표현하면 기억장소가 절약됨

· 트리를 표현할 때 가장 적합한 자료 구조


※ 노드(Node)

 Data 부분

 Link 부분

자료를 저장하는 데이터 부분과 다음 노드를 가리키는 포인터인 링크 부분으로 구성된 기억공간


※ 포인터(Pointer)

현재의 위치에서 다음 노드의 위치를 알려주는 요소

· 프런트 포인터 : 리스트를 구성하는 최초의 노드 위치를 가리키는 요소

· 널 포인터 : 0또는 ∧, \0으로 표시하며, 마지막 노드의 링크 부분에 일반적으로 사용하는 것으로, 다음 노드가 없음을 나타내는 포인터

※ 희소 행렬

희소 행렬은 행렬의 요소 중 많은 항들이 0으로 되어 있는 형태로, 기억장소를 절약하기 위해 링크드 리스트를 이용하여 저장


연결 리스트의 종류

· 단순 연결 리스트

· 단순 환상 연결 리스트

· 이중 연결 리스트

· 이중 환상 연결 리스트



032 스택(Stack)


① 스택의 개념


· 스택은 리스트 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료 구조

· 스택은 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO; Last In First Out) 방식으로 자료 처리

· TOP

- Stack으로 할당된 기억공간에서 가장 마지막으로 삽입된 자료가 기억된 위치를 가리키는 요소

- 스택 포인터(SP, Stack Pointer)라고도 함

·Bottom : 스택의 가장 밑바닥


② 자료의 삽입(Push)


 Top = Top +1

 If Top > M Then

Overflow

 Else

X(Top) ← Item

 스택 포인터(Top)를 1 증가시킴
 스택 포인터가 스택의 크기보다 크면 Overflow
 

 그렇지 않으면 Item이 가지고 있는 값을 스택의

 Top위치에 삽입


· M : 스택의 크기

· Top : 스택 포인터

· X : 스택의 이름

· Overflow : 스택으로 할당받은 메모리 부분의 마지막 주소가 M번지라고 할 때, Top Pointer의 값이 M보다 커지만 스택의 모든 기억장소가 꽉 채워져 있는 상태이므로 더 이상 자료를 삽입할 수 없어 Overflow 발생시킴


③ 자료의 삭제(Pop Up)


 If Top = 0 Then

Underflow

 Else

Item ← X(Top)

Top = Top - 1

 스택 포인터가 0이면 스택의 바닥이므로 더 이상 삭제할 자료가 없으므로

 Underflow를 처리함

 그렇지 않으면

 Top 위치에 있는 값을 Item으로 옮기고

 스택 포인터를 1 감소시킴


※ Stack에 기억되어 있는 자료를 삭제시킬 때는 제일 먼저 삭제할 자료가 있는지 앖는지부터 확인해야 함

· Underflow : Top Pointer가 주소 0을 가지고 있다면 스택에는 삭제할 자료가 없으므로 Underflow를 발생시킴


※ Overflow : 꽉 채워져 있는 상태로 더 이상 자료를 삽입할 수 없는 상태

   Underflow : 자료가 없어서 자료를 제거할 수 없는 상태


④ Stack의 응용 분야


· 부 프로그램 호출 시 복귀주소를 저장할 때

· 함수 호출의 순서 제어

· 인터럽트가 발생하여 복귀주소를 저장할 때

· 후위 표기법(Postfix Notation)으로 표현된 수식을 연산할 때

· 0 주소지정방식 명령어의 자료 저장소

· 재귀(Recursive) 프로그램의 순서 제어

· 컴파일러를 이용한 언어 변역 시



033 큐(Queue)와 데크(Deque)


① 큐(Queue)


· 선형 리스트의 한쪽에서는 삽입 작업이 이루어지고 다른 한쪽에서는 삭제 작업이 이루어지도록 구성한 자료 구조

· 가장 먼저 삽입된 자료가 가장 먼저 삭제되는 선입선출(FIFO; First In First Out) 방식으로 처리

· 시작과 끝을 표시하는 두 개의 포인터 있음

· 프런트(F, Front) 포인터

- 가장 먼저 삽입된 자료의 기억 공간을 가리키는 포인터

- 삭제 작업할 때 사용

· 리어(R, Rear) 포인터

- 가장 마지막에 삽입된 자료가 위치한 기억장소를 가리키는 포인터

- 삽입 작업할 때 사용

· Queue의 응용분야

- 청구 업무나 택시 정거장처럼 서비스 순서를 기다리는 등의 대기 행렬의 처리에 사용

- 운영체제의 작업 스케줄리에 사용


② 데크(Deque)


· 삽입과 삭제가 리스트의 양쪽 끝에서 모두 발생할 수 있는 자료 구조

· Double Ended Queue

· Stack과 Queue의 장점만 따서 구성한 것

· 입력이 한쪽에서만 발생하고 출력은 양쪽에서 일어날 수 있는 입력 제한과, 입력은 양쪽에서 일어나고 출력은 한 곳에서만 이루어지는 출련 제한있음

· 입력 제한 데크 : Scroll

· 출력 제한 데크 : Shelf



034 트리(Tree)


① 트리의 정의


· 트리는 정점(노드)과 선분을 이용하여 사이클을 이루지 않도록 구성한 Graph의 특수한 형태

· 가족 계보(족보), 연산 수식, 회사 조직 구조도, 히프(Heap) 등을 표현하기에 적합


② 트리 관련 용어


[그림 2] 트리


· 노드(Node) : 트리의 기본 요소로서 자료 항목과 다른 항목에 대한 가지를 합친 것

· 근 노드(Root Node) : 트리의 맨 위에 있는 노드

· 디그리(Degree) : 각 노드에서 뻗어나온 가지의 수

· 단말 노드(Terminal Node) = 잎 노드(Leaf Node) : 자식이 하나도 없는 노드, 즉 Degree가 0인 노드

· 비단말 노드(Non-Terminal Node) :자식이 하나라도 있는 노드, 즉 Degree가 0이 아닌 노드

· 조상 노드(Ancestors Node) : 임의의 노드에서 근 노드에 이르는 경로상에 있는 노드들

· 자식 노드(Son Node) : 어떤 노드에 연결된 다음 레벨의 노드

· 부모 노드(Parent Node) : 어떤 노드 연결된 이전 레벨의 노드

· 형제 노드(Brother Node, Sibling) : 동일한 부모를 갖는 노드들

· Level : 근 노드의 Level을 1로 가정한 후 어떤 Level이 L이면 자식 노드는 L+1

· 깊이(Depth, Height) : Tree에서 노드가 가질 수 있는 최대의 레벨

· 숲(Forest) : 여러 개의 트리가 모여 있는 것

· 트리의 디그리 : 노드들의 디그리 중에서 가장 많은 수



035 이진 트리


이진 트리는 차수(Degree)가 2 이하인 노드들로 구성된 트리, 즉 자식이 둘 이하인 노드들로만 구성된 트리


① 이진트리의 특성


· 이진 트리의 레벨 i에서 최대 노드의 수 :  2n-1

· 이진 트리에서 Terminal Node수가 n0, 차수가 2인 노드 수가 n2라 할 때 n0n+ 1



② 이진 트리의 종류


정이진 트리(Full Binary Tree)

- 정이진 트리는 깊이(Depth)가 k일 때 전체 노드의 수가 2k-1개의 노드이고, 레벨 i마다 2i-1개의 노드들로 꽉 찬 트리를 말함


전이진 트리(Complete Binary Tree)

· 전이진 트리는 노드의 개수가 n개일 때, 정이진 트리의 각 노드에 붙인 1~n의 일련번호와 1:1 대응되는 트리를 말함

· 중간에 빈 부분이 있으면 전이진 트리 될 수 없음


사향 이진 트리(Skewed Binary Tree)

· 사향 이진 트리는 루트 노드로부터 왼쪽 또는 오른쪽으로만 기울어진 트리, 즉 왼쪽 또는 오른쪽 자식이 없는 노드들로만 구성된 트리를 말함

· 왼쪽 사향 이진 트리 : 오른쪽 자식이 없는 노드들로만 구성된 트리

· 오른쪽 사향 이진 트리 : 왼쪽 자식이 없는 노드들로만 구성된 트리



036 이진 트리의 운행법(Traversal)


· 트리를 구성하는 각 노드들을 찾아가는 방법 :  운행법

· 이진 트리를 운행하는 방법은 산술식의 표기법과 연관성 가짐


① 트리의 운행법


· Preorder 운행 : Root → Left → Right 순으로 운행

· Inorder 운행 : Left → Root → Right 순으로 운행

· Postorder 운행 : Left → Right → Root 순으로 운행


② 수식의 표기법


산술식을 계산하기 위해 기억공간에 기억시키는 방법으로 이진 트리를 많이 사용함

이진 트리로 만들어진 수식을 인오더, 프리오더, 포스트오더로 운행하면 각각 중위(Infix), 전위(Prefix), 후위(Postfix) 표기법이 됨


· 전위 표기법(PreFix) : 연산자 → Left → Right, +AB

· 중위 표기법(InFix) : Left → 연산자 → Right, A+B

· 후위 표기법(PostFix) : Left → Right → 연산자, AB+


Infix 표기를 Postfix나 Prefix로 바꾸기

· Postfix나 Prefix는 스택을 이용하여 처리하므로 Infix는 Postfix나 Prefix로 바꾸어 처리


Postfix나 Prefix로 표기된 수식을 Infix로 바꾸기

· Postfix는 Infix 표기법에서 연산자를 해당 피연산자 두 개의 뒤로 이동한 것이므로 연산자를 다시 해당 피연산자 두 개의 가운데로 옮기면 됨

· Prefix는 Infix 표기법에서 연산자를 해당 피연산자 두 개의 앞으로 이동한 것이므로 연산자를 다시 해당 피연산자 두 개의 가운데로 옮기면 됨


③ 스레드 이진 트리(Threaded Binary Tree)


· 스레드 이진 트리는 이진 트리에서 발생하는 널 링크를 트리 운행에 필요한 다른 노드의 포인터로 사용하도록 고안된 트리

· 이진 트리를 이중 연결 리스트로 표현할 때 임의의 노드에 대한 자식 노드가 없는 부분의 링크 포인터로 Nil Pointer를 기억시키게 됨

· 스레드 이진 트리 표현 방법

- 어떤 노드의 왼쪽 링크 포인터가 Nil이면 그 노드의 직전에 검사된 노드를 가리키는 포인터로 사용하고, 오른쪽 링크 포인터가 Nil이면 그 노드의 직후에 검사될 노드를 가리키는 포인터로 사용

- 해당 노드의 직전, 직후 노드는 트리 운행법에 따라 방문한 노드의 순서대로 결정



037 그래프


① 그래프의 정의


· 그래프 G는 정점 V와 간선 E의 두 집합으로 이루어짐

· 통신망(Network), 교통망, 이항관계, 연립방정식, 유기화학 구조식, 무향선분 해법등에 응용됨

· Tree는 사이클이 없는 Graph


② 용어 정리


Loop : 한 정점에서 그 자신에 이어지는 간선 Loop


차수(Degree)

· 무방향 그래프 : 한 정점에 연결된 간선의 수

· 방향 그래프

- 진입 차수(Indegree) : 한 정점에 도착하는 방향 간선의 수

- 진출 차수(Outdegree) : 한 정점에서 출발하는 방향 간선의 수

- 차수(Degree) : 진입 차수 + 진출 차수


경로 : 임의의 정점에서 다른 정점으로 이르는 길

· 경로 길이(Path Length) : 경로상에 있는 간선들의 수

· 단순 경로 : 한 경로상에 있는 모든 간선이 서로 다를 떄의 경로, 즉 같은 간선을 두 번 이상 지나지 않는 경로

· 기본 경로 : 한 경로상에 있는 모든 정점이 유일할 때의 경로, 즉 같은 정점을 두 번 이상 지나지 않는 경로

· 사이클 : 같은 정점에서 시작과 끝이 이루어지는 경로

· 최대 사이클 : 사이클을 이루는 경로 중 최대 경로 길이


연결 요소 : 무방향 그래프에서의 최대 연결 서브 그래프


강력 연결 요소 : 방향 그래프에서 두 정점 사이의 간선이 양방향으로 서로 강력하게 연결되어 있는 요소, 즉 두 정점 사이에 방향 사이클이 이루어지는 요소


③ 인접행렬을 이용한 그래프의 표현 방법


④ 특수 그래프


최소 비용 신장 트리

· 최소 비용 신장 트리는 가중치가 가장 작은 간선들을 사이클을 이루지 않도록 연결시켜 만든 그래프


간선 작업 네트워크

· 간선 작업 네트워크는 프로젝트를 해결하기 위해 수행되는 작업 순서를 나타내는 방향 그래프

· 간선은 작업과 작업시간을 나타내고, 정점이 공정을 나타냄

· 임계 경로 : 최장 길이를 갖는 경로



038 정렬(Sort)의 개요


정렬은 파일을 구성하는 각 레코드를 특정 키 항목을 기준으로 오름차순 또는 내림차순으로 재배열하는 작엄


① 정렬 방식

    정렬은 크게 주기억장치에서 이루어지는 내부 정렬과 보조기억장치에서 이루어지는 외부 정렬로 구분됨


내부정렬

· 선택법 : 히프 정렬

· 삽입법 : 삽입 정렬, 쉘 정렬

· 교환법 : 버블 정렬, 선택 정렬, 퀵 정렬

· 병합법(합병법) : 2-Way Merge Sort

· 분배법(분산법) : 기수 정렬(Radix Sort)


외부 정렬

· 밸런스 병합 정렬

· 캐스케이드 병합 정렬

· 폴리파즈 병합 정렬

· 오실레이팅 병합 정렬


② 정렬 알고리즘 선택 시 고려 사항


· 데이터의 양

· 초기 데이터의 배열 상태

· 키 값들의 분포 상태

· 소용공간 및 작업 시간

· 사용 컴퓨터 시스템의 특성



039 내부 정렬


① 삽입 정렬(Insert Sort)


삽입 정렬은 가장 간단한 정렬 방식으로 이미 순서화된 파이렝 샐운 하나의 레코드를 순서에 맞게 삽입시켜 정렬

· 두 번째 키와 첫 번째 키를 비교해 순서대로 나열(1회전)하고, 이어서 세 번째 키를 첫 번째, 두 번째 키와 비교해 순서대로 나열(2회전)하고, 계속해서 n번째 키를 앞의 n-1개의 키와 비교하여 알맞은 순서에 삽입하여 정렬하는 방식


② 쉘 정렬(Shell Sort)


쉘 정렬은 삽입 정렬을 확장한 개념

· 입력 파일을 어떤 매개변수(h)의 값으로 서브파일을 구성하고, 각 서브파일을 Insertion 정렬 방식으로 순서 배열하는 과정을 반복하는 정렬 방식, 즉 임의의 레코드 키와 h만큼 떨어진 곳의 레코드를 비교하여 순서화되어 있지 않으면 서로 교환하는 것을 반복하는 정렬 방식

· 입력 파일이 부분적으로 정렬되어 있는 경우에 유리한 방식


③ 선택 정렬(Selection Sort)


선택 정렬은 n개의 레코드 중에서 최소값을 찾아 첫 번재 레코드 위치에 놓고, 나머지 (n-1)개 중에서 다시 최소값을 찾아 두 번째 레코드 위치에 놓는 방식을 반복하여 정렬하는 방식


④ 버블 정렬(Bubble Sort)


· 버블 정렬은 주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 정렬 방식

· 계속 정렬 여부를 플래그 비트(f)로 결정


⑤ 퀵 정렬(Quick Sort)


퀵 정렬은 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방법으로 키를 기준으로 작은 값은 왼쪽에, 큰 값은 오른쪽 서브파일로 분해시키는 방식

· 정렬 방식 중에서 가장 빠른 방식이며, 프로그램에서 되부름을 이용하기 때문에 스택(Stack) 필요


⑥ 힙 정렬(Heap Sort)


힙 정렬은 전이진 트리를 이용한 정렬 방식

· 구성된 전이진 트리를 Heap Tree로 변환하여 정렬


⑦ 2-Way 합병 정렬(Merge Sort)


2-Way Merge Sort는 이미 정렬되어 있는 두 개의 파일을 한 개의 파일로 합병하는 정렬방식

· 두 개의 키들을 한 쌍으로 하여 각 싸엥 대하여 순서 정함

· 순서대로 정렬된 각 쌍의 키들을 합병하여 하나의 정렬된 서브리스트로 만듦

· 위 과정에서 정렬된 서브리스트들을 하나의 정렬된 파일이 될 때가지 반복


⑧ 기수 정렬(Radix Sort) = Bucket Sort


기수 정렬은 Queue를 이용하여 자릿수별로 정렬하는 방식

· 레코드의 키 값을 분석하여 같은 수 또는 같은 문자끼리 그 순서에 맞는 버킷에 분배하였다가 버킷의 순서대로 레코드를 꺼내어 정렬



040 검색(Search)


검색은 컴퓨터를 이용해서 기억공간에 보관중인 특정 레코드를 찾아내는 작업


① 선형 검색(Linear Search)


·  선형 검색은 순서화되어 있지 않은 파일에서 순차적으로 검색하는 방식으로, 찾고자 하는 Key 값을 첫 번재 레코드 Key 값부터 차례로 비교하여 검색하는 방식

· 순차 검색

· 프로그램 작성이 가장 쉬움


② 제어 검색(Control Search)


· 제어 검색은 반드시 순서화된 파일이어야 검색 가능

· 한 번의 비교 동작이 끝난 후 비교 대상이 된 레코드를 다음에 비교할 대상을 선택하는 기준으로 이용하여 검색하는 방식


이분 검색(이진 검색, Binary Search
)

· 이분 검색은 전체 파일을 두 개의 서브파일로 분리해 가면서 Key 레코드를 검색하는 방식

· 찾고자 하는 Key 값을 파일의 중간 레코드 Key 값과 비교하면서 검색하는 방식

· 비교 회수를 거듭할 대마다 검색 대상이 되는 데이터 수가 절반으로 줄어듦으로 탐색 효율이 좋고 탐색 시간이 적게 소요됨

· 중간 레코드 번호 M=(F+L)/2(단, F:첫 번째 레코드 번호, L:마지막 레코드 번호)


피보나치 검색(Fibonacci Search)

· 피보나치 검색은 피보나치 수열에 따라 다음에 비교할 대상을 선정하여 검색하는 방식

· 이분 검색에는 중간 레코드 번호를 계산하기 위해서 나눗셈이 필요하지만 피보나치 검색은 가감산만을 이용하기 때문에 효율이 우수


보간 검색(Interpolation Search)

· 보간 검색은 찾으려는 레코드가 있음직한 부분의 키를 택하여 거맥하는 방식

· 선정 레코드 번호 = (찾으려는 키 값(추측)-최소키 값) / (최대키 값 - 최소키 값) × 레코드 수

· 찾으려는 레코드 근처에서부터 찾아가기 때문에 검색시간이 빠르지만, 예측을 해야하므로 실제로는 프로그래밍이 불가능함


블록 검색(Block Search)

· 블록 검색을 위해서는 파일을 구성하는 레코드들을 다음과 같이 구성해 놓아야 함

-파일을 구성하는 레코드들을 여러 개의 Block으로 분할하여 Block 단위는 순서화시키고, Block 내의 자료는 순서화와 관계없이 저장시킴

- Index 부분을 두어, 각 Block마다 최대 레코드 키 값을 가지는 레코드 번호를 저장시킴

· 인덱스를 이용하여 찾고자 하는 레코드가 어느 Block에 속하는지 검색한 후, 해당 Block 내에서는 선형 검색을 함


이진 트리 검색(Binary Tree Search)

· 이진 트리 검색은 파일을 이진 검색 트리로 구성하여 검색하는 방식

· 검색 과정

① 찾고자 하는 레코드 Key 값 X가 이진 검색 트리에 존재하는지 조사하려면 먼저 Root Node와 비교

② 만약 X가 Root Node의 Key 값보다 작으면 왼쪽 Subtree로 검색을 계속하고, 크면 오른쪽 Subtree로 검색을 계속하고, 같으면 검색종료

③ i가 0인 경우 검색에 실패한 경우. 즉, X가 임의의 노드 값과 같지 않아서 왼쪽 또는 오른쪽 자식을 찾아가기 위해 그 노드의 L.L 또는 R.L 포인터를 i에 기억시켰을 때, i에 기억시킨 포인터 값이 Nill Pointer인 경우 찾고자 하는 레코드가 없기 대문



041 검색 - 해싱(Hashing)


① 해싱의 개요


해싱은 Hash Table이라는 기억공간을 할당하고, 해시 함수를 이용하여 레코드 키에 대한 Hash Table 내의 Home Address를 계산한 후 주어진 레코드를 해당 기억장소에 저장하거나 검색 작업을 수행하는 방식

· 해싱은 DAM(직접 접근) 파일을 구성할 때 사용되며, 접근 속도는 빠르나 기억공간이 많이 요구됨

· 다른 방식에 비해 검색 속도가 가장 빠름

· 삽입, 삭제 작업의 빈도가 많을 때 유리한 방식

· 키-주소 변환 방법이라고도 부름


해시 테이블(Hash Table, 해시표)

· 해시 테이블은 레코드를 한 개 이상 보관할 수 있는 Bucket들로 구성된 기억공간으로, 보조기억장치에 구성할 수도 있고 주기억장치에 구성할 수도 있음


[그림 3] 해시 테이블  * n크기의 3개의 슬롯으로 구성된 버킷을 가진 해시표

· 버킷(Bucket) : 하나의 주소를 갖는 파일의 한 구역을 의미하며, 버킷의 크기는 같은 주소에 포함될 수 있는 레코드 수

· 흘록(Slot) : 한 개의 레코드를 저장할 수 있는 공간으로 n개의 슬롯이 모여 하나의 버킷을 형성

· Collision(충돌 현상) : 서로 다른 두 개 이상의 레코드가 같은 주소를 갖는 현상

· Synonym : 충돌로 인해 같은 Home Address를 갖는 레코드들의 집합

· Overflow : 계산된 Home Address의 Bucket 내에 저장할 기억공간이 없는 상태로, Bucket을 구성하는 Slot이 여러 개일 때 Collision은 발생해도 Overflow는 발생하지 않을 수 있음


② 해싱 함수(Hashing Function)


제산법

제산(Division)법은 레코드 키(K)를 해시표의 크기보다 큰 수 중에서 가장 작은 소수(Prime, Q)로 나눈 나머지를 홈 주소로 삼는 방식

h(K) = K mod Q


제곱법

제곱(Mid-Square)법은 레코드 키 값(K)을 제곱한 후 그 중간 부분의 값을 홈 주소로 삼는 방식


폴딩법

폴딩(Folding)법은 레코드 키 값(K)을 여러 부분으로 나눈 후 각 부분의 값을 더하거나 XOR(배타적 논리합)한 값을 홈 주소로 삼는 방식

· Shift Folding : 각 부분의 값들을 왼쪽 또는 오른쪽 끝자리에 맞추어서 계산

· Fold Boundary : 경계 지점을 접었을 때 마주치는 자리 그대로 계산


기수(Radix) 변환법

기수 변환법은 키 숫자의 진수를 다른 진수로 변환시켜 주소 크기를 초과한 높은 자릿수는 절단하고, 이를 다시 주소 범위에 맞게 조정하는 방법


대수적 코딩법

대수적 코딩법은 키 값을 이루고 있는 각 자리의 비트 수를 한 다항식의 계수로 간주하고, 이 다항식을 해시표의 크기에 의해 정의된 다항식으로 나누어 얻은 나머지 다항식의 계수를 홈 주소로 삼는 방식


계수 분석법(숫자 분석법)

계수 분석법은 키 값을 이루는 숫자의 분포를 분석하여 비교적 고른 자리를 필요한 만큼 택해서 홈 주소로 삼는 방식


무작위법

무작위법은 난수를 발생시켜 나온 값을 홈 주소로 삼는 방식


③ Overflow 해결 방법


Collision이 발생했을 때 그 버킷에 저장할 Slot이 없으면 Overflow가 되는데, 이것을 해결하기 위해서는 다음과 같은 방법 필요


개방 주소법(Open Addressing)

선형 방법이락도 하는데, Collision이 발생했을 때 순차적으로 그 다음 빈 버킷을 찾아 저장하는 방법


폐쇄 주소법(Close Addressing)

Overflow된 레코드들을 별도의 Overflow 영역에 저장하고 Chain(Pointer)으로 홈 버킷에 연결

· Direct Chaining : 해시표 내의 빈 자리에 Overflow 레코드 보관

· Indirect Chaining : 해시표와는 별도의 기억공간에 Overflow 레코드 보관


재해싱(Rehashing)

Collision이 발생하면 새로운 해싱 함수로 새로운 홈 주소를 구하는 방식 



042 인덱스 구조


① 인덱스의 개념


인덱스는 데이터 레코드를 빠르게 접근하기 위해서 구성하는 것으로 다음과 같은 특징이 있음

· 인덱스는 데이터가 저장된 물리적 구조와 밀접한 관계가 있음

· 인덱스는 레코드가 저장된 물리적 구조에 접근하는 방법을 제공

· 인덱스를 통해서 파일의 레코드에 대한 액세스를 빠르게 수행 가능

· 레코드의 삽입과 삭제가 수시로 일어나는 경우에는 인덱스의 개수를 최소로 하는 것이 효율적


② m-원 검색 트리(m-Way Search Tree)


· 이진 검색 트리에서는 한 노드가 한 개의 키와 두 개의 Subtree를 갖는 반면 m 원 검색 트리는 한 노드가 최대 m-1개의 키와 m개의 Subtree를 갖도록 구성됨

· m-원 트리 구조는 키 값의 일부분이 동일한 문자열이나 숫자로 구성된 자료를 표현하는 데 효율적

· 이진 검색 트리에 비해 트리 높이가 얕아져 특정 노드의 검색시간 감소

· 삽입, 삭제시 트리 균형을 유지하기 위항 복잡한 연산이 필요해지는 단점이 있음


③ B-트리


B-트리는 Index를 구성하는 방법으로 가장 많이 사용하는 균형된 m원 검색 트리


B-트리의 특징

· Root와 Leaf를 제외한 모든 노드는 최소 m/2, 최대 m개인 Subtree를 갖음

· Root는 Leaf가 아닌 이상 적어도 두 개의 Subtree를 가짐

· 모든 Leaf는 같은 Level에 있음

· Leaf가 아닌 노드의 키 값 수는 그 노드의 Subtree 수보다 한 개 적으며, 각 Leaf Node수는 최소 m/2-1개, 최대 m-1개의 키 값들을 갖음

· 한 노드 안에 있는 키 값들은 오름차순을 유지해야 함

· 탐색, 추가, 삭제는 루트로부터 시작함

· 삽입과 삭제를 하여도 데이터 구조의 균형을 유지해야 함


④ B+-트리


B+-트리는 B 트리의 변형으로 Leaf가 아닌 노드로 된 인덱스 세트와 리프 노드로만 구성된 순차 데이터 세트로 구성

· 인덱스 세트에 있는 키 값을 리프 노드에 있는 키 값을 찾아갈 수 있는 경로로만 제공됨

· 인덱스 세트에 있는 모든 키 값이 리프 노드에 다시 나타나므로 리프 노드만을 이용한 순차 처리가 가능

· B+-트리는 B-트리의 추가, 삭제 시 발생하는 노드의 분열과 합병 연산 과정을 줄일 수 있는 트리 구조


B+-트리의 특징

· 0, 2 또는 m/2에서 m개 사이의 Subtree를 갖음

· Root와 Leaf를 제외한 모든 노드는 최소 m/2, 최대 m개인 Subtree를 갖음

· 모든 Leaf는 같은 Level에 있음

· Leaf가 아닌 노드의 키 값 수는 그 노드의 Subtree 수보다 한 개 적으며, 각 Leaf Node수는 최소 m/2-1개, 최대 m-1개의 키 값들을 갖음

· 한 노드 안에 있는 키 값들은 오름차순을 유지해야 하며 리스트로 연결된 리프 노드는 데이터 파일의 순차 세트를 나타냄


⑤ 트라이(Tri) 색인


트라이 색인은 탐색을 위한 키 값을 직접 표현하지 않고 키를 구성하는 문자나 숫자 자체의 순서로 키 값을 구성하는 구조

· 키 값이 문자열 또는 숫자일 경우 일련의 키 값드렝 대해 일부분이 같은 문자나 숫자로 구성되었을 때 적합

· 가변 길이의 키 값을 효과적으로 나타낼 수 있음

· 삽입 및 삭제 시 노드의 분열과 병합이 없음

· 트라이의 차수는 키 값을 표현하기 위해 사용하는 문자의 수에 의해 결정됨

· 키 값의 분포를 미리 예측할 수 있다면 기억장소 절약 가능

· 트라이의 크기는 나타내려고 하는 키 값의 기수와 키 필드 길이에 의해 결정됨



043 파일 편성


① 순차 파일(Sequential File) = 순서 파일


순차 파일은 입력되는 데이터들을 논리적인 순서에 따라 물리적 연속 공간에 순차적으로 기록하는 방식

· 급여 관리 등과 같이 변동 사항이 크지 않고 기간별로 일괄 처리르 주로 하는 경우에 적합

· 주로 순차 접근이 가능한 자기 테이프에서 사용


순차 파일의 장점

· 기록 밀도가 높아 기억공간을 효율적으로 사용 가능

· 매체 변환이 쉬워 어떠한 매체에도 적용 가능

· 레코드가 키 순서대로 편성되어 취급이 용이

· 레코드를 기록할 때 사용한 키 순서대로 레코드를 처리하는 경우, 다른 편성법보다 처리 속도가 빠름


순차 파일의 단점

· 파일에 새로운 레코드를 삽입하거나 삭제하는 경우 파일 재구성을 위해 전체를 복사해야 하므로 시간이 많이 소요됨

· 데이터 검색 시 처음부터 순차적으로 검색하기 때문에 검색 효율이 낮고, 시간 및 응답 시간이 느림


② 색인 순차 파일(Indexed Sequential File)


색인 순차 파일은 순차 처리와 랜덤 처리가 모두 가능핟록 레코드들을 키 값 순으로 정렬시켜 기록하고, 레코드의 키 항목만을 모은 색인을 구성하여 편성하는 방식

· 색인을 이용한 순차적인 접근 방법을 제공하여 ISAM이라고 함

· 레코드를 참조할 때 색인을 탐색한 후 색인이 가리키는 포인터(주소)를 사용하여 직접 참조할 수 있음

· 일반적으로 자기 디스크에 많이 사용되며, 자기 테이프에서는 사용할 수 없음


색인 순차 파일의 구성

색인 순차 파일은 기본 구역, 색인 구역, 오버플로 구역으로 구성됨

· 기본 구역(Prime Area) : 실제 레코드들을 기록하는 부분으로 각 레코드는 키 값순으로 저장됨

· 색인 구역(Index Area) : 기본 구역에 있는 레코드들의 위치를 찾아가는 색인이 기록되는 부분

- 트랙 색인 구역

· 기본 구역의 한 트랙 상에 기록되어 있는 데이터 레코드 중의 최대키 값과 주소가 기록되는 색인으로, 한 실린더당 하나씩 만들어짐

· 처리할 레코드가 실제로 어느 트랙에 기록되어 있는지를 판별할 수 있게 함

- 실린더 색인 구역

· 각 트랙 색인의 최대키 값과 해당 레코드가 기록된 실린더의 정보가 기록되는 색인으로, 한 파일당 하나씩 만들어짐

- 마스터 색인 구역

· 실린더 색인 구역의 정보가 많으 경우 그것을 일정한 크기의 블록으로 구성하는데, 이대 해당 레코드가 어느 실린더 색인 구역에 기록되어 있는지를 기록하는 색인


· 오버플로 구역(Overflow Area) : 기본 구역에 빈 공간이 없어서 새로운 레코드의 사빕이 불가능할 때를 대비하여 예비적으로 확보해 둔 부분

- 실린더 오버플로 구역

· 각 실린더마다 만들어지는 오버플로 구역으로, 해당 실린더의 기본 구역에서 오버플로된 데이터를 기록

- 독립 오버플로 구역

· 실린더 오버플로 구역에 더 이상 오버플로된 데이터를 기록할 수 없을 때 사용하는 예비 공간으로, 시린더 오버플로 구역과는 별도로 만들어짐


색인 순차 파일의 장점

· 순차 처리와 랜덤 처리가 모두 간으하므로, 목적에 따라 융통성 있게 처리할 수 있음

· 효율적인 검색이 가능하고 레코드의 삽입, 삭제, 갱신이 용이

· 레코드를 추가 및 삽입하는 경우, 파일 전체를 복사할 필요가 없음


색인 순차 파일의 단점

· 색인 구역과 오버플로 구역을 구성하기 위한 추가 기억공간이 필요함

· 파일 사용중 오버플로 레코드가 많아지면 파일을 재편성해야 함

· 파일이 정렬되어 있어야 하므로 추가, 삭제가 많으면 효율이 떨어짐

· 색인을 이용한 액세스를 하기 때문에 액세스 시간이 랜덤 편성 파일보다 느림


※ 정적 인덱스와 동적 인덱스

· 정적 인덱스 

- 정적 인덱스는 데이터 파일에 레코드가 삽입되거나 삭제되어도 인덱스의 구조가 변경하지 않고 내용만 변하는 구조로, 정적 인덱스를 사용하는 대표적인 파일 : ISAM


· 동적 인덱스

- 동적 인덱스는 인덱스 파일이나 데이터 파일을 블록으로 구성하고 각 블록에는 추가로 삽입될 레코드를 감안하여 빈 공간을 미리 예비해 두는 인덱스 방법으로, 동적 인덱스를 사용하는 대표적인 파일 :  VSAM

- 블록에 레코드가 가득차면 동적으로 분열되고, 일정 수의 레코드가 유지되지 않는 블록은 합병됨


③ VSAM 파일


VSAM(Virtual Storage Access Method) 파일은 동적 인덱스 방법을 이용한 색인 순차 파일


· VSAM 파일은 제어 구간, 제어 구역, 순차 세트, 인덱스 세트로 구성됨

- 제어 구간(Control Interval) : 데이터 레코드가 저장되는 부분

- 제어 구역(Control Area) : 몇 개의 제어 구간을 모아 놓은 것

- 순차 세트(Sequence Set) : 제어 구역에 대한 인덱스를 저장한 것

- 인덱스 세트(Index Set) : 순차 세트의 상위 인덱스

· VSAM 파일은 기본 구역과 오버플로 구역을 구분하지 않음

· 레코드를 삭제하면 그 공간을 재사용 가능

· 제어 구간에 가변 길이 레코드를 쉽게 수용 가능


④ 직접 파일(Direct File)


직접 파일은 파일을 구성하는 레코드를 특정 순서 없이 임의의 물리적 저장공간에 기록하는 것으로, 랜덤 파일, DAM 파일이라고도 함


· 레코드에 특정 기준으로 키가 할당되며, 해시 함수를 이용하여 이 키에 대한 보조기억장치의 물리적 상대 레코드 주소를 계산한 후 해당하는 주소에 레코드를 저장

· 레코드는 해시 함수에 의해 계산된 물리적 주소를 통해 접근 가능

· 임의 접근이 가능한 자기 디스크나 자기 드럼을 사용


직접 파일의 장점

· 직접 접근 기억장치(DASD)의 물리적 주소를 통하여 파일의 각 레코드에 직접 접근하거나 기록할 수 있으며, 접근 및 기록의 순서에는 제약이 없음

· 접근 시간이 바르고 레코드의 삽입, 삭제, 갱신이 용이

· 어떤 레코드라도 평균 접근 시간 내에 검색이 가능


직접 파일의 단점

· 레코드의 주소 변환 과정이 필요하며, 이 과정으로 인해 시간이 소요됨

· 기억공간의 효율이 저하될 수 있음

· 기억장치의 물리적 구조에 대한 지식이 필요하고, 프로그래밍 작업이 복잡함

· 충돌 발생할 염려 있으므로, 이를 위한 기억공간의 확보가 필요함


⑤ 역 파일(Inverted File)


역 파일은 특정 항목을 여러 개의 색인으로 만들어 항목별 특성에 맞게 작업할 수 있도록 한 파일로, 다중 키 파일에 속함


· 하나 또는 몇 개의 색인값을 결합하여 레코드의 주소 결정 가능

· 각 응용마다 적합한 색인을 별도로 구현 가능

· 새로운 레코드를 파일 중간에 삽입하기 쉽고, 검색 속도가 빠름

· 데이터 파일에 접근하지 않아 질의 응답 시간이 줄어들고, 처리가 비교적 쉬움

· 질의를 만족하는 레코드 검색 시 한 번씩만 접근하면 됨

· 색인의 각 항목들의 길이가 가변적


⑥ 다중 리스트 파일(Multi-List File)


다중 리스트 파일은 다중 키 파일의 한 종류로, 각 키에 대하여 색인을 만든 다음 각 데이터 레코드들 간에 다중 리스트를 구축하여 구성한 파일


· 색인은 동일한 키 값을 갖는 데이터 레코드 중 하나의 레코드에 대한 포인터만을 갖고, 후속 데이터는 포인터로 추적하도록 구성

· 색인의 각 항목들의 길이가 고정적이므로 관리가 용이하며 수정, 삭제, 전체 검색이 효율적 


다중 링 파일(Multi-Ring File)


다음 링 파일은 같은 특성을 가질 레코드들을 일련의 포인터로 연결하여 구성한 것


· 같은 항목값을 가진 레코드들을 한꺼번에 처리하는 데 효ㅘ적

· 기억 장소가 절약되고, 자료의 중복성을 배제 할 수 있음

· 레코드 형식이 다른 경우에도 처리가 가능




출처 : 2017 시나공 정보처리기사 필기


정보처리기사 필기 - 1과목 데이터베이스


4장 데이터베이스 고급 기능


024 트랜잭션의 개념


① 트랜잭션의 정의


· 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미

· 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위

· 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위

· 하나의 트랜잭션은 Commit되거나 Rollback됨


② 트랜잭션의 특징


데이터 무결성(Integrity)을 보장하기 위하여 DBMS의 트랜잭션이 가져야 할 특성


Atomicity(원자성)

· 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 함

· 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 함


Consistency(일관성)

· 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환

· 시스템이 가지고 있는 고정 요소는 트랜재션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 함


Isolation(독립성, 격리성, 순차성)

· 둘 이상의 트랜재션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없음

· 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없음


Durability(영속성, 지속성)

· 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 함


③ Commit, Rollback 연산

Commit 연산

· Commit 연산은 한 개의 논리적인 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고, 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산


Rollback 연산

· Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산

· Rollback 시에는 해당 트랜잭션을 재시작하거나 폐기함


④ 트랜잭션의 상태



[그림1] 트랜잭션의 상태


· 활동(Active) : 트랜잭션이 실행중인 상태

· 실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태

· 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

· 부분완료(Partially Comitted) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태

· 완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태



025 회복(Recovery)


① 회복의 개념


- 회복의 정의

회복은 트랜잭션들을 수행하는 도중 장애기 발생하여 데이터베이스가 손상되었을 때 손상되기 이전의 정상 상태로 복구하는 작엄


장애의 유형

· 트랜잭션 장애 : 입력 데이터 오류, 불명확한 데이터, 시스템 자원 요구의 과다 등 트랜잭션 내부의 비정상적인 상황으로 인하여 프로그램 실행이 중지되는 현상

· 시스템 장애: 데이터베이스에 손상을 입히지는 않으나 하드웨어 오동작, 소프트웨어의 손상, 교착상태 등에 의해 모든 트랜잭션의 연속적인 수행에 장애를 주는 현상

· 미디어 장애 : 저장장치인 디스크 블록의 손상이나 디스크 헤드의 충돌 등에 의해 데이터베이스의 일부 또는 전부가 물리적으로 손상된 상태


회복 관리기(Recovery Management)

· 회복 관리기는 DBMS의 구성 요소

· 회복관리기는 트랜잭션 실행이 성공적으로 완료되지 못하면 트랜재션이 데이터베이스에 생성했던 모든 변화를 취소(Undo)시키고, 트랜잭션 수행 이전의 원래 상태로 복구하는 역할 담당

· 메모리 덤프, 로그(Log)를 이용하여 회복 수행


 ※ 취소(Undo) : Log에 보관한 정보를 이용하여 가장 최근에 변경된 내용부터 거슬러 올라가면서 트랜잭션 작업을 취소하여 원래의 DB로 복구

 ※ 덤프(Dump) : 주기적으로 데이터베이스 전체를 복사해 두는 것

 ※ 로그(Log) : 갱신되기 전후의 내용을 기록하는 별도의 파일로, 저널이라고도 함  


② 회복 기법


연기 갱신 기법(Deferred Update)

· 연기 갱신 기법은 트랜잭션이 성공적으로 완료될 때까지 데이터베이스에 대한 실질적인 갱신을 연기하는 방법

· 트랜잭션이 수행되는 동안 갱신된 내용은 일단 Log에 보관

· 트래잭션의 부분 완료(성공적인 완료 직전) 시점에 Log에 보관한 갱신 내용을 실제 데이터베이스에 기록

· 트랜잭션이 부분 완료되기 전에 장애가 발생하여 트랜잭션이 Rollback되면 트랜잭션이 실제 데이터베이스에 영향을 미치지 않았기 때문에 어떠한 갱신 내용도 취소(Undo)시킬 필요 없이 무시하면 됨

· 재시도(Redo) 작업만 가능(Redo : 덤프와 로그를 이용하여 가장 최근의 정상적인 데이터베이스로 회복시킨 후 트랜잭션을 재실행)


즉각 갱신 기법(Immediate Update)

· 즉각 갱신 기법은 트랜잭션이 데이터를 갱신하면 트랜잭션이 부분 완료 되기 전이라도 즉시 실제 데이터베이스에 반영하는 방법

· 장애가 발생하여 회복 작업할 경우를 대비하여 갱신된 내용들은 Log에 보관

· 회복 작업을 할 경우에는 Redo와 Undo 모두 사용 가능


그림자 페이지 대체 기법(Shadow Paging)

· 그림자 페이지 대체 기법은 갱신 이전의 데이터베이스를 일정 크기의 페이지 단위로 구성하여 각 페이지마다 복사본인 그림자 페이지로 별도 보관해 놓고, 실제 페이지를 대상으로 트랜잭션에 의한 갱신 작업을 하다가 장애가 발생하여 트랜잭션 작업을 Rollback시킬 때, 갱신된 이후의 실제 페이지 부분에 그림자 페이지를 대체하여 회복시키는 기법

· 로그, Undo 및 Redo 알고리즘 필요 없음


검사점 기법(Check Point)

· 검사점 기법은 트랜잭션 실행 중 특정 단계에서 재실행할 수 있도록 갱신 내용이나 시스템에 대한 상황 등에 관한 정보와 함께 검사점을 로그에 보관해두고, 장애 발생 시 트랜잭션 전체를 철회하지 않고 검사점부터 회복 작업을 하여 회복시간을 절약하도록 하는 기법



026 병행제어(Concurrency Control)


① 병행제어의 정의


병행제어(Concurrency Control)란 다중 프로그램의 이점을 활용하여 동시에 여러 개의 트랜잭션을 병행수행할 때, 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호작용을 제어하는 것


※ 다중 프로그램의 이점 : 프로세서의 이용률 증가 / 전체 트랜잭션의 작업 처리율 향상


② 병행제어의 목적


· 데이터베이스의 공유 최대화

· 시스템의 활용도 최대화

· 데이터베이스의 일관성 유지

· 사용자에 대한 응답시간 최소화


※ 병행수행과 직렬성

· 다중 프로그램 환경에서 여러 개의 트랜잭션을 병행수행한다는 것은 같은 시간에 여러 개의 명령을 동시에 실행한다는 것이 아니라, 시분할이나 입·출력 인터럽트 기법 등을 이용하여 일정한 시간 내에 각 트랜잭션에 있는 명령들이 시간적으로 번갈아 실행되는 것

· 병행수행된 각각의 트랜잭션 결과는 각 트랜잭션을 독자적으로 수행시켰을 때의 결과와 같아야 하는데, 이를 직렬성(Serializability) 또는 직렬화 가능성이라고 함


③ 병행수행의 문제점


병행제어 기법에 의한 제어 없이 트랜잭션들이 데이터베이스에 동시에 접근하도록 허용할 경우 다음과 같은 문제점 발생

문제점

의미

 갱신 분실

 (Lost Update)

 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상

 비완료 의존성

 (Uncommitted Dependency)

 · 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상

 · 임시 갱신

 모순성

 (Inconsistency)

 · 두 개의 트랜잭션이 병행수행될 때 원치 않는 자료를 이용함으로써 발생하는 문

 · 불일치 분석(Inconsistent Analysis)

 연쇄 복귀

 (Cascading Rollback)

 병행수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback하는 경우 다른 트랜잭션도 함께 Rollback되는 현상


④ 병행제어 기법의 종류

로킹(Locking)
· 로킹은 주요 데이터의 액세스를 상호 배타적으로 하는 것
· 트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 Lock(잠금)을 요청해서 Lock이 허락되어야만 그 로킹 단위를 액세스할 수 있도록 하는 기법

※ 로킹 단위(Locking Granularity)
· 병행제어에서 한꺼번에 로킹할 수 있는 객체의 크기
· 데이터베이스, 파일, 레코드, 필드 등은 로킹 단위가 될 수 있음
· 로킹 단위가 크면 로크 수가 작아 관리하기 쉽지만 병행성 수준이 낮아지고, 로킹 단위가 작으면 로크 수가 많아 관리하기 복잡해 오버헤드가 증가하지만 병행성 수준이 높아짐
※ 병행성 수준 : 병행성 수준이 낮다는 것은 데이터베이스 공유도가 감소한다는 의미이고, 병행성 수준이 높다는 것은 데이터베이스 공유도가 증가한다는 의미

· 로킹의 종류
- 공유 로크
- 배타 로그
- 의도 로크
- 의도 공유 로크
- 배타 의도 로크
- 공유 의도 독점 로크

· 2단계 로킹(Two-Phase Locking) 규약
- 각 트랜잭션의 로크 요청과 해제(Unlock) 요청을 2단계로 실시
- 직렬성을 보장하는 대표적인 로킹 규약
- 직렬성을 보장하는 장점이 있지만, 교착상태를 예방할 수 없다는 단점이 있음

※ 로킹 규약(Locking Protocol)
· 병행제어에서 각 트랜잭션이 관련 자료에 대해 로크를 얻고 반납하는 데 지켜야 할 일련의 규정
· 로킹 규약에 의해 실행 가능한 스케줄의 경우의 수가 제한 받음
· 스케줄의 경우의 수가 적을수록 직렬성을 보장하는 스케줄을 찾기 쉬워짐

타임 스탬프 순서(Time Stamp Ordering)
· 직렬성 순서를 결정하기 위해 트랜잭션 간의 처리 순서를 미리 선택하는 기법들 중에서 가장 보편적인 방법
· 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 시간표를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법
· 교착상태가 발생하지 않음

최적 병행수행(검증 기법, 확인 기법, 낙관적 기법)
병행수행하고자 하는 대부분의 트랜잭션이 판독 전용(Read Only) 트랜잭션일 경우, 트랜잭션 간의 충돌률이 매우 낮아서 병행제어 기법을 사용하지 않고 실행되어도 이 중의 많은 트랜잭션은 시스템의 상태를 일관성 있게 유지한다는 점을 이용한 기법

다중 버전 기법
· 타임 스탬프의 개념을 이용하는 기법으로, 다중 버전 타임 스탬프 기법이라고도 함
· 타임 스탬프 기법은 트랜잭션 및 데이터들이 이용될 때의 시간을 시간표로 관리하지만, 다중 버전 기법은 갱신될 때마다의 버전을 부여하여 관리


027 무결성(Integrity)


무결성이란 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 저장값이 일치하는 정확성 의리

무결성 제약 조건 : 데이터베이스에 들어 있는 데이터의 정확성(일관성)을 보장하기 위해 부정확한 자료가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약 조건


① 무결성을 유지하는 방법


· 대표적으로 사용되는 방법은 중앙 통제에 의한 데이터 갱신, 이 방법은 검증 프로그램을 이용하여 모든 갱신 처리 과정에서 반드시 검증 단계를 거치도록 통제함

· 검증 프로그램이 무결성을 검증하기 위해 무결성 규정을 사용

- 규정 이름 : 무결성 규정을 참조할 때 사용하는 식별자

- 트리거(Trigger) 조건 : 트랜잭션의 접근 유형 및 데이터, 검사할 시기 명시

- 프레디킷(제약 조건) : 무결성을 위한 검사 조건

- 위반 조치 : 검사 결과 무결성 위반이 발견되었을 때 처리할 조치


② 무결성의 종류


 널 무결성

 릴레이션의 특징 속성값이 Null이 될 수 없도록 하는 규정

 고유 무결성

 릴레이션의 특정 속성에 대해서 각 튜플이 갖는 값들이 서로 달라야 한다는 규정

 참조 무결성

 외래키 값은 Null이거나 참조 릴레이션의 기본키 값과 동일해야 한다는 규정.

 즉 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다는 규정

 도메인 무결성

 특정 속성의 값이, 그 속성이 정의된 도메인에 속한 값이어야 한다는 규정

 키 무결성

 하나의 테이블에는 적어도 하나의 키가 존재해야 한다는 규정

 관계(Relationship) 무결성

 릴레이션에 어느 한 튜플의 삽입 가능 여부 또는 한 릴레이션과 다른 릴레이션의 튜플들 사이의 관계에 대한 적절성  여부를 지정한 규정

 개체 무결성

 기본 테이블의 기본키를 구성하는 어떤 속성도 Null 값이나 주복값을 가질 수 없다는 규정



028 보안(Security)


① 데이터베이스 보안의 개요


· 데이터베이스 보안이란 데이터베이스의 일부분 또는 전체에 대해서 권한이 없는 사용자가 액세스하는 것을 금지하기 위해 사용되는 기술

· 보안을 위한 데이터 단위는 테이블 전체로부터 특정 테이블의 특정한 행과 열 위치에 있는 특정한 데이터 값에 이르기까지 다양

· 데이터베이스 사용자들은 일반적으로 서로 다른 객ㅊ에 대하여 다른 접근권리 또는 권한을 갖게 됨

· 데이터베이스 보안 기법 :  암호화 기법, 권한 부여 기법이 있으며, 권한 부여 기법에는 뷰(View) 기법, GRANT/REVOKE 기법


※ 무결성과 보안

 무결성

보안 

 권한이 있는 사용자로부터 데이터베이스를 보호하는 것

권한이 없는 사용자로 데이터베이스를 보호하는 것 

데이터베이스 사용자들이 데이터베이스를 사용하고자 할 때 정확하게 사용할 수 있도록 보장하는 것 

데이터베이스 사용자들이 데이터베이스를 사용하고자 할 때 언제든지 사용할 수 있도록 보장하는 것 


② 암호화 기법


암호화 과정

[그림 2] 암호화 과정

· 암호화(Encryption) 과정 : 암호화되지 않은 평문을 정보 보호를 위해 암호문으로 바꾸는 과정 

· 복호화(Decryption) 과정 : 암호문을 원래의 평문으로 바꾸는과정


개인키 암호 방식(Private Key Encryption) = 비밀키 암호 방식

·  비밀키 암호화 기법은 동일한 키로 데이터를 암호화하고 복호화함

· 데이터베이스 생성자는 평문의 정보 M을 암호화 알고리즘 E와 개인키 K를 이용하여 암호문 C로 바꾸어 저장시켜 놓고, 사용자가 그 데이터베이스에 접근하려면 복호화 알고리즘 D와 개인키 K를 이용하여 평문의 정보로 바구어 이용하는 방법

· 비밀키 암호화 기법은 대칭 암호 방식 또는 단일키 암호화 방식이라고도 함

· 비밀키는 제3자에게는 노출시키지 않고 데이터베이스 사용 권한이 있는 사용자만 나누어 가짐

· 종류 : 전위 기법, 대체 기법, 대수 기법, 합성 기법(DES, LUGIFER)

· 장점 : 암호화/복호화 속도가 빠르며, 알고리즘이 단순하고 파일 크기가 작음

· 단점 : 사용자의 증가에 따라 관리해야 할 키의 수가 상대적으로 많아짐


※ DES 기법

DES(Data Encryption Standard)는 개인키 암호 방식의 대표적인 알고리즘으로서, 64Bit의 평문 블록을 56Bit의 16개 키를 이용하여 16회의 암호 계산 단계를 거쳐 64Bit의 암호문을 얻음


공개키 암호 방식(Public Key Encryption)

· 공개키 암호화 기법은 서로 다른 키로 데이터를 암호화하고 복호화함

· 데이터를 암호화할 때 사용하는 키(공개키, Public Key)는 데이터베이스 사용자에게 공개하고, 복호화할 때의 키(비밀키, Secret Key)는 관리자가 비밀리에 관리하는 방법

· 공개키 암호화 기법은 비대칭 암호 방식이라고도 하며, 대표적으로 RSA(Rivest Shamir Adleman)가 있음

· 장점 : 키의 분배가 용이하고, 관리해야 할 키의 개수가 적음

· 단점 : 암호화/복호화 속도가 느리며, 알고리즘의 복잡하고 파일 크기가 크다


③ 권한 부여 기법


· 권한 부여 기법은 일반적으로 사용자들이 서로 다른 객체에 대하여 서로 다른 접근 권한을 갖게 설정함

· 권한 부여 기법에서 보안을 위한 데이터 단위는 테이블 전체나 특정한 행, 열에 있는 데이터 값이 될 수 있음


뷰 기법 - 뷰(View)에 권한을 명시하는 기법


GRANT/REVOKE 기법

· DBA가 GRANT/REVOKE 명령으로 권한을 부여하고 취소시키는 방법

- GRANT : 권한 부여 명령

- REVOKE : 권한 취소 명령


· 사용자 등급 지정 및 해제

- GRANT 사용자 등급 TO 사용자 ID 리스트 [IDENTIFIED BY 암호 리스트];

- REVOKE 사용자 등급 FROM 사용자 ID 리스트;


· 사용자 등급의 종류

- DBA : 데이터베이스 관리 책임자

- RESOURCE : 데이터베이스 및 테이블 생성 가능자

- CONNECT : 단순 사용자

예) GRANT RESOURCE TO KORA; → 사용자 ID가 KORA인 사람에게 데이터베이스 및 테이블을 생성할 수 있는 권한 부여

          GRANT CONNECT TO STAR; → 사용자 ID가 STAR인 사람에게 단순히 데이터베이스에 있는 정보를 검색할 수 있는 권한만 부여


· 테이블 및 속성에 대한 권한 부여 및 취소

- GRANT 권한 ON 데이터 개체 TO 사용자 [WITH GRANT OPTION];

- REVOKE [GRANT OPTION FOR] 권한 ON 데이터 개체 FROM 사용자[CASCADE];


· 권한 종류 : ALL, SELECT, INSERT, DELETE, UPDATE, INDEX, ALTER 등

· WITH GRANT OPTION : 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한 부여

· GRANT OPTION FOR : 다른 사용자에게 권한을 부여할 수 있는 권한 취소

· CASCADE : 권한 해제 시 권한 부여받았던 사용자가 다른 사람에게 부여한 권한도 연쇄적으로 해제



029 분산 데이터베이스


① 분산 데이터베이스의 정의


· 분산 데이터베이스는 논리적으로는 하나의 시스템에 속하지만 물리적으로는 네트워크를 통해 연결된 여러 개의 컴퓨터 사이트에 분산되어 있는 데이터베이스

· 분산 데이터베이스는 데이터의 처리나 이용이 많은 지역에 데이터베이스를 위치시킴으로써 데이터의 처리가 가능한 해당 지역에서 해결될 수 있도록 함


② 분산 데이터베이스의 구성 요소


분산 처리기

· 자체적으로 처리 능력을 가지며, 지리적으로 분산되어 있는 컴퓨터 시스템을 말함

분산 데이터베이스

· 지리적으로 분산되어 있는 데이터베이스로서 해당 지역의 특성에 맞게 데이터베이스가 구성됨

통신 네트워크

· 분산 처리기들을 통신망으로 연결하여 논리적으로 하나의 시스템처럼 작동할 수 있도록 하는 통신 네트워크를 말함


③ 분산 데이터베이스 설계 시 고려사항-


· 작업부하(Work Load)의 노드별 분산 정책

· 지역의 자치성 보장 정책

· 데이터의 일관성 정책

· 사이트나 회선의 고장으로부터의 회복 기능

· 통신 네트워크를 통한 원격 접근 기능


④ 분산 데이터베이스의 목표


· 위치 투명성(Location Transparency) : 액세스하려는 데이터베이스의 실제 위치를 알 필요 없이 단지 데이터베이스의 논리적인 명칭만으로 액세스 가능

· 중복 투명성(Replication Transparency) : 동일 데이터가 여러 곳에 중복되어 있더라도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용하고, 시스템은 자동으로 여러 자료에 대한 작업을 수행

· 병행 투명성(Concurrency Transparency) : 분산 데이터베이스와 관련된 다수의 트랜잭션들이 동시에 실현되더라도 그 트랜잭션의 결과는 영향을 받지 않음

· 장애 투명성(Failure Transparency) : 트랜잭션, DBMS, 네트워크, 컴퓨터 장애에도 불구하고 트랜잭션을 정확하게 처리함


※ 투명성 : 어떠한 사실이 존재함에도 마치 투명하여 보이지 않는 것처럼, 사실의 존재 여부를 염두에 두지 않아도 되는 성질


⑤ 분산 데이터베이스의 장·단점


장점

· 지역 자치성 높음

· 자료의 공유성 향상

· 분산 제어 가능

· 시스템 성능 향상

· 중앙 컴퓨터의 장애가 전체 시스템에 영향을 끼치지 않음

· 효용성과 융통성이 높음

· 신뢰성 및 가용성이 높음

· 점진적 시스템 용량 확장이 용이


단점

· DBMS가 수행할 기능이 복잡

· 데이터베이스 설계가 어려움

· 소프트웨어 개발 비용이 증가

· 처리 비용이 증가

· 잠재적 오류가 증가


※ 미들웨어(MiddleWare)

· 분산 환경에서 구성원들을 연결하고 구성원들 간의 차이를 극복하도록 범용으로 개발된 소프트웨어

· 클라이언트와 서버 사이에 존재하면서 다중 통신, 데이터 액세스 프로토콜과 인터페이스 등을 지원

· 미들웨어의 종류

- 통신 미들웨어 : NOS(Network Operating System)

- 데이터베이스 미들웨어 : ODBC

- 분산 객체 미들웨어 : CORBA, DCOM



출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 1과목 데이터베이스


3장 관계 데이터베이스 모델과 언어 


013 관계형 데이터베이스의 구조


① 관계형 데이터베이스의 개요


· 관계형 데이터베이스를 구성하는 개체(Entity)나 관계(Relationship)를 모두 릴레이션(Relation)이라는 표(Table)로 표현

· 릴레이션은 개체를 표현하는 개체 릴레이션, 관계를 나타내는 관계 릴레이션으로 구분 가능

· 장점 : 간결하고 보기 편리하며, 다른 데이터베이스로의 변환이 용이

· 단점 : 성능이 다소 떨어짐


② 관계형 데이터베이스의 Relation 구조

[그림 1] 릴레이션 구조

튜플(Tuple)


· 릴레이션을 구성하는 각각의 행

· 속성의 모임으로 구성

· 파일 구조에서 레코드와 같은 의미

· 튜플의 수 : 카디널리티(Cardinality) 또는 기수, 대응수


속성(Attribute)


· 데이터베이스를 구성하는 가장 작은 논리적 단위

· 파일 구조상의 데이터 항목 또는 데이터 필드에 해당

· 개체의 특성 기술

· 속성의 수 : 디그리(Degree) 또는 차수


도메인(Domain)


· 하나의 속성이 취할 수 있는 같은 타입의 원자(Atomic)값들의 집합

· 실제 속성 값이 나타날 때 그 값의 합법 여부를 시스템이 검사하는데 이용됨


③ 릴레이션의 특징


· 한 릴레이션에는 똑같은 튜플이 포함될 수 없음 → 튜플들은 모두 상이

· 튜플 사이에 순서 없음

· 튜플들의 삽입, 삭제 등의 작업으로 인해 릴레이션은 시간에 따라 변함

· 릴레이션 스키마를 구성하는 속성들 간의 순서는 중요하지 않음

· 속성의 명칭은 유일해야 하지만, 속성을 구성하는 값은 동일해도 됨

· 튜플을 유일하게 식별하기 위해 속성들의 부분집합을 키(Key)로 설정

· 속성의 값은 논리적으로 더 이상 쪼갤 수 없는 원자값만을 저장



014 관계형 데이터베이스의 제약 조건


제약 조건이란 데이터베이스에 저장되는 데이터의 정확성을 보장하기 위하여 키를 이용하여 입력되는 데이터에 제한을 주는 것으로 개체 무결성 제약, 참조 무결성 제약 등이 해당됨


① 키(Key)의 개념 및 종류


키 : 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 속성


후보키(Candidate Key)

· 릴레이션을 구성하는 속성들 중 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들

· 하나의 릴레이션에는 중복된 튜플들이 없으므로 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재

· 후보키는 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 함

- 유일성(Unique) : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 함

- 최소성(Minimality) : 모든 레코드들을 유일하게 식별하는데 꼭 필요한 속성으로만 구성되어야 함


기본키(Primary Key)

· 기본키 : 후보키 중에서 선택한 주키(Main Key)

· 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성

· Null값을 가질 수 없음

· 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없음


대체키(Alternate Key)

· 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키들

· 보조키라고도 부름


슈퍼키(Super Key)

· 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키로서 릴레이션을 구성하는 모든 튜플들 중 슈퍼키로 구성된 속성의 집합과 동일한 값은 나타나지 않음

· 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족시키지만, 최소성은 만족시키지 못함


외래키(Foreign Key)

· 관계를 맺고 있는 릴레이션 R1, R2에서 릴레이션 R1이 참조하고 있는 릴레이션 R2의 기본키와 같으면 R1 릴레이션의 속성을 외래키라고 함

· 참조되는 릴레이션의 기본키와 대응되어 릴레이션 간에 참조 관계를 표현하는 중요한 도구

· 외래키로 지정되면 참조 릴레이션의 기본키에 없는 값은 입력할 수 없음


② 무결성


개체 무결성 : 릴레이션에서 기본키를 구성하는 속성은 널값이나 중복값을 가질 수 없음


참조 무결성

· 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 함. 즉 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없음

· 외래키와 참조하려는 테이블의 기본키는 도메인과 속성 개수가 같아야 함 



015 관계대수 및 관계해석


① 관계대수의 개요


· 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는 가를 기술하는 절차적인 언어

· 릴레이션을 처리하기 위해 연산자와 연산 규칙을 제공하는 언어로 피연산자가 릴레이션이고, 결과도 릴레이션

· 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시

· 순수 관계 연산자 : Select, Project, Join, Division

· 일반 집합 연산자 : UNION(합집합), INTERSECTION(교집합), DIFFERENCE(차집합), CARTESIAN PRODUCT(교차곱)


② 순수 관계 연산자


순수 관계 연산자란 관계 데이터베이스에 적용할 수 있도록 특별히 개발한 관계 연산자


Select

· 릴레이션에 존재하는 튜플 중에서 선택 조건을 만족하는 튜플의 부분집합을 구하여 새로운 릴레이션 만듦

· 릴레이션의 행(가로)에 해당하는 튜플을 구하는 것이므로 수평 연산이라고도 함

· 연산자의 기호는 그리스 문자 시그마(σ) 이용

· 표기 형식 : σ<조건>(R) 단, R은 릴레이션 이름

예)  σ<ave≥90>(성적) : <성적> 릴레이션에서 평균(Ave)이 90점 이상인 튜플들을 추출


Project

· 주어진 릴레이션에서 속성 List에 제시된 속성만을 추출하는 연산

· 릴레이션의 열(세로)에 해당하는 속성을 추출하는 것이므로 수직 연산이라고도 함

· 연산자의 기호는 그리스 문자 파이(π) 이용

· 표기 형식 : π<속성리스트>(R) 단, R은 릴레이션 이름

예) πname ave(성적) : <성적> 릴레이션에서 'Name' 과 'Ave' 속성을 추출


Join

· 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만드는 연산

· 연산자의 기호는 ⋈ 이용

· 표기 형식 : R ⋈ 키속성r=키속성s S 단, 키 속성 r은 릴레이션 R의 속성이고, 키 속성 s는 릴레이션 S의 속성

예) 성적 ⋈ No=No 학적부 : <성적> 릴레이션과 <학적부> 릴레이션을 'no' 속성을 기준으로 합쳐라


Division

· X⊃Y인 두 개의 릴레이션 R(X)와 S(Y)가 있을 때, R의 속성이 S의 속성값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산

· 연산자의 기호는 ÷ 이용

· 표기 형식 : R[속성r ÷ 속성s] S 단, 속성r은 릴레이션 R의 속성이고 속성s는 릴레이션 S의 속성이며, 속성r과 속성s는 동일 속성값을 가지는 속성이어야 함


③ 일반 집합 연산자


일반 집합 연산자는 수학적 집합 이론에서 사용하는 연산자로서 릴레이션 연산에도 그대로 적용할 수 있음 


· 일반 집합 연산자 중 합집합, 교집합, 차집합은 합병 조건이 가능해야 함

· 합병 조건 : 합병하려는 두 릴레이션 간에 속성의 수가 같고, 각 속성이 취할 수 있는 도메인의 범위가 같아야 함

· 합병 가능한 두 릴레이션 R과 S가 있을 때 각 연산의 특징을 요약하면 다음과 같음


연산자

기능 및 수학적 표현

카디널리티

합집합

UNION


 · 두 릴레이션에 존재하는 튜플의 합집합을 구하되, 결과로 생성된 릴레이션에서 중복된 튜플은 제거됨

 · R ∪ S = {t | t ∈ R ∨ t ∈ S}

 ※ t는 릴레이션 R 또는 S에 존재하는 튜플

 · |R∪S| ≤ |R| + |S|

 · 합집합의 카디널리티는 두 릴레이션 커디널리티의 합보다 크지 않음

교집합

INTERSECTION


 · 두 릴레이션에 존재하는 튜플의 교집합을 구하는 연산

 · R ∩ S = {t | t  R ∧ t ∈ S}

 ※ t는 릴레이션 R 그리고 S에 동시에 존재하는 튜플

 · |R∩S| ≤ MIN{|R|, |S|}

 · 교집합의 카디널리티는 두 릴레이션 중 카디널리티가 적은 릴레이션의 카디널리티보다 크지 않음

차집합

DIFFERENCE

-

 · 두 릴레이션에 존재하는 튜플의 차집합을 구하는 연산

 · R - S = {t | t  R ∧ t ∉ S}

 ※ t는 릴레이션 R에는 존재하고 S에는 없는 튜플

 · |R-S| ≤ |R|

 · 차집합의 카디널리티는 릴레이션 R의 카디널리티보다 크지 않음

교차곱

CARTESIAN PRODUCT

×

 · 두 릴레이션에 존재하는 튜플의 순서쌍을 구하는 연산

 · R × S = {r·s | r  R ∧ s ∈ S}

 ※ r는 R에 존재하는 튜플이고, s는 S에 존재하는 튜플

 · |R×S| = |R| × |S|

 · 교차곱은 두 릴레이션의 카디널리티를 곱한 것과 같음


④ 관계해석


· 관계 데이터 모델의 제안자인 코드가 수학의 Predicate Calculus에 기반을 두고 관계 데이터베이스를 위해 제안

· 관계해석은 관계 데이터의 연산을 표현하는 방법으로, 원하는 정보를 정의할 때는 계산 수식을 사용

· 관계해석은 원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성을 지님

· 튜플 관계해석과 도메인 관계해석이 있음

· 기본적으로 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력 면에서 동등하며, 관계대수로 표현한 식은 관계해석으로 표현 가능

· 질의어로 표현



016 정규화(Normalization)


① 정규화의 개요


· 함수적 종속성 등의 종속성 이론을 이용해 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만드는 과정

· 분해해가는 과정

· 정규형에는 제1정규형, 제2정규형, 제3정규형, BCNF형, 제4정규형, 제5정규형이 있으며, 차수가 높아질수록 만족시켜야 할 제약조건 늘어남

· 데이터베이스의 논리적 설계 단계에서 수행


② 정규화의 목적


· 데이터 구조의 안정성을 최대화

· 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하도록 만듦

· 효과적인 검색 알고리즘 생성 가능

· 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지

· 데이터 삽입 시 릴레이션을 재구성할 필요성 감소


③ Anomaly(이상)의 개념 및 종류


정규화를 거치지 않으면 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 예기치 못한 곤란한 현상 발생 → 이상


· 삽입 이상(Insertion Anomaly) : 릴레이션에 데이터를 삽입할 떄 의도와는 상관없이 원하지 않은 값들도 함께 삽입되는 현상

· 삭제 이상(Deletion Anomaly) : 릴레이션에서 한 튜플을 삭제할 떄 의도와는 상관없는 값들도 함께 삭제되는 연쇄 삭제 현상이 일어나는 현상

· 갱신 이상(Update Anomaly) : 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상


④ 정규화의 원칙


· 정보의 무손실 표현, 즉 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있어서는 안 됨

· 분리의 원칙, 즉 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야 함

· 데이터의 중복성이 감소되어야 함


⑤ 정규화 과정


1NF(제1정규형)

1NF는 릴레이션에 속한 모든 도메인이 원자값으로만 되어 있는 릴레이션

· 릴레이션의 모든 속성이 단순 영역에서 정의됨


2NF(제2정규형)

2NF는 릴레이션  R이 1NF이고, 키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속 관계를 만족함


3NF(제3정규형)

릴레이션 R이 2NF이고, 키가 아닌 모든 속성이 기본키에 대해 이행적 종속 관계를 이루지 않도록 제한한 관계형

(이행적 종속 관계 : A→B이고 B→C일 떄 A→C를 만족하는 관계)

· 무손실 조인 또는 종속성 보존을 저해하지 않고도 항상 3NF 설계를 얻을 수 있음


BCNF(Boyce-Codd 정규형)

· 릴레이션 R에서 결정자가 모두 후보키인 관계형

(결정자 : '학번'에 따라 '이름'이 결정되는 '학번 → 이름'일 때 '학번'을 결정자라하고, '이름'을 종속자라고 함)

· 3NF에서 후보키가 많고 서로 중첩되는 경우에 적용하는 강한 제3정규형이라고도 함

· 모든 BCNF가 종속성을 보장하는 것은 아님

· BCNF의 제약 조건

- 키가 아닌 모든 속성은 각 키에 대하여 완전 종속해야 함

- 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가있지 않은 모든 키에 대하여 완전 종속해야 함

- 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없음


4NF(제4정규형)

릴레이션 R에 A→→B가 성립하는 경우 R의 모든 속성이 A에 함수적 종속이면 이 릴레이션 R은 제4정규형에 속함


5NF(제5정규형, PJ/NF)

릴레이션 R의 모든 조인 종속성(JD)의 만족이 R의 후보키를 통해서만 만족될 때 그 릴레이션 R은 제5정규형 또는 PJ/NF에 속함


※ 다치 종속(MVD; Multi Valued Dependency)

A, B, C 세 개의 속성을 가진 릴레이션 R에서 어떤 복합 속성 (A,C)에 대응하는 B 값의 집합이 A 값에만 종속되고 C 값에는 무관할 때 다치 종속 R · A →→ R · B가 존재함

※ 조인 종속(JD; Join Dependency)

어떤 릴레이션 R이 자신의 Projection(X,Y,…,Z)에 대한 조인의 결과가 자신과 같을 때 조인 종속(JD) (X,Y,…,Z)은 R의 속성 집합의 부분집합

※ 정규화 과정 정리

도메인이 원자값(비정규 릴레이션 → 1NF)

부분적 함수 종속 제거(1NF → 2NF)

이행적 함수 종속 제거(2NF → 3NF)

결정자이면서 후보키가 아닌 것 제거(3NF → BCNF)

다치 종속 제거(BCNF → 4NF)

조인 종속성 이용(4NF → 5NF)



017 SQL의 개념


① SQL(Structed Query Language)의 개요


· 1974년 IBM에서 개발한 SEQUEL에서 유래

· 국제표준 데이터베이스 언어, 관계형 데이터베이스(RDB)를 지원하는 언어로 채택

· 관계대수와 관계해석을 기초로 한 혼합 데이터 언어

· 질의어지만 질의 기능만 있는 것이 아니라 데이터 구조의 정의, 데이터 조작, 데이터 제어 기능을 모두 갖추고 있음


② SQL의 분류


DDL(데이터 정의어)


· DDL(Data Definition Language)은 SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 언어

· 논리적 데이터 구조와 물리적 데이터 구조의 사상을 정의 

· 데이터베이스 관리자나 데이터베이스 설계자가 사용

· 데이터 정의어(DDL)의 세 가지 유형


명령어

기능

CREATE

SCHEMA, DOMAIN, TABLE, VIEW, INDEX 정의

ALTER

TABLE에 대한 정의를 변경하는 데 사용

DROP

SCHEMA, DOMAIN, TABLE, VIEW, INDEX 삭제


DML(데이터 조작어)


· DML(Data Manipulation Language)은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는 데 사용되는 언어

· 데이터베이스 사용자와 데이터베이스 관리 시스템 간의 인터페이스 제공

· 데이터 조작어(DML)의 네 가지 유형


명령어

기능

SELECT

테이블에서 조건에 맞는 튜플을 검색

INSERT

테이블에서 새로운 튜플을 삽임

DELETE

테이블에서 조건에 맞는 튜플을 삭제

UPDATE

테이블에서 조건에 맞는 튜플의 내용을 변경


DCL(데이터 제어어)


· DCL(Data Control Language)은 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는 데 사용되는 언어

· 데이터베이스 관리자가 데이터 관리를 목적으로 사용

· 데이터 제어어(DCL)의 종류


명령어

기능

COMMIT

명령에 의해 수행된 결과를 실제 물리적 디스크로 저장하고, 데이터베이스 조작 작업이 정상적으로 완료되었음을 관리자에게 알려줌

ROLLBACK

데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구

GRANT

데이트베이스 사용자에게 사용 권한 부여

REVOKE

데이터베이스 사용자의 사용 권한 취소



018 DDL


· DDL(Data Define Language, 데이터 정의 언어)은 SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 명령문

· DDL로 정의된 내용은 Meta-data가 되며, 시스템 카탈로그에 저장

  (메타 데이터 : 데이터 관리를 위한, 즉 데이터를 위한 데이터

  시스템 카탈로그 : 시스템 그 자체에 관련이 있는 다양한 객체들에 관한 정보를 포함하는 시스템 데이터베이스 테이블)


※ 데이터 정의문에서 사용하는 테이블 종류

기본 테이블

이름을 갖고 있으며 독자적으로 존재

뷰 테이블

독자적으로 존재하지 못하고, 기본 테이블로부터 유도된 이름을 가진 가상 테이블

임시 테이블

질의문 처리 결과로 만들어진 테이블로서, 이름을 가지지 않음


① CREATE SCHEMA


· 스키마를 정의하는 명령문

· 스키마의 식별을 위해 스키마 이름과 소유권자나 허가권자를 정의


※ 표기 형식

 CREATE SCHEMA 스키마_이름 AUTHORIZATION 사용자_id;


예) 소유권자의 사용자 ID가 홍길동인 스키마 '대학교'의 정의문 - CREATE SCHEMA 대학교 AUTHORIZATION 홍길동;


② CREATE DOMAIN


· 도메인을 정의하는 명령문

· 임의의 속성에서 취할 수 있는 원자값의 범위가 SQL에서 지원하는 data_type에 포함되는 전체 값이 아니고 일부분일 때 사용자가 그 값의 범위를 사용자 정의 data_type으로 정의


※ 표기 형식

 CREATE DOMAIN 도메인_이름 data_type

[DEFAULT 묵시값_정의]

[CONSTRAINT VALID-도메인_이름 CHECK (범위값)];


· data_type : SQL에서 지원하는 data_type

· 묵시값 : 데이터를 입력하지 않았을 때 자동으로 입력되는 기본값

· 정의된 도메인_이름은 일반적인 data_type처럼 사용


예) '남', '여' 또는 '?' 중의 한 문자를 취할 수 있는 도메인 SEX의 정의문

 CREATE DOMAIN SEX CHAR(1)

DEFAULT '여'

CONSTRAINT VALID-SEX CHECK(VALUE IN('남', '여', '?'));

 정의된 도메인은 이름이 'SEX'이며, 문자형이고 크기는 1자

 자료형으로 SEX를 지정한 속성의 기본값 : '여'

 자료형으로 SEX를 지정한 속성은 '남', '여', '?' 중 하나의 값만 취함


※ SQL에서 지원하는 기본 data_type


 정수(Integer)

INT(4Byte 정수), SMALLINT(2Byte 정수)

 실수(Float)

FLOAT, REAL, DOUBLE PRECISION

 형식화된 숫자

DEC(i, j) 단, i : 전체 자릿수, j : 소수부 자릿수

 고정길이 문자

CHAR(n) 단, n : 문자수

 가변길이 문자

VARCHAR(n) 단, n : 최대 문자수

 고정길이 비트열(Bit String)

BIT(n)

 가변길이 비트열

VARBIT(n)

 날짜

DATE, 날짜 데이터는 YYY-MM-DD의 10자리로 표기

 시간

TIME, 시간 데이터는 HH : MM: SS의 6자리로 표기


③ CREATE TABLE


CREATE TABLE은 기본 테이블을 정의하는 명령문 


※ 표기 형식

 CREATE TABLE 기본테이블_이름

(속성명 data_type [NOT NULL], …,

PRIMARY KEY(기본키_속성명),

UNIQUE(대체키_속성명, …),

FOREIGN KEY(외래키_속성명, …)

REFERENCES 참조테이블(기본키_속성명),

CONSTRAINT 제약조건명 CHECK(조건식) );


· 속성명 : 기본 테이블에 포함될 모든 속성에 대하여 속성명과 그 속성의 data_type, NOT NULL 여부를 지정

· PRIMARY KEY : 기본키 속성 지정

· UNIQUE : 대체키로 사용할 속성명들을 지정

· FOREIGN KEY ~ REFERENCES ~

- 참조할 다른 테이블과 그 테이블을 참조할 때 사용할 외래키 속성을 지정

- 외래키가 지정되면 참조 무결성의 CASCADE 법칙이 적용됨

· CHECK : 제약 조건을 정의


예) 이름, 학번, 전공, 성별, 생년월일로 구성된 '학생' 테이블을 정의하라.

 CREATE TABLE 학생

(이름 VARCHAR(15) NOT NULL,

학번 VARCHAR(15) NOT NULL,

전공 VARCHAR(20) NOT NULL,

성별 SEX,

생년월일 DATE,

PRIMARY KEY(학번),

FOREIGN KEY(전공)

REFERENCES 학과(학과코드),

CONSTRAINT 성별제약

CHECK(성별 = '남') ); 


④ CREATE INDEX


CREATE INDEX는 인덱스를 정의하는 명령문 


※ 표기 형식

 CREATE  [UNIQUE] INDEX 인덱스_이름

ON 기본테이블_이름({속성_이름 [ASC | DESC],})

[CLUSTER];


· UNIQUE 옵션

- 사용하는 경우 : 기본키나 대체키 같은 중복되는 값이 없는 속성으로 인덱스를 생성할 때

- 생략하는 경우 : 중복값을 허용하는 속성으로 인덱스를 생성할 때

· 정렬 여부 지정

- ASC : 오름차순 정렬, DESC : 내림차순 정렬

- 생략하면 오름차순으로 정렬됨

· CLUSTER 옵션 : 동일 인덱스 값을 갖는 튜플들을 그룹으로 묶을 때 사용


예) '고객' 테이블의 기본키인 '고객번호' 속성에 대해 오름차순 정렬하여 '고객번호_INX'라는 이름으로 인덱스를 구성하라.

 CREATE UNIQUE INDEX 고객번호_INX

 ON 고객(고객번호 ASC);


⑤ ALTER TABLE


ALTER TABLE은 테이블에 대한 정의를 변경하는 명령문


※ 표기 형식

 ALTER TABLE 기본테이블_이름 ADD 속성_이름 data_type [DEFAULT '기본값'];

 ALTER TABLE 기본테이블_이름 ALTER 속성_이름 [SET DEFAULT '기본값'];

 ALTER TABLE 기본테이블_이름 DROP 속성_이름 [CASCADE];


· ADD : 새로운 속성(열)을 추가할 때 사용

· ALTER : 특정 속성의 Default 값을 변경할 때 사용

· DROP : 특정 속성을 삭제할 때 사용


예) '학생' 테이블에 최대 3문자로 구성되는 '학년' 속성 추가

 ALTER TABLE 학생 ADD 학년 VARCHAR(3); 


⑥ DROP


DROP은 스키마, 도메인, 기본 테이블, 뷰 테이블, 인덱스 등을 삭제하는 명령문


※ 표기 형식

 DROP SCHEMA 스키마_이름[CASCADE | RESTRICTED];

 DROP DOMAIN 도메인_이름[CASCADE | RESTRICTED];

 DROP TABLE 테이블_이름[CASCADE | RESTRICTED];

 DROP VIEW 뷰_이름[CASCADE | RESTRICTED];

 DROP INDEX 인덱스_이름;


· DROP SCHEMA : 스키마 삭제

· DROP DOMAIN : 도메인 삭제

· DROP TABLE : 기본 테이블 삭제

· DROP VIEW : 뷰 테이블 삭제

· DROP INDEX : 인덱스 삭제

· CASCADE 옵션 : 삭제할 요소를 참조하는 다른 모든 개체를 함께 삭제. 즉, Main Table의 데이터 삭제 시 각 외래키에 대해 부합되는 모든 데이터를 삭제하는 참조 무결성의 법칙을 설정

· RESTRICTED 옵션 : 삭제할 요소를 다른 개체가 참조중일 때는 삭제를 취소


예) '학생' 테이블을 삭제하되, '학생' 테이블을 참조하는 모든 테이블을 함께 삭제한다.

 DROP TABLE 학생 CASCADE; 



019 DML - SELECT


 SELECT문은 테이블을 구성하는 튜플(행)들 중에서 전체 또는 조건을 만족하는 튜플(행)을 검색하여 주기억장치 상에 임시 테이블로 구성하는 명령문


① 일반형식


 SELECT Predicate [테이블명.]속성명1, [테이블명.]속성명2, …

 FROM 테이블명1, 테이블명2, …

 [WHERE 조건]

 [GROUP BY 속성명1, 속성명2, …]

 [HAVING 조건]

 [ORDER BY 속성명 [ASC | DESC]]; 


· SELECT절

- 속성명 : 검색하여 불러올 속성(열) 또는 속성을 이용한 수식 지정

▶ 기본 테이블을 구성하는 모든 속성을 지정할 때는 '*'를 기술

▶ 두 개 이상의 테이블을 대상으로 검색할 때는 '테이블명.속성명'으로 표현

· Predicate : 불러올 튜플 수를 제한할 명령어를 기술


※ Predicate옵션

· ALL : 모든 튜플을 검색할 떄 지정하는 것으로, 주로 생략

· DISTINCT : 중복된 튜플이 있으면 그 중 첫 번째 한 개만 검색

· DISTINCTROW : 중복된 튜플을 제거하고 한 개만 검색하지만 선택된 속성의 값이 아닌, 튜플 전체를 대상으로 함


·  FROM절 : 질의에 의해 검색될 데이터들을 포함하는 테이블명을 기술

· WHERE절 : 검색할 조건을 기술


※ 조건 연산자

·  비교 연산자 : =, <>, >, >=, IN

·  논리 연산자 : NOT, AND, OR

·  LIKE : 대표 문자를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플만 검색


· GROUP BY절 : 특정 속성을 기준으로 그룹화하여 검색할 때 그룹화할 속성을 지정

· 일반적으로 GROUP BY절은 그룹 함수와 함께 사용됨


※ 그룹 함수의 종류

· COUNT(속성명) : 그룹별 튜플 수를 구하는 함수

· MAX(속성명) : 그룹별 최대값을 구하는 함수

· MIN(속성명) : 그룹별 최소값을 구하는 함수

· SUM(속성명) : 그룹별 합계를 구하는 함수

· AVG(속성명) : 그룹별 평균을 구하는 함수


· HAVING절 : GROUP BY와 함께 사용되며, 그룹에 대한 조건을 지정

· ORDER BY절 : 특정 속성을 기준으로 정렬하여 검색할 때 사용

- 속성명 : 정렬의 기준이 되는 속성명을 기술

- [ASC | DESC] : 정렬 방식으로서 'ASC'는 오름차순, 'DESC'는 내림차순. 생략하면 오름차순으로 지정


② 기본검색


· SELECT * FROM 사원;

· 중복 제거 : DISTINCT


③ 조건 지정 검색


 SELECT *

 FROM 사원

 WHERE 부서 = '기획';


 SELECT *

 FROM 사원

 WHERE 부서 = '기획' AND  주소 = '후평동';

 SELECT *

 FROM 사원

 WHERE 부서 = '기획' OR 부서 = '인터넷';

 SELECT *

 FROM 사원

 WHERE 이름 LIKE "김%"; 


  SELECT *

 FROM 사원

 WHERE 생일 Between #01/09/69# And #10/22/73#


·  SELECT *

 FROM 사원

 WHERE 주소 IS NULL;

(NULL이 아닌 값을 검색할 떄는 IS NOT NULL 사용 → WHERE 주소 IS NOT NULL;)


④ 정렬 검색


ASC : 오름차순 / DESC : 내림차순


⑤ 그룹 지정 검색


※ GROUP BY절 : 그룹을 지정. 그룹에 대한 조건을 지정할 때는 WHERE가 아닌 HAVING 사용

   Avg(기본급) As 평균 : '기본급' 속성에 있는 값들의 평균을 구하되 '평균'이라는 속성명으로 표시


SELECT 부서, Avg(기본급) As 평균

 FROM 사원

 Group By 부서;

 SELECT 부서, COUNT(*) As 사원수

 FROM 사원

 Group By 부서;

 SELECT 부서, COUNT(*) As 사원수

 FROM 사원

 WHERE 기본급 ≥ 100

 Group By 부서

 HAVING COUNT(*) ≥ 2;


⑥ 하위 질의


Select 이름, 주소

From 사원

Where 이름=(Select 이름 From 여가활동 Where 취미='나이트댄스')

- 하위 질의는 조건절에 주어진 질의를 먼저 수행하여 그 검색 결과를 조건절의 피연산자로 사용

  "Select 이름 From 여가활동 Where 취미 = '나이트댄스'"를 수행하여 <여가활동> 테이블에서 '성춘향'을 찾음

  그런 다음 하위 질의에 해당하는 피연산자의 자리에 '성춘향'을 대입하면 질문은 "Select 이름, 주소 From 사원 Where 이름='성춘향'"과 같음


Select *

From 사원

Where 이름 Not In(Select 이름 From 여가활동)

- Not In()

  Not In()은 포함되지 않는 데이터를 의미

  <사원> 테이브레서 모든 자료를 검색하는데, <여가활동> 테이블에 이름이 있는 자료는 제외하고 검색


⑦ 복수 테이블 검색


예) 경력이 10년 이상인 사원의 이름, 부서, 취미, 경력을 검색하시오.

Select 사원.이름, 사원.부서, 여가활동.취미, 여가활동.경력

From 사원, 여가활동

Where 여가활동.경력≥10 And 사원.이름 = 여가활동.이름


⑧ 통합(UNION) 질의


※ 두 테이블을 합치는 통합(UNION) 질의는 두 테이블에 모두 속해 있는 자료는 한 개만 표시


예) 사원들의 명단이 <사원> 테이블과 <직원>테이블에 저장되어 있다. 두 테이블을 통합하는 질의문을 작성하시오. 단, 같은 레코드가 두 번 나오지 않게 하시오.

Select *

From 사원

Union

Select *

From 직원



020 DML - INSERT, DELETE, UPDATE


① 삽입문(INSERT INTO~)


삽입문은 기본 테이블에 새로운 튜플을 삽입할 때 사용


※ 일반형식

 INSERT INTO 테이블명(속성명1, 속성명2, …)

 VALUES (데이터1, 데이터2, …) 


· 대응하는 속성과 데이터는 개수와 data_type이 일치해야함

· 기본 테이블의 모든 속성을 사용할 때는 속성명 생략 가능

· SELECT문을 사용하여 다른 테이블의 검색 결과 삽입 가능


예1) <사원> 테이블에 (이름-홍승현, 부서-인터넷)을 삽입하시오

 → INSERT INTO 사원(이름, 부서) VALUES('홍승현', '인터넷');

예2)  <사원> 테이블에 (장보고, 기획, 05/03/73, 석사동, 90)을 삽입하시오

 → INSERT INTO 사원 VALUES('장보고', '기획', #05/03/73#, '석사동', '90')

예3)  <사원> 테이블에 있는 편집부의 모든 튜플을 편집부원(이름, 생일, 주소, 기본급) 테이블에 삽입하시오

 → INSERT INTO 편집부원(이름, 생일, 주소, 기본급)

     SELECT 이름, 생일, 주소, 기본급

     FROM 사원

     WHERE 부서 = '편집';


② 삭제문(DELETE FROM~)


삭제문은 기본 테이블에 있는 튜플들 중에서 특정 튜플(행)을 삭제할 때 사용


※ 일반형식

 DELETE

 FROM 테이블명

 WHERE 조건;


· 모든 레코드를 삭제할 떄는 WHERE절을 생략

· 모든 레코드를 삭제하더라도 테이블 구조는 남아 있기 때문에 디스크에서 테이블을 완전히 제거하는 DROP과는 다름


예1) <사원> 테이블에서 임꺽정에 대한 튜플을 삭제하시오

 → DELETE FROM 사원 WHERE 이름='임꺽정';

예2)  <사원> 테이블에서 '인터넷' 부서에 대한 모든 튜플을 삭제하시오

 → DELETE FROM 사원 WHERE 부서 = '인터넷';

예3)  <사원> 테이블의 모든 레코드를 삭제하시오

 → DELETE FROM 사원;


③ 갱신문(UPDATE~ SET~)


갱신문은 기본 테이블에 있는 튜플들 중에서 특정 튜플의 내용을 변경할 때 사용(UPDATE~ SET~ WHERE~)


※ 일반형식

 UPDATE 테이블명

 SET 속성명 = 데이터

 WHERE 조건;


예1) <사원> 테이블에서 홍길동의 주소를 퇴계동으로 수정하시오

 → UPDATE 사원 SET 주소 = '퇴계동' WHERE 이름 = '홍길동';

예2)  <사원> 테이블에서 황진이의 부서를 기획부로 변경하고 기본급을 5만 원 인상시키시오

 → UPDATE 사원 SET 부서 = '기획', 기본급 = 기본급 + 5 WHERE 이름 = '황진이';


 ※ 데이터 조작문의 네 가지 유형

· SELECT(검색) : SELECT~ FROM~ WHERE~

· INSERT(삽입) : INSERT INTO~ VALUES~

· DELETE(삭제) : DELETE FROM~ WHERE~

· UPDATE(변경) : UPDATE~ SET~ WHERE~



021 내장 SQL


① 내장 SQL(Embedded SQL)의 정의


내장 SQL은 응용 프로그램 내에 데이터베이스에서 사용하는 데이터를 정의하거나 질의하는 SQL 문장을 내포하여 프로그램이 실행될 때 함께 실행되도록 호스트 프로그램 언어로 만든 프로그램에 삽입된 SQL


② 내장 SQL의 특징


· 내장 SQL 실행문은 호스트 언어에서 실행문이 나타날 수 있는 곳이면 프로그램의 어느 곳에서나 사용 가능

· 일반 SQL문은 수행 결과로 여러 개의 튜플을 반환하는 반면, 내장 SQL은 단 하나의 튜플만을 반환

· 내장 SQL문에 의해 반환되는 튜플은 일반 변수를 사용하여 저장 가능

· Host Program의 컴파일 시 내장 SQL문은 선행처리기에 의해 분리되어 컴파일됨. 호스트 변수와 데이터베이스 필드의 이름은 같아도 됨.

· 내장 SQL문에 사용된 호스트 변수의 데이터 타입은 이에 대응하는 데이터베이스 필드의 SQL 데이터 타입과 일치하여야 함

· 내장 SQL문이 실행되면 SQL 실행의 상태가 SQL 상태 변수에 전달됨


※ SQL 상태변수 : 삽입 SQL문 실행 후 SQLCODE라는 묵시적 변수에 성공, 실패, 오류 등의 결과를 정수값으로 전달함

 0:성공 / 100:NOT FOUND / 양수:경고 / 음수:에러 (SQL2에서는 SQLSTATE라는 변수 사용 → 00000:성공 / 02000:NOT FOUND)


③ 호스트 언어의 실행문과 구분시키는 방법 


프로그램에서 호스트 실행문과 내장 SQL문을 구분하기 위한 벙법


명령문의 구분

· C/C++에서 내장 SQL문은 $와 세미콜론(;) 문자 사이에 기술

· Visual BASIC에서는 내장 SQL문 앞에 'EXEC SQL'을 기술


변수의 구분

· 내장 SQL에서 사용하는 호스트 변수는 앞에 콜론(:) 문자를 붙임


④ 커서(Cursor)


· 커서는 내장 SQL문의 수행 결과로 반환될 수 있는 복수의 튜플들을 액세스할 수 있도록 해주는 개념

· 질의 수행 결과로 반환되는 첫 번째 튜플에 대한 포인터

· 커서를 사용하여 질의 결과로 반환될 수 있는 튜플들을 한 번에 하나식 차례로 처리 가능


커서 관련 명령어

· DECLARE : 커서를 정의하는 등 커서에 관련한 선언을 하는 명령

· OPEN : 커서가 질의 결과의 첫 번째 튜플을 포인트하도록 설정하는 명령

· FETCH : 질의 결과의 튜플들 중 현재의 다음 튜플로 커서를 이동시키는 명령

· CLOSE : 질의 수행 결과에 대한 처리 종료시 커서를 닫기 위해 사용하는 명령



022 뷰(View)


① 뷰(View)의 개요


· 뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블

· 저장장치 내에 물리적으로 존재하지 않지만, 사용자에게는 있는 것처럼 간주됨

· 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용됨

· 조인문의 사용 최소화로 사용상의 편의성을 최대화함


② 뷰(View)의 특징


· 뷰는 기본 테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 사용하며, 조작도 기본 테이블과 거의 같음

· 가상 테이블이기 때문에 물리적으로 구현되어 있지 않음

· 데이터의 논리적 독립성 제공

· 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해짐

· 뷰를 통해서만 데이터에 접근하게 되면 뷰에 나타나지 않는 데이터를 안전하게 보호하는 효율적인 기법으로 사용할 수 있음

· 기본 테이블의 기본키를 포함한 속성(열) 집합으로 뷰를 구성해야만 삽입, 삭제 갱신 연산이 가능함

· 일단 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있음

· 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제됨


③ 뷰(View)의 ·단점


장점

· 논리적 데이터 독립성 제공

· 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원해줌

· 사용자의 데이터 관리를 간단하게 해줌

· 접근 데아를 통한 자동 보안 제공


단점

· 독립적인 인덱스를 가질 수 없음

· ALTER VIEW문을 사용할 수 없음. 즉 뷰의 정의를 변경할 수 없음

· 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 따름


④ 뷰(View) 정의문


※ 일반 형식

 CREATE VIEW 뷰이름[(속성이름)]

 AS SELECT문;

· SELECT문을 부질의로 사용하여 SELECT문의 결과로서 뷰를 생성

· 부질의로서의 SELECT문에는 UNION이나 ORDER BY절을 사용할 수 없음

· 속성 이름을 기술하지 않으면 SELECT문의 속성 이름이 자동으로 사용됨


예) 고객 테이블에서 주소가 춘천시인 고객들의 성명과 전화번호를 '춘천고객'이라는 뷰로 정의하시오

  → CREATE VIEW 춘천고객

AS SELECT 성명, 전화번호

FROM 고객

WHERE 주소 = '춘천시';


⑤ 뷰 삭제문


뷰는 ALTER문을 사용하여 변경할 수 없으므로 필요한 경우는 삭제한 후 재생성함


※ 일반형식

 DROP VIEW 뷰이름 {RESTRICT | CASCADE}; 

· RESTRICT : 뷰를 다른 곳에서 참조하고 있으면 삭제가 취소됨

· CASCADE : 뷰를 참조하는 다른 뷰나 제약 조건까지 모두 삭제됨


예) 뷰 '춘천고객'을 삭제하시오. 단 다른 곳에서 참조하고 있으면 제거되지 않게 하시오

  → DROP VIEW 춘천고객 RESTRICT;



023 시스템 카탈로그


① 시스템 카탈로그(System Catalog)의 의미


· 시스템 카탈로그는 시스템 그 자체에 관련이 있는 다양한 객체에 관한 정보를 포함하는 시스템 데이터베이스

· 시스템 카탈로그 내의 각 테이블은 사용자를 포함하여 DBMS에서 지원하는 모든 데이터 객체에 대한 정의나 명세에 관한 정보를 유지 관리하는 시스템 테이블

· 데이터 정의어의 결과로 구성되는 기본 테이블, 뷰, 인덱스, 패키지, 접근 권한 등의 데이터베이스 구조 및 통계 정보를 저장

· 카탈로그들이 생성되면 자료 사전에 저장되기 때문에 좁은 의미로는 카탈로그를 자료 사전이라고도 함

· 카탈로그에 저장된 정보를 메타 데이터라고 함


② 카탈로그의 특징


· 카탈로그 자체도 시스템 테이블로 구성되어 있어 일반 이용자도 SQL을 이용하여 내용 검색 가능

· INSERT, DELETE, UPDATE문으로 카탈로그를 갱신하는 것은 허용되지 않음

· 데이터베이스 시스템에 따라 상이한 구조를 가짐

· 카탈로그는 DBMS가 스스로 생성하고 유지함

· 카탈로그의 갱신 : 사용자가 SQL문을 실행시켜 기본 테이블, 뷰, 인덱스 등에 변화를 주면 시스템이 자동으로 갱신함

· 분산 시스템에서의 카탈로그 ; 보통의 릴레이션, 인덱스, 사용자 등의 정보를 포함할 뿐 아니라 위치 투명성 및 중복 투명성을 제공하기 위해 필요한 모든 제어 정보를 가져야 함


③ 시스템 카탈로그의 종류


· SYSTABLES : 기본 테이블 및 뷰 테이블의 정보를 저장하는 테이블

· SYSCOLUMNS : 모든 테이블에 대한 정보를 열(속성) 중심으로 저장하는 테이블

· SYSINDEXES : 인덱스 테이블에 대한 정보를 저장하는 테이블

· SYSVIEW : 뷰에 대한 정보를 저장하는 테이블

· SYSTABAUTH : 테이블에 설정된 권한 사항들을 저장하는 테이블

· SYSCOLAUTH : 각 속성에 설정된 권한 사항들을 저장하는 테이블

· SYSDEPEND : 기본 테이블과 뷰 사이의 종속 관계를 저장하는 테이블

· SYSUSERS : 사용자의 권한 등급 정보를 저장하는 테이블


카탈로그/데이터 사전을 참조하기 위한 DBMS 내의 모듈 시스템


· 데이터 정의어 번역기(DDL Compiler) : DDL을 메타 데이터를 갖는 테이블(카탈로그)로 변환하여 데이터 사전에 저장시킴

· 데이터 조작어 번역기(DML Compiler) : 응용 프로그램에 삽입된 DML문을 주 언어로 표현한 프로시저 호출로 변환하여 질의 처리기와 상호 통신함

· Data Directory

- 데이터 사전에 수록된 데이터를 실제로 접근하는 데 필요한 정보를 관리 유지하는 시스템

- 시스템 카탈로그는 사용자와 시스템 모두 접근할 수 있지만 데이터 디렉터리는 시스템만 접근 가능

· 질의 최적화기 : 사용자의 요구를 효율적인 형태로 변환하고 질의를 처리하는 좋은 전략을 모색

· 트랜잭션 처리기 : 복수 사용자 환경에서 평행으로 동시에 일어나는 트랜잭션 문제를 해결하여, 각각의 사용자가 데이터베이스 자원을 배타적으로 이용할 수 있도록 함



출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 1과목 데이터베이스


2장 데이터 모델링 및 설계


007 데이터 모델의 개념


① 데이터 모델의 정의


· 현실 세계의 정보들을 컴퓨터에 표현하기 위해서 단순화, 추상화하여 체계적으로 표현한 개념적 모형

· 데이터, 데이터의 관계, 데이터의 의미 및 일관성, 제약조건 등을 기술하기 위한 개념적 도구들의 모임

· 현실세계를 데이터베이스에 표현하는 중간 과정, 즉 데이터베이스 설계 과정에서 데이터의 구조를 논리적으로 표현하기 위해 사용되는 도구

· 데이터의 구조(Schema)를 논리적으로 묘사하기 위해 사용되는 지능적 도구


② 데이터 모델의 종류


- 개념적 데이터 모델


· 현실 세계에 대한 인간의 이해를 돕기 위해 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정

· 속성들로 기술된 개체 타입과 이 개체 타입들 간의 관계를 이용하여 현실 세계를 표현

· 현실 세계에 존재하는 개체를 인간이 이해할 수 있는 정보 구조로 표현하기 때문에 정보 모델이라고도 부름

· 대표적인 개념적 데이터 모델 : E-R 모델


- 논리적 데이터 모델


· 개념적 모델링 과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있는 컴퓨터 세계의 환경에 맞도록 변환하는 과정

· 필드로 기술된 데이터 타입과 이 데이터 타입들 간의 관계를 이용하여 현실 세계 표현

· 단순히 데이터 모델이라고 하면 논리적 데이터 모델을 의미

· 특정 DBMS는 특정 논리적 데이터 모델 하나만 선정하여 사용

· 데이터 간의 관계를 어떻게 표현하느냐에 따라 관계 모델, 계층 모델, 네트워크 모델로 구분


※정보 모델링과 데이터 모델링

현실 세계에 존재하는 개체를 컴퓨터 세계의 데이터 구조로 기술하는 것이 논리적 데이터 모델링이라면, 정보 모델링은 현실 세계에 존재하는 개체를 인간이 이해할 수 있는 정보 구조로 표현하는 개념적 데이터 모델을 의미



③ 데이터 모델에 표시할 요소


· 구조(Structure) : 논리적으로 표현된 개체 타입들 간의 관계로서 데이터 구조 및 정적 성질을 표현

· 연산(Operation) : 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세로서 데이터베이스를 조작하는 기본 도구

· 제약 조건(Constraint) : 데이터베이스에 저장될 수 있는 실제 데이터의 논리적인 제약 조건


④ 데이터 모델의 구성 요소


- 개체(Entity)

· 데이터베이스에 표현하려는 것(사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체)

· 실세계에 독립적으로 존재하는 유형, 무형의 정보로서 서로 연관된 몇 개의 속성으로 구성

· 파일 시스템의 레코드에 대응하는 것으로 어떤 정보를 제공하는 역할 수행

· 독립적으로 존재하거나 그 자체로서도 구별 가능


- 속성(Attribute)

· 데이터의 가장 작은 논리적 단위로서 파일 구조상의 데이터 항목 또는 데이터 필드에 해당

· 개체를 구성하는 항목


- 관계(Relationship)


· 관계의 형태

- 일 대 일(1:1)

- 일 대 다(1:n)

- 다 대 다(n:m)



008 개체 - 관계 모델


① 개체 - 관계(Entity-Relationship) 모델의 개요


·  E-R 모델은 개념적 데이터 모델의 가장 대표적인 것(1976년 피터 첸 Peter Chen에의해 제안됨)

· 개체와 개체 간의 관계를 기본 요소로 이용하여 현실 세계의 데이터를 개념적인 논리 데이터로 표현하기 위한 방법으로 많이 사용됨

· 개체 타입과 이들 간의 관계 타입을 이용해 현실 세계를 개념적으로 표현

· E-R 모델에서 데이터를 개체, 관계 속성으로 묘사함

· E-R 다이어그램으로 표현, 1:1, 1:N, N:M 등의 관계유형을 제한 없이 나타낼 수 있음


② E-R 다이어그램


 기호 이름

 의미

 사각형

개체(Entity) 타입

 마름모

관계(Relationship) 타입 

 타원

속성(Attribute)

 밑줄 타원

기본키 속성 

 복수 타원

복합 속성 

 관계

1:1, 1:n, n:m 등의 개체 간 관계에 대한 대응수를 선 위에 기술함

선, 링크

개체 타입과 속성을 연결 


③ 확장된 E-R 모델


· 개체를 구성하는 속성들은 개체에서 선을 연결하여 작은 원으로 표시

· 속성 중에서 단일 식별자(기본키)는 작은 원을 검게 칠함

· 복합 식별자는 관련 속성들을 선으로 묶어서, 묶은 선 끝에 검게 칠한 원을 그림

· 관계와 개체를 연결하는 선 위에는 (최소 대응수, 최대 대응수)로 표시



009 관계형 데이터 모델


① 관계형 데이터 모델(Relational Data Model)의 개념


· 관계형 데이터 모델은 가장 널리 사용되는 데이터 모델로, 계층 모델과 망 모델의 복잡한 구조를 단순화시킨 모델

· 2차원적인 표(Table)를 이용해서 데이터 상호 관계를 정의하는 DB 구조

· 기본키(Primary Key)와 이를 참조하는 외래키(Foreign Key)로 데이터 간의 관계 표현

· 관계 모델의 대표적인 언어 : SQL

· 1:1, 1:N, N:M 관계 자유롭게 표현 가능


② 관계형 데이터 모델의 특징


· 장점 : 간결하고, 보기 편리하고, 다른 데이터베이스로의 변환이 용이

· 단점 : 성능이 다소 떨어짐



010 계층형 데이터 모델


계층형 데이터 모델은 트리 구조를 이용해서 데이터의 상호관계를 계층적으로 정의한 구조


① 계층형 데이터 모델(Hierarchical Data Model)의 구성 형태


· 데이터의 논리적 구조도가 트리 형태이며, 개체(Entity)가 Tree를 구성하는 노드 역할

· 개체 집합에 대한 속성 관계를 표시하기 위해 개체를 노드로 표현하고 개체 집합들 사이의 관계를 링크로 연결

· 개체 간의 관계를 부모와 자식 간의 관계로 표현

· 계층형 DB를 구성하는 관계의 유형

- 속성 관계(Attribute Relation) : 세그먼트(개체)를 구성하는 속성들의 관계

- 개체 관계(Entity Relation) : 개체와 개체 간의 관계를 링크로 표시


② 계층형 데이터 모델의 특징


· 개체 타입 간에는 상위와 하위 관계가 존재하며, 일 대 다(1:N) 대응관계만 존재

· 계층을 정의하는 트리는 하나의 루트 개체 타입과 다수의 종속되는 개체 타입으로 구성된 순서 트리

· 루트 개체 타입은 다른 개체 타입과 구별됨

· 개체 삭제 시 연쇄 삭제

· 개체 타입들 간에는 사이클(Cycle)이 허용되지 않음

· 두 개체 간에는 하나의 관계만 허용

· 개체를 세그먼트로 부름

· 대표적인 DBMS : IMS


③ 계층형 데이터 모델의 장·단점


장점

· 구조가 간단하고, 판독이 용이

· 구현, 수정, 검색이 용이

· 데이터의 독립성이 보장됨

· 망 데이터 모델이나 관계 데이터 모델도 실제로 구현할 때는 계층적인 기억 구조를 이용


단점

· 데이터 상호 간의 유연성이 부족

· 검색 경로가 한정되어 있음

· 삽입과 삭제 연산이 매우 복잡

· 다 대 다 관계를 처리하기 어려움



011 망(네트워크)형 데이터 모델


① 망형 데이터 모델(Network Data Model)의 개요


· CODASYL이 제안 → CODASYL DBTG 모델이라고도 불림

· 그래프를 이용해서 데이터 논리 구조를 표현

· 상위(Owner)와 하위(Member) 레코드 사이에서 다 대 다(N:M) 대응 관계를 만족하는 구조

· 레코드 타입 간의 관계는 1:1, 1:N, N:M 가능

· 대표적인 DBMS : DBTG, EDBS, TOTAL


② 망형 데이터 모델의 표현


· Entity군 : 동종의 Entity 그룹

· Entity SET : 주종 관계에 있는 Entity군들의 그룹

· SET Membership Type : 일 대 다(1:N) 관계에 연관된 레코드 타입들을 각각 오너(Owner)와 멤버(Member)라고 부름

오너(Owner) : 트리 구조에서의 Parent와 같은 개념

멤버(Member) : 트리 구조에서의 Children과 같은 개념


③ 망형 데이터 모델의 특징


· 레코드 타입과 링크들의 집합으로 구성

· 레코드 타입의 집합이 있음

· 레코드 타입들을 연결하는 링크 집합이 존재

· 상위 하나의 레코드에 대하여 하위의 레코드가 복수 대응하고, 하위 하나의 레코드에 대해 상위 레코드도 복수 대응

· 링크들로 표현한 관계성에는 제한 없음

· 한 레코드 타입에서 자기 자신으로 가는 링크는 없음

· 오너와 레코드 타입은 서로 동일 형태가 될 수 없음



012 데이터베이스 설계


① 데이터베이스 설계의 개념 및 고려 사항


데이터 베이스 설계란 사용자의 요구를 분석하여 그것들을 컴퓨터에 저장할 수 있는 데이터베이스의 구조에 맞게 변형한 후 특정 DBMS로 데이터베이스를 구현하여 일반 사용자들이 사용하게 하는 것


데이터베이스 설계 시 고려사항


· 무결성 : 삽입, 삭제, 갱신 등의 연산 후에도 데이터베이스에 저장된 데이터가 정해진 제약 조건을 항상 만족해야 함

· 일관성 : 데이터베이스에 저장된 데이터들 사이나, 특정 질의에 대한 응답이 처음부터 끝까지 변함없이 일정해야 함

· 회복(Recovery) : 시스템에 장애가 발생했을 때 장애 발생 직전의 상태로 복구할 수 있어야 함

· 보안 : 불법적인 데이터의 노출 또는 변경이나 손실로부터 보호할 수 있어야 함

· 효율성 : 응답시간의 단축, 시스템의 생산성, 저장 공간의 최적화 등이 가능해야 함

· 데이터베이스 확장 : 데이터베이스 운영에 영향을 주지 않으면서 지속적으로 데이터를 추가할 수 있어야 함


② 요구 조건 분석


요구 조건 분석은 데이터베이스를 사용할 사람들로부터 필요한 용도를 파악하는 것


· 데이터베이스 사용자에 따를 수행 업무와 필요한 데이터의 종류, 용도, 처리 형태, 흐름, 제약 조건 등을 수집

· 수집된 정보를 바탕으로 요구 조건 명세 작성


③ 개념적 설계(정보 모델링, 개념화)


개념적 설계란 정보의 구조를 얻기 위하여 현실 세계의 무한성과 계속성을 이해하고, 다른 사람과 통신하기 위하여 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정


· 개념적 설계 단계에서는 개념 스키마 모델링과 트랜잭션 모델링을 병행 수행

· 요구 부넉 단계에서 나온 결과(요구 조건 명세)를 DBMS에 독립적인 E-R 다이어그램(개체 관계도)으로 작성

· DBMS에 독립적인 개념 스키마를 설계


④ 논리적 설계(데이터 모델링)


논리적 설계 단계에서는 현실 세계에서 발생하는 자료를 컴퓨터가 이해하고 처리할 수 있는 물리적 저장장치에 저장할 수 있도록 변환하기 위해 특정 DBMS가 지원하는 논리적 자료 구조로 변환시키는 과정


· 논리적 구조의 데이터로 모델화

· 개념적 설계가 개념 스키마를 설계하는 단계라면 논리적 설계에서는 개념 스키마를 평가 및 정재하고 DBMS에 따라 서로 다른 논리적 스키마를 설계하는 단계

· 트랜잭션의 인터페이스 설계

· 관계형 데이터베이스라면 테이블을 설계하는 단계· 


⑤ 물리적 설계(데이터 구조화)


논리적 설계 단계에서 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정


· 데이터베이스 파일의 저장 구조 및 액세스 경로 설정

· 저장 레코드의 형식, 순서, 접근 경로와 같은 정보를 사용하여 데이터가 컴퓨터에 저장되는 방법을 묘사

· 물리적 설계 단계에 꼭 포함되어야 할 것은 저장 레코드의 양식 설계, 레코드 집중의 분석 및 설계, 접근 경로 설계 등

· 기본적인 데이터 단위는 저장 레코드

· 여러 가지 타입의 저장 레코드 집합


물리적 설계 시 고려사항


· 인덱스의 구조

· 레코드의 크기

· 파일에 존재하는 레코드 개수

· 파일에 대한 트랜잭션의 갱신과 참조 성향

· 성능 향상을 위한 개념 스키마의 변경 여부 검토

· 빈번한 질의와 트랜잭션들의 수행속도를 높이기 위한 고려

· 시스템 운용 시 파일 크기의 변화 가능성


물리적 설계 옵션 선택 시 고려 사항


물리적 설계 옵션이란 특정 DBMS에서 제공되는 것으로, 데이터베이스 파일에 대한 저장 구조와 접근 경로에 대한 다양한 옵션


· 반응시간(Response Time) : 트랜잭션 수행을 요구한 시점부터 처리 결과를 얻을 때까지 경과 시간

· 공간 활용도(Space Utilization) : 데이터베이스 파일과 액세스 경로 구조에 의해 사용되는 저장공간의 양

· 트랜잭션 처리량(Transaction Throughput) : 단위시간 동안 데이터베이스 시스템에 의해 처리될 수 있는 트랜잭션의 평균 개수


데이터베이스 구현


구현 단계는 논리적 설계 단계와 물리적 설계 단계에서 도출된 데이터베이스 스키마를 파일로 생성하는 단계


· 사용하려는 특정 DBMS의 DDL을 이용하여 데이터베이스 스키마를 기술한 후 컴파일하여 빈 데이터베이스 파일을 생성

· 생성된 빈 데이터베이스 파일에 데이터 입력

· 응용 프로그램을 위한 트랜잭션 작성

· 데이터베이스 접근을 위한 응용 프로그램 작성


※ 데이터 베이스 설계 순서

요구분석 : 요구 조건 명세서 작성

개념적 설계 : 개념 스키마, 트랜잭션 모델링, E-R 모델

논리적 설계 : 목표 DBMS에 맞는 논리 스키마 설계, 트랜잭션 인터페이스 설계

물리적 설계 : 목표 DBMS에 맞는 물리적 구조의 데이터로 변환

구현 : 목표 DBMS의 DDL로 데이터베이스 생성, 트랜잭션 작성



출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 1과목 데이터베이스


1장 데이터베이스의 개념


001 정보시스템


① 자료와 정보


· 자료(Data) : 현실 세계에서 관찰이나 측정을 통해 수집한 단순한 사실이나 결과값, 가공되지 않은 상태

· 정보(Information) : 의사 결정에 도움을 줄 수 있는 유용한 형태로, 자료를 가공(처리)해서 얻을 수 있는 결과


② 정보 시스템의 정의


· 조직체에 필요한 Data를 수집, 저장해 두었다가 필요 시에 처리해서 의사결정에 유용한 정보를 생성하고 분배하는 수단

· 사용하는 목적에 따라 경영 정보 시스템, 군사 정보 시스템, 인사 행정 정보 시스템, 의사 결정 지원 시스템 등으로 구분되어 사용


③ 자료 처리 시스템


정보 시스템이 사용할 자료를 처리하는 정보 시스템의 서브 시스템, 처리 형태에 따라 세 가지로 분류됨


- 일괄 처리 시스템

일괄 처리 시스템은 시스템의 효율성을 최대한 높이기 위해 일정 시간 또는 일정량의 데이터를 모아서 한 번에 처리하는 시스템


· 시스템 중심의 자료 처리 방법

· 반환 시간이 늦지만 하나의 작업이 모든 자원을 독점하므로 CPU 유효시간 감소

· 테이프와 같은 순차 접근 방법을 사용하는 업무에 적합

· 단위 시간당 처리하는 작어부가 많으므로 시스템 성능 높음

· 트랜잭션당 처리 비용 적음

· 급여 계산, 회계 마감 업무, 세무 처리, 수도/전기요금 처리, 연말 결산 등의 업무에 사용됨


- 온라인 실시간 처리 시스템(온라인 처리 시스템)

온라인 실시간 처리 시스템은 데이터 발생 즉시, 또는 데이터 처리 요구가 있는 즉시 처리하여 결과를 산출하도록 하는 방식


· 사용자 중심의 처리 방식

· 처리 시간 단축, 처리 비용 절감

· 우주선 운행, 레이더 추적기, 핵물리학 실험 및 데이터 수집, 은행의 On-Line 업무 등 시간에 제한을 두고 수행되어야 하는 작업에 사용


- 분산 처리 시스템

분산 처리 시스템은 지리적으로 분산되어 있는 여러 대의 컴퓨터(프로세서)를 통신 회선으로 연결하여 논리적으로 하나의 시스템을 사용하는 것처럼 운영하는 방식


· 각 단말기나 컴퓨터 시스템은 고유의 운영체제와 CPU, 메모리를 가지고 있음

· 시스템의 구축이나 운영이 복잡한 반면, 신뢰성이 높고 확장이 용이


※ 데이터웨어하우스(Data Warehouse)

데이터웨어하우스란 조직이나 기업체의 중심이 되는 주요 업무 시스템에서 추출되어 새로이 생성된 데이터베이스로서 의사결정지원 시스템을 지원하는 주체적, 통합적, 시간적 데이터의 집합체



002 데이터베이스의 개념


① 데이터베이스의 정의


· 통합된 데이터(Integrated Data) : 자료의 중복을 배제한 데이터의 모임

· 저장된 데이터(Stored Data) : 커뮤터가 접근할 수 있는 저장 매체에 저장된 자료

· 운영 데이터(Operational Data) : 조직의 고유한 업무를 수행하는 데 존재 가치가 확실하고 없어서는 안 될 반드시 필요한 자료

· 공용 데이터(Shared Data) : 여러 응용 시스템들이 공동으로 소유하고 유지하는 자료


② 데이터베이스의 특징


· 실시간 접근성(Real-Time Accessibility) : 수시적이고 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 함

· 계속적인 변화(Continuous Evolution) : 데이터베이스의 상태는 동적이다. 즉 새로운 데이터의 삽입(Insertion), 삭제(Deletion), 갱신(Update)으로 항상 최신의 데이터를 유지해야 함

· 동시 공용(Concurrent Sharing) : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 함

· 내용에 의한 참조(Content Reference) : 데이터베이스에 있는 데이터를 참조할 때, 데이터 레코드의 주소나 위치에 의해서가 아니라, 사용자가 요구하는 데이터 내용으로 데이터를 찾음


③ 데이터베이스 시스템


- 데이터베이스 시스템의 정의

데이터베이스를 이용하여 자료를 저장하고 관리하여 정보를 얻어내는 데 필요한 커뮤터 중심의 시스템


- 데이터베이스 시스템의 구성 요소


· 데이터베이스

· 스키마

· DBMS(데이터베이스 관리 시스템)

· 데이터베이스 언어

· 데이터베이스 컴퓨터

· 데이터베이스 사용자



003 DBMS의 기능


① DBMS(DataBase Management System)의 정의


· 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해주는 소프트웨어

· 기존의 파일 시스템이 갖는 데이터의 종속성과 중복성의 문제를 해결하기 위해 제안된 시스템으로, 모든 응용 프로그램들이 데이터베이스를 고용할 수 있도록 관리

· 데이터베이스의 구성, 접근 방법, 유지관리에 대한 모든 책임


② DBMS의 발전 배경


- 종래의 파일 처리 방식에서의 데이터 구성


· 처리 업무 하나하나마다 데이터 파일을 독립적으로 구성

· 같은 내용의 데이터가 서로 다른 업무의 파일에서 중복 저장되어 관리되는 데이터 중복성을 초래

· 응용 프로그램과 데이터 간의 상호 의존 관계에 따른 데이터 종속성을 초래


- 중복성으로 인한 문제점

· 일관성 : 중복된 데이터 간에 내용이 일치하지 않는 상황이 발생해 일관성 없어짐

· 보안성 : 중복되어 있는 모든 데이터에 동등한 보안수준을 유지하기 어려움

· 경제성 : 저장공간의 낭비와 동일한 데이터의 반복 작업으로 비용이 증가함

· 무결성 : 제어의 분산으로 데이터의 정확성을 유지할 수 없음


- 종속성으로 인한 문제점 : 응용 프로그램과 데이터 파일이 상호 의존적인 관계에서는 데이터 파일이 보조기억장치에 저장되는 방법이나 저장된 데이터의 접근 방법을 변경할 때 응용 프로그램도 같이 변경해야 함


- 데이터베이스 도입에서의 데이터 구성

데이터베이스를 이용하는 방식에서는 각 업무 처리에 필요한 자료들의 중복을 최소화하여 한 곳에 모아서 구성함


③ DBMS의 필수 기능


· 정의(조직)(Definition) 기능

- 모든 응용 프로그램들이 요구하는 데이터 구조를 지원하기 위해 데이터베이스에 저장될 데이터 형(Type)과 구조에 대한 정의, 이용 방식, 제약 조건 등을 명시하는 기능

- 데이터와 데이터의 관계를 명확하게 명세할 수 있어야 하며, 원하는 데이터 연산은 무엇이든 명세할 수 있어야 함

· 조작(Manipulation) 기능

- 데이터 검색, 갱신, 삽입, 삭제 등을 체계적으로 처리하기 위해 사용자와 데이터베이스 사이의 인터페이스 수단을 제공하는 기능

· 제어(Control) 기능

- 데이터베이스를 접근하는 갱신, 삽입, 삭제 작업이 정확하게 수행되어 데이터의 무결성이 유지되도록 제어해야 함

- 정당한 사용자가 허가된 데이터만 접그날 수 있도록 보안을 유지하고 권한을 검사할 수 있어야 함

- 여러 사용자가 데이터베이스를 동시에 접근하여 데이터를 처리할 때 처리 결과가 항상 정확성을 유지하도록 병행 제어(Concurrency Control)을 할 수 있어야 함


④ DBMS의 장·단점


 장점

단점 

  · 데이터의 논리적, 물리적 독립성 보장

  · 데이터의 중복을 피할 수 있어 기억공간 절약됨

  · 저장된 자료를 공동으로 이용 가능

  · 데이터 일관성 유지 가능

  · 데이터 무결성 유지 가능

  · 보안 유지 가능

  · 데이터 표준화 가능

  · 데이터 통합하여 관리 가능

  · 항상 최신의 데이터 유지

  · 데이터의 실시간 처리 가능

  · 데이터베이스의 전문가 부족

  · 전산화 비용 증가

  · 대용량 디스크로 집중적인 Access로 과부하(Overhead) 발생

  · 파일의 예비(Backup)과 회복이 어려움

  · 시스템 복잡



※ 데이터의 독립성 : 종속성에 대비되는 말로 DBMS의 궁긍적 목표

· 논리적 독립성 : 응용 프로그램과 데이터베이스를 독립시킴

데이터의 논리적 구조를 변경시키더라도 응용 프로그램은 변경되지 않음

· 물리적 독립성 : 응용 프로그램과 보조기억장치 같은 물리적 장치를 독립시킴

데이터베이스 시스템의 성능 향상을 위해 새로운 디스크를 도입하더라도 응용 프로그램에는 영향을 주지 않고 데이터의 물리적 구조만을 변경함



004 스키마(Schema)


① 스키마의 정의


· 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터(Meta-Data)의 집합

· 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의

· 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나누어짐

[그림1] 스키마





② 스키마의 특징


· 데이터 사전에 저장되며, 다른 이름으로 메타데이터라고 부름

· 현실 세계의 특정한 한 부분의 표현으로서 특정 데이터 모델을 이용해서 만들어짐

· 시간에 따라 불변인 특성 가짐

· 데이터의 구조적 특성을 의미하며, 인스턴스에 의해 규정됨


③ 스키마의 3계층


데이터베이스 관리 시스템은 외부적 스키마에 따라 명시된 사용자의 요구를 개념적 스키마에 적합한 형태로 변경하고 이를 다시 내부적 스키마에 적합한 형탤 변환함


- 외부 스키마(External Schema) = 서브 스키마 = 사용자 뷰(View)


· 사용자나 응용프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것

· 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브 스키마라고도 함

· 하나의 데이터베이스 시스템에는 여러 개의 외부 스키마가 존재할 수 있으며, 하나의 외부 스키마를 여러 개의 응용 프로그램이나 사용자가 공용할 수도 있음

· 같은 데이터베이스에 대해서도 서로 다른 관점을 정의할 수 있도록 허용함

· 일반 사용자는 질의어(SQL)를 이용하여 DB를 쉽게 사용할 수 있음

· 응용 프로그래머는 COBOL, C 등의 언어를 사용하여 DB에 접근


- 개념 스키마(Conceptual Schema) = 전체적인 뷰(View)


· 데이터베이스의 전체적인 논리적 구조로서, 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스로 하나만 존재

· 개체 간의 관계와 제약 조건을 나타내고 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의

· 데이터베이스 파일에 저장되는 데이터의 형태를 나타내는 것으로, 단순히 스키마라고 하면 개념 스키마를 의미함

· 기관이나 조직체의 관점에서 데이터베이스를 정의한 것

· 데이터베이스 관리자(DBA)에 의해서 구성됨


- 내부 스키마(Internal Schema) = 저장 스키마(Storage Schema)


· 물리적 저장장치의 입장에서 본 데이터베이스 구조로, 물리적인 저장장치와 밀접한 계층

· 실제로 데이터베이스에 저장될 레코드의 물리적인 구조를 정의하고, 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타냄

· 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마


 

005 데이터베이스 언어


· 데이터베이스 언어(Database Language)는 데이터베이스를 구축하고 이용하기 위한 데이터베이스 시스템과의 통신 수단

· DBMS를 통해 사용하며, 기능과 사용 목적에 따라 데이터 정의 언어, 데이터 조작 언어, 데이터 제어 언어로 구분됨


① 데이터 정의 언어(DDL; Data Definition Language)


· 데이터 정의 언어는 DB 구조, 데이터 형식, 접근 방식 등 DB를 구축하거나 수정할 목적으로 사용하는 언어

· 번역한 결과가 데이터 사전이라는 특별한 파일에 여러 개의 테이블로서 저장됨


- 데이터 정의 언어의 기능

· 외부 스키마 명세를 정의

· 데이터베이스의 논리적, 물리적 구조 및 구조 사상을 정의

· 스키마에 사용되는 제약 조건에 대한 명세를 정의

· 데이터의 물리적 순서를 규정


② 데이터 조작 언어(DML; Data Manipulation Language) = 서브 언어


· 데이터 조작 언어는 사용자로 하여금 데이터를 처리할 수 있게 하는 도구로서, 사용자(응용 프로그램)와 DBMS간의 인터페이스를 제공

· 응용 프로그램을 통하여 사용자가 DB의 데이터를 실질적을 조작할 수 있도록 하기 위해 FORTRAN, COBOL등의 호스트 언어에 DB 기능을 추가해서 만든 언어

· 대표적인 데이터 조작 언어에는 질의어가 있으며, 질의어는 터미널에서 주로 이용하는 비절차적(Non Procedural) 데이터 언어


- 데이터 조작어의 형태

· 절차적 조작 언어 : 사용자가 어떤 데이터가 필요하면, 필요한 데이터를 어떻게 구하는지 절차에 맞게 구체적으로 명시하는 언어

· 비절차적 조작 언어 : 사용자가 어떤 데이터가 필요한지만을 명시하고 어떻게 구하는지 명시하지 않는 언어로서, 배우기 쉽고 사용하기 쉬우나 코드의 효율성 면에서 비효율적이다.


- 데이터 조작어의 조건

· 사용하기 쉽고 자연 언어에 가까워야 함

· 데이터에 대한 연산 뿐만 아니라 뷰 내의 데이터나 데이터 간의 관계를 정확하고 완전하게 명시할 수 있어야 함

· 데이터 언어의 효율적인 구현을 지원해야 함(즉, 데이터 언어의 구문이 DBMS가 제공하는 기본적인 연산과 관련을 갖도록 해야 함)


※질의어(Query Language)

· 단말 사용자가 쉽게 DB를 액세스할 수 있도록 대화식의 자연어로 만든 비절차적 조작 언어

· 독자적이고 상호 작용 형태로 터미널에서 많이 사용하는 고급 명령어 형태의 독립적 데이터 조작 언어

· 질의어의 종류 : SQL, IMS, DBTG, TOTAL 등



③ 데이터 제어 언어(DCL; Data Control Language)


· 데이터 제어 언어는 무결성, 보안 및 권한 제어, 회복 등을 하기 위한 언어

· 데이터를 보호하고 데이터를 관리하는 목적으로 사용됨


- 데이터 제어 언어의 기능

· 불법적인 사용자로부터 데이터를 보호하기 위한 데이터 보안

· 데이터 정확성을 위한 무결성 유지

· 시스템 장애에 대비한 데이터 회복과 병행수행 제어



006 데이터베이스 사용자


① DBA(DataBase Administrator)


데이터베이스 시스템의 모든 관리와 운영에 대한 책임을 지고 있는 사람이나 그룹으로 다음과 같은 역할을 함


데이터베이스 설계와 조작에 대한 책임

  · 데이터베이스 구성 요소 결정

  · 개념 스키마 및 내부 스키마 정의

  · 데이터베이스의 저장 구조 및 접근 방법 정의

  · 보안 및 데이터베이스의 접근 권한 부여 정책 수립

  · 장애에 대비한 예비 조치와 회복에 대한 전략 수립

  · 무결성을 위한 제약 조건의 지정

  · 데이터 사전의 구성과 유지 관리

  · 사용자의 변화 요구와 성능 향상을 위한 데이터 베이스의 재구성

행정 책임

  · 사용자의 요구와 불평의 청취 및 해결

  · 데이터 표현 방법의 표준화

  · 문서화에 대한 기준 설정

  ·  데이터베이스 사용에 관한 교육

시스템 감시 및 성능 분석

  · 변화 요구에 대한 적응과 성능 향상에 대한 감시

  · 시스템 감시 및 성능 분석

  · 자원의 사용도와 병목 현상 조사

  · 데이터 사용 추세, 이용 형태 및 각종 통계 등을 종합, 분석



② 응용 프로그래머


· 응용 프로그래머는 일반 호스트 언어로 프로그램을 작성할 때 데이터 조작어(DML)를 삽입해서 일반 사용자가 응용 프로그램을 사용할 수 있게, 인터페이스를 제공할 목적으로 데이터베이스에 접근하는 사람들

· 응용 프로그래머는 C, COBOL, PASCAL 등의 호스트 언어와 DBMS가 지원하는 데이터 조작어에 능숙한 컴퓨터 전문가


③ 일반 사용자


일반 사용자는 보통 터미널을 이용하여 데이터베이스에 있는 자원을 활용할 목적으로 질의어나 응용 프로그램을 사용하여 데이터베이스에 접근하는 사람들




출처 : 2017 시나공 정보처리기사 필기

+ Recent posts