데이터베이스 개념

데이터베이스의 정의

데이터베이스란 어느 한 조직에서 업무 처리를 위해 다수의 응용 시스템 혹은 다수의 사용자들이 공용으로 사용하기 위해 통합,저장된 운영 데이터의 집합

- 통합된 데이터 : 중복을 최소화한 데이터의 집합

- 저장된 데이터 : 필요시 언제든지 이용할 수 있도록 저장된 데이터의 집합

- 공용 데이터 : 공유할 수 있도록 만든 데이터의 집합

- 운영 데이터 : 중복을 최소화하고 여러 사람이 공유함에 있어 문제가 발생하지 않도록 관리를 필요로 하는 데이터로 이용가치가 있는 데이터의 집합


|데이터베이스의 특징

- 계속적인 변화(Continuous Evolution)

- 동시 공유(Concurrent Sharing)

- 실시간 접근성(Real - time - Accessibility)

- 내용에 의한 참조(Contents Reference) 


|데이터베이스의 구성 요소

- 개체(Entity) : 사람이 생각하는 개념이나 정보 단위와 같은 현실세계의 대상체, 서로 구별이 되는 하나하나의 대상 / 개체는 하나 이상의 속성으로 구성

- 속성(Attribute) : 개체의 특성이나 혹은 상태를 기술

- 관계(Relation) : 두 개 이상의 개체 사이 또는 속성 간의 상호 연관성( 1:1 / 1:n / n:m)


데이터베이스 관리 시스템

|DBMS의 정의

파일 시스템의 문제점인 데이터의 중복성과 종속성 등의 문제를 최소화하기 위해 등장, 사용자와 데이터베이스 간의 중계 역할을 한다. 데이터베이스의 내용을 정의하고, 조자, 제어할 수 있도록 함으로써 모든 사용자나 응용 프로그램들이 데이터베이스를 공유할 수 있도록 관리 운영해주는 소프트웨어 시스템


|DBMS의 필수 기능

정의, 조작, 제어


|데이터베이스 언어

- DDL : 데이터베이스 구조를 정의 및 수정 등을 위해 사용되는 언어( CREATE, DROP, ALTER )

- DML : 데이터베이스 내의 자료를 검색, 삽입, 수정, 삭제하기 위해 사용되는 언어( SELECT, INSERT, UPDATE, DELETE )

- DCL : 데이터베이스의 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어( COMMIT, ROLLBACK, GRANT, REVOKE )


데이터베이스 구조(스키마)

|스키마

데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술, 정의한 것을 말함

- 외부 스키마 : 전체 데이터 중 사용자가 사용하는 한 부분에서 본 논리적 구조를 말하며, 서브 스키마라고도 함

- 개념 스키마 : 논리적 관점(사용자 관점)에서 본 전체적인 데이터 구조

- 내부 스키마 : 물리적 저장 장치 관점에서 본 데이터베이스의 물리적 구조


|데이터베이스 관리자(DBA)

데이터베이스 시스템과 관련된 모든 자원에 대해 기획,통제를하며 데이터베이스 언어를 이용해 DBMS를 거쳐 데이터베이스 시스템의 전체적인 관리 운영에 책임을 지는 사람이나 집단.


데이터베이스 설계

요구조건분석->설계(개념->논리->물리)->구현->운영및개선

|설계

- 개념적 설계 : 데이터베이스를 개념적으로 표현함으로써 데이터베이스를 구성할 구성요소를 결정한 후 수행할 작업과 관계를 설계

- 논리적 설계 : 개념적 설계에서 만들어진 구조를 논리적으로 구현 가능한 데이터 모델로 변환하는 단계

- 물리적 설계 : 논리적 데이터베이스 구조를 실제 기계가 처리하기에 알맞도록 내부 저장 장치 구조와 접근 경로 등을 설계


개체 - 관계 모델(E-R Model)

|개체-관계 모델(E-R Model)

개념적 설계 단계에서 사용되는 설계 기법으로, 개체타입과 관계타입 간의 구조를 약속된 기호를 이용하여 표현


|데이터베이스 모델

개념적 설계 이후 논리적 설계 단계에서 사용되는 모델로 논리적으로 구현 가능한 데이터 모델로 변환하기 위해 사용

- 관계 데이터 모델 : 표로나타냄

- 네트워크 데이터 모델 : 망데이터모델 / 레코드 타입 간 관계를 도형으로 표현

- 계층 데이터 모델 : 트리 구조로 표현


관계 데이터 모델

자료의 저장 형태를 2차원 구조의 표(테이블)로 표현하는 방법

|관계 데이터 모델

- 릴레이션 : 표

