ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터베이스 개념 정리
    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 

    - 내용..

     

    간단 용어정리

    • 데이터베이스 
    • 스키마 : 데이터베이스의 구조와 제약 조건에 관한 명세
    • 데이터 사전(시스템 카탈로그) : 데이터베이스에 저장되어 있는 모든 데이터 개체들에 대한 정보를 유지/관리 하는 시스템
    • 메타데이터 : 데이터에 관한 데이터 

    댓글

Designed by Tistory.