-
데이터베이스 개념 정리Computer Science/Database 2020. 3. 9. 15:37
(수정중)
DDL, DML, DCL
- DDL(Data Definition Language) : 데이터 정의 언어 - 테이블 생성(create), 삭제(drop), 변경(alter) 등
- DML(Data Manipulation Language) : 데이터 조작언어 - 조회(select), 삽입(insert), 수정(update), 삭제(delete) 등
- DCL(Data Control Language) : 데이터 제어 언어 - 권한부여(grant), 권한회수(revoke)
- TCL(Transaction Control Language) : 트랜잭션 제어 언어 - commit, rollback 등
데이터 무결성(Data Integrity)
- 무결성이란 데이터와 현실세계의 실제 값이 일치하는 정확성
- 개체(Entity) 무결성 : 기본키는 null이 아니다.
- 참조(Referential) 무결성 : 외래키의 값은 참조하는 테이블의 기본키 이거나 null이다.
- 도메인(Domain) 무결성 : 특정 속성의 값이 정의된 도메인에 속해야한다.
View
- 하나 이상의 테이블에서 유도되는 가상테이블
- 실제 물리적으로 존재하지 않는다. View를 통해 데이터 관리할 수 있다.
- 필요한 데이터만 View로 정의해서 처리하면 관리가 편하고 Query가 간단해진다. (수행속도 향상)
- View를 통해서만 데이터에 접근할 수 있게 하면 보안성을 가질 수 있다.
Stored Procedure
- SP는 특정 작업을 수행하는 SQL문들을 컴파일해서 데이터베이스 서버에 미리 저장해둔 것이다.
- 빠른 SQL 실행시간 : SP은 만들어질 때 SQL구문이 분석되고 최적화 된다. (한 번 실행된 후에는 메모리에 캐시 된다.)
- 네트워크 부하 감소 : 클라이언트에서 다수의 SQL 구문을 보낼 필요 없이 SP를 실행 시키는 명령문만 보내면 된다.
- 모듈 프로그래밍 : 함수처럼 계속 호출하여 사용할 수 있다. 개발 언어에 상관없이 수정이 가능하다.
- 보안성 향상 : SP를 통해서만 데이터에 접근할 수 있도록 하면 보안성을 얻을 수 있다.
함수적 종속(Functional Dependency)
- X 속성이 Y 속성을 결정하는 것을 말한다. (X->Y, 결정자->종속자)
- 완전 함수적 종속 : 어떤 속성이 기본키에 대하여 완전히 종속인 경우
- 부분 함수적 종속 : 어떤 속성이 기본키의 일부인 속성에 대해 종속인 경우
- 이행적 함수적 종속 : a->b 이고 b->c 일 때 a->c을 만족하는 관계인 경우
이상(Anomaly)
- 테이블에서 일부 속성들의 함수적 종속관계 때문에 데이터의 중복이 발생한다.
- 테이블에 데이터 중복이 존재하면 테이블 조작시 다음과 같은 문제가 발생한다.
- 삽입 이상 : 원치 않는 데이터가 삽입 된다.
- 삭제 이상 : 원치 않는 데이터가 삭제된다.
- 갱신 이상 : 데이터가 일부만 갱신된다.
정규화(Normalization)
- 테이블 속성들의 함수적 종속성을 이용하여 테이블을 분해하는 것이다.
- 정규화의 목적은 중복을 제거하여 이상 현상을 방지 하는 것이다.
제 1 정규형 : 속성의 도메인은 원자값
제 2 정규형 : 완전함수적 종속 만족
제 3 정규형 : 이행적 함수 종속 제거
BCNF : 모든 결정자는 후보키여야 함
제 4 정규형 : 다중 값 종속 제거
제 5 정규형 : 조인 종속성 만족
트랜잭션(Transaction)
- DB에서 하나의 논리적인 기능을 수행하기 위한 작업 단위
- DB에 장애가 발생 했을 때 회복작업에서 사용된다.
- 다수의 사용자가 DB를 동시에 사용할 수 있도록 병행성 작업을 할 때 사용된다.
- 트랜잭션 처리 결과에 따라 Commit 연산과 Rollback 연산이 수행된다.
트랜잭션의 4가지 특성(ACID)
- 원자성(Atomicity) : 트랜잭션 연산은 DB에 모두 반영되거나 아예 반영되지 않아야한다.
- 일관성(Consistency) : 트랜잭션 수행이 성공적으로 끝나면 DB는 데이터의 일관성을 유지해야함
- 고립성(Isolation) : 한 트랜잭션이 데이터를 갱신하는 동안 다른 트랜잭션의 접근을 허용하지 않는다.
- 지속성(Durability) : 트랜잭션 수행이 성공적으로 끝나면 그 결과는 영구적으로 반영되어야한다.
Commit과 Rollback
- Commit : 트랜잭션 처리가 정상적으로 종료되어 변경 내용을 DB에 반영하는 연산
- Rollback : 트랜잭션 처리가 비정상으로 종료되어 트랜잭션이 수행한 모든 작업을 취소하고 이전상태로 되돌리는 연산
DB 회복(Recovery)
회복 : 트랜잭션들을 실행하는 도중 장애가 발생하여 DB가 손상되었을 경우 손상되기 전 상태로 복구하는 작업
Redo : DB 손상 시 commit 되어있는 트랜잭션을 다시 작업함
Undo : DB 손상 시 commit 기록이 없는 트랜잭션들의 작업을 모두 취소시킴
체크포인트 회복기법
트리거(Trigger)
- 트리거는 특정 테이블에 DML이 수행되었을 때 자동으로 실행되는 작업이다.
- ex) 주문 데이터가 입력될 때마다 판매수량과 금액을 집계하는 트리거가 실행되게 함
인덱스(index)
-데이터(튜플)에 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조
-인덱스는 정렬되어 있기 때문에 데이터를 빠르게 가져올 수 있다.
-인덱스가 없으면 테이블을 full scan을 해야 해서 성능이 떨어짐
-거의 모든 DBMS는 B-Tree 계열 인덱스 사용
B-Tree, B+ Tree
-b+- tree는 비리프 노드와 리프노드로 구성된다.
-리프 노드에는 키와 키에 대응하는 포인터가 저장되어 있음
-리프 노드는 링크드 리스트이고 키순으로 정렬되어 있음(범위 검색 유리)
-값을 비교하며 root 노드부터 leaf 노드까지 내려가며 하위키를 찾는다.
-찾은 하위키부터 상위키까지 leaf노드를 범위 스캔한다.
-인덱스를 사용하는 방법 : 힌트를 사용한다, where 절에 범위 조건 둔다.
-My SQL 인덱스 예제 : https://ra2kstar.tistory.com/96
옵티마이저(Optimizer)
-SQL을 빠르고 효율적으로 수행하도록 실행계획을 세우는 DBMS 내부의 엔진
-규칙기반 옵티마이저 : 미리 정해 놓은 규칙에 따라 실행 계획 수립
-비용기반 옵티마이저 : 비용(쿼리 수행시간)에 따라 실행 계획 수립
힌트(Hint)
-힌트 : 사용자는 힌트를 작성하여 옵티마이저 실행 계획을 직접 수립(힌트를 통해 직접 인덱스를 지정하거나 조인 방식을 변경)
-ex) 힌트를 통해 조인의 종류를 선택할 수 있음(nested loop 조인, sort merge 조인, hash 조인)
-nested loop 조인 : 하나의 테이블에서 데이터를 먼저 찾고 그 다음 테이블 조인
-sort merge 조인 : 각 테이블을 정렬한 다음 테이블 병합
-hash 조인 : 해시 테이블을 생성해서 처리
Select 속도 향상하는 방법
-SQL 튜닝을 한다. 즉, SQL 작성시 인덱스를 활용하여 데이터 검색속도를 빠르게 한다.
-옵티마이저 힌트를 통해 직접 실행 계획 직접 수립한다.
-반정규화를 통해 성능향상을 한다. (테이블분할 또는 테이블 병합 ->select 속도 향상)
-필요한 데이터들에 대한 view를 미리 만들어둔다.
-테이블 분할(파티셔닝) : 하나의 테이블을 수평/수직 분할하여 데이터 엑세스 범위를 줄인다.
-테이블 병합 : 테이블을 합쳐 중복을 허용하는 대신 조인을 줄인다.
NOSQL
- 내용..
간단 용어정리
- 데이터베이스
- 스키마 : 데이터베이스의 구조와 제약 조건에 관한 명세
- 데이터 사전(시스템 카탈로그) : 데이터베이스에 저장되어 있는 모든 데이터 개체들에 대한 정보를 유지/관리 하는 시스템
- 메타데이터 : 데이터에 관한 데이터