정보처리기사 필기 - 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 시나공 정보처리기사 필기

+ Recent posts