데이터베이스 개념
|데이터베이스의 정의
데이터베이스란 어느 한 조직에서 업무 처리를 위해 다수의 응용 시스템 혹은 다수의 사용자들이 공용으로 사용하기 위해 통합,저장된 운영 데이터의 집합
- 통합된 데이터 : 중복을 최소화한 데이터의 집합
- 저장된 데이터 : 필요시 언제든지 이용할 수 있도록 저장된 데이터의 집합
- 공용 데이터 : 공유할 수 있도록 만든 데이터의 집합
- 운영 데이터 : 중복을 최소화하고 여러 사람이 공유함에 있어 문제가 발생하지 않도록 관리를 필요로 하는 데이터로 이용가치가 있는 데이터의 집합
|데이터베이스의 특징
- 계속적인 변화(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)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------