- 속성 : 릴레이션을 구성하는 각 열 

- 튜플 : 릴레이션의 한 행을 구성하는 속성들의 집합(= Record)

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

- 릴레이션 스키마 : 릴레이션의 이름과 속성 이림의 집합

- 릴레이션 인스턴스 : 릴레이션에서 어느 시점까지 입력된 튜플들의 집합

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

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


키와 무결성 제약조건

|키의 개념

키란 관계 데이타베이스에서 튜플을 식별하기 위해 사용하는 속성이나 속성의 집합으로, 데이터베이스의 참조 또는 검색 시에 사용된다.


|키의 종류

1)후보키(Candidate key)

- 릴레이션에서 각 튜플을 유일하게 식별할 수 있는 속성이나 속성의 잡합

- 유일성과 최소성을 만족

2)기본키(Primary key)

- 후보키 중에서 튜플을 식별하기 위해 특별히 선택된 키

- 기본키는 중복될 수 없으며, NULL값이 올 수 없다.

3)대체키(Alternate key)

- 후보키 중에서 기본키를 제외한 속성

4)외래키(Foreign key)

- 하나의 테이블에서 원하는 자료를 얻지 못하는 경우 다른 테이블 참조 하기 위해 사용되는 속성

- 외래키는 참조 릴레이션(테이블)의 기본키와 같다

- 외래키는 NULL이 올 수 있다.

5)슈퍼키(Super key)

- 한 릴레이션 내의 튜플들을 식별할 수 있는 후보키와 다른 속성들과의 모든 조합


무결성 제약조건

무결정은 데이터베이스 자료의 오류 없는 정확성과 안정성을 나타내는 것으로, 무결성 제약조건은 정확성과 안정성을 유지하기 위한 제약조건이다.

1) 개체 무결성

- 기본키는 NULL값이 올 수 없으며, 중복될 수 없음

2) 참조 무결성

- 외래키는 NULL값이 올 수 있으며, 참조 릴레이션의 기본키와 같아야 한다.

3) 도메인 무결성

- 속성값이 정해진 범위 이내의 값으로 구성해야 하는 제약조건

4) 고유 무결성

- 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 그 속성값은 모두 달라야한다.

5) NULL 무결성

- 특정 속성에 NULL값이 올 수 없다.

6) 키 무결성

- 한 릴레이션에는 최소한 하나의 키가 존재해야 한다.


관계 데이터 연산

|관계 대수

결과를 얻기 위한 절차를 표현하기 때문에 절차적 언어라고 한다.

- 순수 관계 연산자 : SELECT, PROJECT, JOIN, DIVISION

- 일반 집합 연산자 : 합집합, 교집합, 차집합, 카티션 프로덕트


1) 셀렉트

- 릴레이션에서 조건을 만족하는 수평적 부분 집합을 구하기 위한 연산

- 결과는 조건을 만족하는 튜플들로 테이블이 만들어진다.

- 연산기호는 시그마(σ)를 이용

- 표기 형식 : σ<선택조건>(테이블 이름)


2) 프로젝트

- 릴레이션에서 수직적 부분 집합(속성의 값)을 구하는 연산으로 원하는 속성만 추출하기 위한 연산

- 연산기호는 파이(π)를 이용한다.

- 표기 형식 : π<추출속성리스트>(테이블 이름)


3) 조인

- 두 테이블로부터 조건에 맞는 관련된 튜플들을 하나의 튜플로 결합하여 하나의 테이블로 만드는 연산

- 동일조인, 자연조인, 외부조인, 세타조인

- 연산기호는 ▷◁

- 표기 형식 : 테이블1 ▷◁ <조인조건> 테이블2

-> 동일 조인 : '='연산자만을 사용하여 조건을 표현(중복되는 속성도 모두 표현)

-> 자연 조인 : 동일 조인한 결과에서 중복되는 속성을 제거

-> 외부 조인 : 조건에 맞지 않는 튜플도 결과 테이블에 포함 시켜 조인하는 방법으로 해당 자료가 없는 부분은 NULL값이 된다.

-> 세타 조인: '='외의 연산자를 이용해 조건 수식을 표현하여 조인하는 연산자.


4) 디비전

- 'A DIVISION B'는 B테이블의 조건을 만족하는 튜플들을 테이블 A에서 추출하는 연산


|관계해석

결과를 얻기 위한 과정을 표현하는 것으로 연산자 없이 정의하는 방법을 이용하는 비절차적 언어

- 튜플 관계 해석, 도메인 관계 해석

- 표기 형식 : {결과값|조건}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

VIEW

