[CS] 데이터베이스

Nam_JU·2022년 9월 21일
0

Computer Science

목록 보기
6/6

DBMS

DBMS는 데이터베이스 관리 시스템을 나타낸다.
사용자가 데이터에 관한 정보를 효율적이고 효과적으로 구성, 검색할 수 있도록 하는 응용프로그램 모음이다

RDBMS란

Relational DataBase Management System
관계형 모델을 기반으로 하는 DBMS 유형이다
RDBMS 테이블은 서로 연관되어있어 일반 DBMS보다 효율적으로 데이터를 저장, 구성 및 관리할 수 있다.
데이터의 원자성, 일관성, 격리 및 내구성을 유지하며 데이터 무결성을 높인다

장점

  • 여러 사용자 인터페이스를 제공한다
  • 필요한 경우 데이터 백업 및 복구를 제공한다

SQL

SQL문은 기본적으로 DDL, DML, DCL 세가지 범주로 나뉜다.

  • DDL: 데이터정의 언어 : 데이터를 보유하는 구조를 정의하는데 사용된다 . 명령은 자동 커밋된다
  • DML : 데이터 조작 언어 : 명령은 데이터베이스의 데이터를 조작하는데 사용된다. 커밋되지 않으며 롤백할 수 있다.
  • DCL : 데이터 제어 언어 : 데이터를 사용하기 위한 액세스 권한 취소와 같이 데이터베이스에서 데이터의 가시성을 제어하는데 사용된다.

정규화와 비정규화

  • 정규화 : 데이터의 무결성을 유지하기위해 잘 정의된 방식으로 중복 데이터를 제거하는 프로세스이다.
  • 비정규화 : 복잡한 쿼리 속도를 높이고 성능을 향상시키기위해 테이블에 중복 데이터를 추가하는 프로세스이다

데이터베이스 트랜잭션

  • 데이터베이스의 일관성있는 상태를 다른것으로 변경하는 작업 순서를 데이터베이스 트랜잭션이라고 한다.

트랜젝션의 4가지 성질

  • Automicty 원자성: 트랜잭션의 연산이 DB에 모두 반영되던지 전혀 반영이 되지 않던지 둘중 하나만 수행해야한다
  • Consistency 일관성 : 트랜잭션이 성공적으로 완료 된 뒤에는 언제나 일관성 있는 DB상태로 변환되어야 한다
  • Isolation 독립성 : 수행중인 트랜잭션이 완전히 완료되기 전에는 다른 트랜잭션에서 수행결과를 참조할 수 없다
  • Durablility 지속성 : 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다

인덱스

인덱스는 데이터분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료구조이다. 테이블 내의 1개의 컬럼, 혹은 여러개의 컬럼을 이용하여 생성될 수 있다.

  • 인덱스를 사용해야하는 경우 : 데이터의 양이 많고 검색이 변경보다 빈번한 경우, 인덱스를 걸고자 하는 필드의 값이 다양한 값을 가지는 경우
  • 인덱스를 사용할시 단점 : 인덱스를 생성하는 시간이 크게 요구된다

기본키와 복합키

  • 기본키 : 모든 행 데이터가 고유하게 식별되는 테이블의 해당 열이다. 기본키의 경우 NULL값을 허용하지 않지만 Unique키는 NULL 값을 허용한다
  • 복합키 : 열 세트가 테이블의 모든행을 고유하게 식별하는 후보키의 양식이다

트리거

  • 자동으로 실행되도록 정의하는 저장 프로시저이다. INSERT/UPDATE/DELETE문에 대한 응답으로 자동 호출한다

사용하는 이유

  • 업무 규칙을 보장
  • 업무 처리 자동화
  • 데이터 무결성 강화

데이터베이스 무결성

데이터 베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성

  • 개체 무결성 : 기본키를 구성하는 속성은 NULL값이나 중복값을 가질 수 없다
  • 참조 무결성 : 외래키 값은 NULL이거나 참조 테이블의 기본키 값이어야 한다

교착상태

  • 여러개의 트랜잭션들이 실행을 하지 못하고 서로 무한정 기다리는 상태를 의미한다.

해결하는 방법

  1. 예방기법: 각 트랜잭션이 실행되기 전에 필요한 데이터를 모두 로킹 해주는 것이다
  2. 회피기법 : 자원을 할당할 때 시간 스탬프를 사용하여 교착상태가 일어나지 않도록 회피하는 방법이다

이상현상의 종류