- 기본 테이블의 기본키를 포함한 속성 집합으로 뷰를 구성해야 삽입/삭제/갱신이 가능

- 정의된 뷰는 다른 뷰를 정의하는데 기초가 될 수 있다.

- 둘 이상의 테이블에서 유도된 뷰는 변경X

- DISTINCT / GROUP BY / HAVING 을 사용해 만든 뷰는 변경X

- DROP VIEW 뷰 { RESTRICT | CASCADE }

  -> RESTRICT : 해당 뷰를 다른 곳에서 참조시 제거 취소

  -> CASCADE : 해당 뷰를 다른 곳에서 참조시 참조하는 다른 뷰나 제약 조건 까지 모두 제거


Embeded SQL

: 응용 P/G에서 SQL문을 내포해서 실행되도록 호스트 P/G에 삽입한 SQL


Stored Procedure

: PL/SQL처럼 특정한 SQL문을 저장해놓고 가져다 씀


이상(Anomaly)

: 테이블의 일부 속성들이 종속으로 인해 데이터 중복이 발생하고 이로 인해 테이블 조작 시 문제 발생하는 현상

- 삽입 이상

- 삭제 이상

- 갱신 이상

-> 원인 : 여러가지 종류의 사실들을 하나의 릴레이션에 표현하기 때문

-> 해결 : 속성들 간의 종속성을 분석해서 하나의 종속성은 하나의 릴레이션에 표현되도록 분해  이를 정규화라고 한다


함수적 종속(Functional Dependency)

: 어떤 테이블 R에서 X와 Y를 각각 R의 속성 집합의 부분 집합이라 할때 속성 X의 값 각각에 대해 시간에 관계없이 항상 속성YY의 값이 오직 하나만 연관되어 있을 때 'Y는 X에 함수적 종속' or 'X가 Y를 함수적으로 결정한다'라고 하며 X->Y로 표기한다. X를 결정자 Y를 종속자(X가 결졍되면 Y도 결정된다.)

- 완전 함수적 종속 : X->Y이면서도 X의 임의의 진부분집합인 Z와는 종속관계가 없는 속성

- 부분 함수적 종속 : X->Y이면서도 X의 임의의 진부분집합인 Z와도 Z->Y인 속성


정규화(Nomarlization)

: 테이블의 속성들의 종속적인 관계를 이용해 테이블을 무손실 분해하는 과정으로 가능한 중복을 제거하여 삽입/삭제/갱신 이상의 발생가능성을 줄이는 것이다.

비정규 릴레이션

↓    도메인이 원자값

제 1정규형 : 테이블에 속한 모든 속성의 도메인이 원자값임

↓    부분적 함수 종속 제거

제 2정규형 : 기본키가 아닌 모든 속성이, 기본키에 대하여 완전 함수적 종속을 만족

↓    이행적 함수적 종속 제거 : a->b이고 b->c일때, a->c를 만족하는 관계

제 3정규형 : 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않음

↓ 결정자가 후보키가 아닌 함수종속 제거

BCNF : 모든 결정자가 후보키

↓ 조인종속 제거

제 5정규형 : 테이블 R의 모든 조인 종속이 R의 후보키를 통해서만 성립( 조인 종속 : 테이블 R과 R의 프로젝션들을 모두 조인한 결과가 동일)


시스템 카탈로그(데이터 사전)

: DBA의 도구로써 DB에 저장되어 있는 모든 데이터 개체들에 대한 정의나 명세에 대한 정보가 수록되어 있는 테이블

: 사용자와 DBMS를 통해 수정X, 접근은 가능

: 시스템 카탈로그에 저장된 내용을 메타 데이터라고 한다.


인덱스

: 튜플에 빠르게 접근하기 위해 <키값, 포인터> 쌍으로 구성되는 데이터 구조

- 기본 인덱스 : 기본키를 위한 인덱스, 관계형 DBMS에서는 모든 기본키에 자동적으로 기본 인덱스를 생성

- 보조 인덱스 : 기본 인덱스가 아닌 나머지

- 클러스터 인덱스 : 인덱스 테이블의 키 값 순서와 튜플의 물리적 순서와 튜플의 물리적 순서를 동일하게 유지하는 인덱스

#행 이주

: 인데스 테이블에서 튜플의 값을 자료형 보다 크게 넣으면 해당 튜플은 뒤로 밀려나게 된다.

#종류

- m-원 검색트리 : 이진 검색 트리를 수정한 것, 한 노드가 최대 m-1개의 키값과 최대 m개의 서브 노드를 가진다. 포인터의 최대 개수는 m개, 키 값의 최대 개수는 m-1개

- B 트리 : 균형잡힌 m-원검색트리, 루트는 단말 노드가 아닐 떄, 적어도 2개의 서브트리를 가진다. 루트도 아니고 단말 노드도 아니라면 최소 m/2, 최대 m개의 서브노드를 가진다. 모든 단말 노드들은 같은 높이를 가진다.

- B* 트리 : B-트리의 빈번한 노드 분할을 줄이는 목적으로 제시, 각 노드가 최소한 2/3가 채워진 상태여야 한다. 한 노드가 가득차고 인접 노드가 모두 가득찰 때까지 분할을 지연시킨다.

- B+ 트리 : B-트리의 순차적인 순회 작업에 대한 해결책으로 제시, 인덱스 세트와 순차 세트로 구분

인덱스 세트 : 단말 노드가 아닌 노드들로 구성(키 값을 단말 노드에 있는 키 값으로 직접 찾아가는데 사용)

순차 세트 : 단말 노드로만 구성( 모든 키 값을 단말 노드에 나열. 인덱스 세트의 키 값들도 다시 한번 나열)

순차적으로 Linked list를 구성하고 있어서 순차적 처리가 가능


트랜잭션

:DB에서 하나의 논리적 기능을 수행하기 위한 일련의 연산 집합, 작업의 논리적 단위

- COMMIT : 하나의 트랜잭션이 정상적으로 종료될 경우 수행되는 연산

- ROLLBACK : 하나의 트랜잭션이 비정상적으로 종료될 경우 수행되는 연산

- 특징(ACID)

1. 원자성 : 트랜잭션의 연산을 DB에 모두 반영되든지 전혀 반영되지 않던지 둘 중 하나

2. 일관성 : 시스템이 가지고 있는 고정적인 요소는 트랜잭션의 연산이 끝나도 동일

3. 독립성 : 한 트랜잭션이 데이터를 갱신하는 동안 다른 트랜잭션들은 접근하지 못한다.

4. 영속성 : 트랜재션이 완료된 후에는 시스템 오류가 발생해도 트랜잭션에 의해 변경된 내용은 보존됨

- 상태

1. 활동

2. 실패

3. 철회 : 트랜잭션이 비정상적으로 종료되어 ROLLBACK 연산을 수행한 상태

4. 부분완료 : COMMIT 연산 하기전

5. 완료


회복

: 트랜잭션 실행 도중 장애가 발생해 DB가 손상되었을 경우 다시 복구하는 작업

- 장애의 유형

1.  실행장애 : 사용자의 실수/ 무결성 규칙 위반 등으로 질의 실행이 실패

2. 트랜잭션 장애 : 비정상적인 상황으로 인해 트랜잭션 실행이 중지

3. 시스템 장애 : DB에는 손상을 입히지 않으나 H/W의 오동작 , 정전

4. 미디어 장애 : 저장장치의 손상 / 오동작으로 DB의 일부 또는 전부가 물리적으로 손상되는 현상

- 회복 관리기

->트랜잭션이 성공적으로 완료 되지 않으면, Log를 이용해 트랜잭션이 DB의 모든 변환를 취소해서 회복

->트랜잭션이 성공적으로 완료 되었으나 디스크에 반영되지 않았을 경우, Log를 이용해 재작업을 수행

(COMMIT만 하지 못했다는 의미 : 부분완료)

-> COMMIT을 수행 했고 장애가 생기면 REDO / 아니면 UNDO

- 회복 기법

1. 연기 갱신 : 트랜잭션이 성공적으로 종료될 때까지 DB에 대한 실질적인 갱신 연기 / 실행되는 동안 변경된 내용은 Log에 보관 / 부분완료 시점에 Log로 DB에 반영 / 애초에 DB에 적용을 안하기에 장애가 생격도 Redo 작업만 하면된다.

2. 즉각 갱신 : 바로 DB에 반영 / 장애를 대비해 모든 변경내용 Log에 저장 / Redo와 Undo 모두 수행

3. 그림자 페이지 : 갱신 이전의 DB를 페이지단위로 구성해 카피해놓고 실제 페이지를 대상으로 트랜잭션에 대한 변경작업 반영 / 장애생격서 RollBack할 때, 해당 페이지만 복구, Log와 Redo, Undo 모두 필요없다.

4. 검사점 기법 : Log전체를 조사하는 걸 피하기 위한 기법 / 트랜잭션 실행중 주기적으로 변경 내용이나 상황과 검사점을 같이 Log에 저장

5. 미디어 회복 기법 : DB의 내용을 주기적으로 안전한 스토리지에 덤프 / 장애 발생시 가장 최근의 덤프를 디스크에 적재하고 Log를 통해 최근의 트랜잭션에 대해 Redo