이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입,삭제,수정할 때 생기는 논리적 오류를 말한다

  • 삽입 이상 : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
  • 갱신 이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상
  • 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상

트랜잭션 격리 수준(Transaction Isolation Level)

  • Isolation Level 이란?
    트랜잭션에서 일관성이 없는 데이터를 허용하도록 하는 수준
  • Isolation Level 의 필요성
    데이터베이스는 ACID 같이 트랜잭션이 원자적이면서도 독립적인 수행을 하도록 한다.그래서 Locking 이라는 개념이 등장한다.
    트랜잭션이 DB를 다루는 동안 다른 트랜잭션이 관여하지 못하게 막는 것
    하지만 무조건적인 Locking으로 동시에 수행되는 많은 트랜잭션들을 순서대로 처리하는 방식으로 구현되면 DB의 성능은 떨어지게 된다.
    반대로 응답성을 높이기 위해 Locking 범위를 줄인다면 잘못된 값이 처리 될 여지가 있다.
    그래서 최대한 효율적인 Locking 방법이 필요하다.

Isolation Level 의 종류

  • Read Uncommitted (레벨 0)
    SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 Level
    트랜잭션에 처리중인 혹은 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다.
    따라서, 어떤 사용자가 A라는 데이터를 B라는 데이터로 변경하는 동안 다른 사용자는 아직 완료되지 않은(Uncommitted 혹은 Dirty) 트랜잭션이지만 변경된 데이터인 B를 읽을 수 있다.
    데이터베이스의 일관성을 유지할 수 없다.
  • Read Committed (레벨 1)
    SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리는 Level
    트랜잭션이 수행되는 동안 다른 트랜잭션이 접근할 수 없어 대기하게 된다.
    Commit이 이루어진 트랜잭션만 조회할 수 있다.
    따라서, 어떤 사용자가 A라는 데이터를 B라는 데이터로 변경하는 동안 다른 사용자는 해당 데이터에 접근할 수 없다.
    SQL Server가 Default로 사용하는 Isolation Level
  • Repeatable Read (레벨 2)
    트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 Level
    트랜잭션이 범위 내에서 조회한 데이터의 내용이 항상 동일함을 보장한다.
    따라서, 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정이 불가능하다.
  • Serializable (레벨 3)
    트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 Level
    완벽한 읽기 일관성 모드를 제공한다.
    따라서, 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정 및 입력이 불가능하다.


Table Full Scan & Index Range Scan

테이블에 저장된 데이터를 읽는 방식은 두 가지이다

Table Full Scan은 해당 테이블에 전체 블록을 읽어서 사용자가 원하는 데이터를 찾는 방식이다.
Index Range Scan은 인덱스를 이용하여 데이터를 일정부분읽어서 ROWID로 테이블 레코드를 찾아가는 방식이다. ROWID는 테이블 레코드가 디스크 상에 어디 저장됐는지를 가리키는 위치 정보이다.


Clustered Index & Non Clustered Index

데이터베이스에서 인덱스는 두 가지 종류이다

Clustered Index

  • 테이블당 1개씩만 허용된다.
  • PK설정 시 그 칼럼은 자동으로 클러스터드 인덱스가 만들어진다.
  • 인덱스 자체의 리프 페이지가 곧 데이터이다. 즉 테이블 자체가 인덱스이다. (따로 인덱스 페이지를 만들지 않는다.)
  • 데이터 입력, 수정, 삭제 시 항상 정렬 상태를 유지한다.
  • 비 클러스형 인덱스보다 검색 속도는 더 빠르다. 하지만 데이터의 입력. 수정, 삭제는 느리다.

Non Clustered Index

  • 테이블당 약 240개의 인덱스를 만들 수 있다.
  • 인덱스 페이지는 로그파일에 저장된다.
  • 레코드의 원본은 정렬되지 않고, 인덱스 페이지만 정렬된다.
  • 인덱스 자체의 리프 페이지는 데이터가 아니라 데이터가 위치하는 포인터(RID)이기 때문에 클러스터형보다 검색 속도는 더 느리지만 데이터의 입력, 수정, 삭제는 더 빠르다.
  • 인덱스를 생성할 때 데이터 페이지는 그냥 둔 상태에서 별도의 인덱스 페이지를 따로 만들기 때문에 용량을 더 차지한다



참고자료
http://egloos.zum.com/ljlave/v/1530887
https://hyonee.tistory.com/41
https://wedul.site/403
https://junghn.tistory.com/entry/DB-클러스터-인덱스와-넌클러스터-인덱스-개념-총정리

profile
개발기록

0개의 댓글