병행제어(Concurrency Control)

: 동시에 다수의 트랜잭션을 수행할때, DB의 일관성 파괴되지 않도록 트랜잭션끼리 상호작용을 제어하는 기술

: 다수의 트랜잭션들이 동시에 인터리빙하게 실행되는 것

- 목적

1. DB의 공유를 최대화

2. 시스템 활용도 최대화

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

4. 단위 시간당 트랜잭션 처리 건수 최대화

5. DB의 일관성 유지

- 병행제어가 없으면 생기는 문제점 

1. 갱신 분실 : 다수의 트랜잭션이 같은 데이터를 공유, 갱신할 때 갱신 결과의 일부가 분실

2. 모순성 : 다수의 사용자가 동시에 같은 데이터를 갱신할 때, DB 내의 데이터들이 불일치

3. 연쇄 복귀 : 병행 수행되던 트랜잭션들 중 하나가 Rollback하는 경우, 다른 트랜잭션도 Rollback

- 잠금 

: DB관리 방법, 하나의 트랜잭션이 사용하는 데이터에 다른 트랜잭션이 접근 못하게 하는 것

: 잠금 -> 실행 -> 해제

- 잠금단위

-> DB, 테이블, 레코드, 필드

-> 단위가 커지면 Locking Overhead는 감소하지만 공유성은 낮아진다.

-> 단위가 작아지면 Locking Overhead는 증가하지만 공유성은 높아진다.

- 교착상태(Dead Lock)

- 공유잠금(Shared Lock) : 다른 트랜잭션은 읽기만 가능

- 배타잠금(Exclusive Lock) : 다른 트랜잭션은 일기/쓰기 불가능

- 병행 제어 기법의 종류

1. 2-단계 잠금규약 : 트랜잭션 스케줄의 직렬성을 보장하는 대표적인 잠금 기법(트랜잭션들이 인터리빙하게 실행될때 그순서)

-> 확장단계( 트랜잭션이 잠금만가능하고 해제는 불가능한단계) / 축소단계(트랜잭션이 해제만가능하고 자금은 불가능한 단계)

-> 스케줄의 직렬성을 보장한다는 장점은 있지만 교착 상태는 예발할 수 없다는 단점.

2. 타임 스탬프 순서 : 시스템이 각 트랜잭션을 실행할 때 부여하는 값

-> 트랜잭션 스케줄의 결과와 직렬 스케줄의 결과가 동일함을 보장하는 기법

-> 직렬성 순서를 결정하기 위해, 트랜잭션 간의 실행 순서를 미리 결졍하는 기법

-> 트랜잭션을 실행하기전에 타임 스탬프를 부여하고, 그 순서에 따라 트랜잭션을 수행

-> 교착 상태가 발생하지 않는다,


보안

- 보안 기법

1. SQL이용한 권한 부여 기법

-> 뷰를 이용하는 방법

-> DCL을 이용해 권한 부여와 취소

2. 암호화 기법

-> 개인키 암호화(DES)

-> 공용키 암호화(RSA)


튜닝

- DB의 환경 등을 조정해 DBMS의 성능을 향상시키는 작업

- DBMS의 높은 작업 처리량과 짧은 응답 시간을 갖도록 하는 것이 중요

- 목표

-> 디스크 블록에 대한 접근 횟수 최소화

-> 신속한 재사용

-> 모든 SQL문은 공유가 가능하도록, 작성 규칙을 준수하여 작성

-> 다수의 사용자가 자원을 안정적으로 사용하게끔 잠금 기능을 최소화

생략


객체 지향 데이터베이스(ODB : Object - oriented - Database)

- 객체 지향 데이터베이스의 구성

-> 객체와 객체 식별자(OID)

-> 속성과 메소드

-> 클래스와 인스턴스

-> 상속

-> 오버로딩과 오버라이딩

- 객체 관계 데이터베이스(ORDB)

특징

1. 표준으로 ISO에서 제시한 SQL3

2. 확장 가능 데이터 타입, 사용자 정의 데이터 타입, 사용자정의 함수 지원

-> 대용량의 데이터 저장을 위해 LOB타입이 있다.

->가변 길이 문자 스트링(CLOB)/가변 길이 이진 스트링(BLOB)

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------



'Free' 카테고리의 다른 글

오늘의 노래  (0) 2016.06.14
정보처리기시 실기 13년 2회  (0) 2016.06.13
정보처리기사 실기 13년1회  (0) 2016.06.13
정보처리기사 실기 최근 기출된 용어들  (0) 2016.06.12
JAVA 난수생성  (0) 2016.06.08

+ Recent posts