데이터베이스 이론 정리

🪐 C:on·2022년 1월 20일
0

computer science

목록 보기
6/6
post-thumbnail

데이터베이스

파일에 데이터를 보관하는 문제점

  • 같은 내용의 데이터가 중복 저장
    • 저장공간의 낭비를 일으켰고 일관성과 무결성을 유지하기 어려움
  • 응용프로그램이 데이터파일에 종속적
    • 원래는 없던 컬럼을 추가하기 위해 파일시스템을 수정하면 응용프로그램도 수정해야함
  • 데이터파일의 공유, 보안, 회복 기능이 약함

DBMS는 위 문제를 해결하기 위해 등장한 데이터를 통합하여 저장하고 관리하는 시스템이다.

별도의 파일로 관리되던 데이터를 하나로 통합하여 관리하면서 응용프로그램을 대신해서 데이터를 검색, 삽입, 수정할 수 있는 기능을 하게되었다.

응용프로그램들은 DB를 공유해서 사용할 수 있게 되었다.




데이터베이스 시스템

데이터 시스템 요소

스키마 : 데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것
인스턴스 : 스키마에 따라 데이터베이스에 실제로 저장된 값
메타데이터 : 데이터에 대한 데이터


데이터 언어

데이터 정의어 DDL
스키마를 정의하거나 수정, 삭제하기 위해 사용 (CREATE, ALTER, DROP)

데이터 조작어 DML
데이터 CRUD를 요구하기 위해 사용(SELECT, INSERT, UPDATE, DELETE)

  • 절차적 데이터 조작어 : 사용자가 어떤 데이터를 원하고 그 데어터를 얻기위해 무엇을 처리해야 하는지 설명
  • 비절차적 데이터 조작어 : 사용자가 어떤 데이터를 원하는 지만 설명하면 데이터를 얻을 수 있음

데이터제어어 DCL
DBA가 관리를 목적으로 사용




데이터 모델링

개체와 개체간의 관계를 이용해서 현실 세계를 개념적 구조로 표현

이것을 다이어그램 그림으로 그린것이 ERD이다.

개체 = entity
저장할 가치가 있어야 하며 다른 개체와 구별되는 이름과 고유한 특성을 가지고 있어야 한다.
하나의 테이블과 대응됨

속성 = attribute
개체나 관계가 가지고 있는 고유의 특성
의미있는 데이터의 가장 작은 논리적 단위
테이블의 한 컬럼과 대응됨

인스턴스 = instance
개체를 구성하고 있는 속성이 실제 값을 가짐으로써 실체화된 개체
테이블에서 하나 이상의 행과 대응




관계 모델링

관계데이터 모델은 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델이다.


릴레이션

개체에 관한 데이터를 2차원 테이블의 구조로 저장한것, 즉 테이블을 말하는 것이다.

  • 속성(atrribute): relation의 열
  • 튜플: relation의 행
  • 도메인: 하나의 속성이 가질 수 있는 모든 값의 집합(Integer, Text, ....)
  • 카디널리티: 하나의 릴레이션에서 튜플의 전체 개수
  • 릴레이션의 스키마 : 릴레이션의 논리적구조, ex.고객(id, name, age, job)
  • 릴레이션의 인스턴스 : 한 시점의 릴레이션에 존재하는 튜플의 집합
  • 릴레이션특성
    • 튜플의 유일성 : 동일한 튜플은 존재할 수 없다
    • 무순서 : 튜플 사이 순서나 속성 사이 순서는 아무 의미가 없다
    • 속성의 원자성 : 속성은 더이상 쪼갤 수 없는 원자 값을 넣어줘야 한다.

릴레이션에서 튜플들을 구별하는 하나 또는 그 이상의 속성

키 특성

  • 유일성 : 하나의 릴레이션에서 모든 튜플은 서로 다른 키를 가져야 한다
  • 최소성 : 꼭 필요한 최소한의 속성들로만 키를 구성해야한다.

키 종류

  • 슈퍼키 : 유일성을 만족하는 속성 또는 속성집합
  • 후보키 : 유일성과 최소성을 만족하는 속성 또는 속성집합
  • 기본키 : 후보키 중 기본적으로 사용하기 위해 선택한 키
  • 대체키 : 후보키 중 기본키로 선택되지 못한 키
  • 외래키 : 다른 릴레이션의 기본키를 참조하는 속성 또는 속성집합



이상현상과 정규화

이상현상이란 불필요한 데이터 중복으로 인해 연산 수행시 발생하는 부작용을 의미한다.

  • 삽입이상 : 새 데이터를 삽입할 때 불필요한 데이터도 함께 삽입해야 하는 문제
  • 갱신이상 : 함께 바뀌어야 하는 튜플들 중 한 튜플의 속성이 바뀌었는데 나머지 튜플의 속성은 바뀌지않아 데이터가 불일치하는 경우
  • 삭제이상 : 삭제하는 경우 꼭 필요한 데이터가 함께 삭제되어 데이터 손실이 발생하는 경우

정규화

이상현상이 발생하지 않는 바람직한 릴레이션으로 만들어가는 과정

정규화를 통해 릴레이션은 무손실 분해 되어야 하며 조인했을 때 분해전의 릴레이션으로 복원이 가능해야 한다.


정규형

  1. 제1정규형
    • 릴레이션의 모든 속성값이 원자값으로 가진 상태
  2. 제2정규형
    • 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전함수 종속된 상태
    • 이행적 함수 종속이 존재하면서 이상현상이 발생할 수 있다.
    • ex) id → (이름, 학부, 등록금) 이고 학부→등록금 관계가 일 때 등록금은 학부와 id에 두번 종속되는 현상이 발생한다.
  3. 제3정규형
    • 2정규형에서 이행적 함수종속을 제거
    • 기본키가 아닌 모든 속성이 기본키에 이행적함수종속이 되지않는 상태
    • ex) id → (이름, 학부, 등록금) 일 때, 다시 학부→등록금 관계가 되므로 이를 쪼개서 id→ 이름, 학부, 학부 → 등록금으로 테이블을 만들어줘야 한다.



인덱스란

데이터베이스의 검색 기능 성능을 높여주는 기술이다. 전체를 조회할 때는 O(N)의 시간이 들지만 인덱스를 사용하면 O(logN)으로 시간복잡도가 감소한다.

다음과 같은 경우에 사용하면 좋다.

  • SELECT와 JOIN이 잦은 경우
  • 테이블 데이터가 많은 경우

장점

원하는 데이터를 찾기 위해 테이블을 검색하는 작업을 줄이거나 없앨 수 있으며 검색 속도를 향상시킨다.


단점

테이블 새로운 데이터를 추가하거나 갱신, 삭제가 자주 일어나면 인덱스에도 추가, 갱신이 일어나기 때문에 오버헤드가 발생할 수 있다.




트랜잭션

데이터베이스의 상태를 변화시키는 하나의 작업 단위를 일컫는다. 따라서 그 안에는 여러개의 연산이 수행될 수 있으며 한 연산이라도 실패하면 그 트랜잭션은 전체가 실패한 것이 된다.

트랜잭션의 중요성은 금융소프트웨어를 예로들면 이해하기 쉽다.

100만원을 송금하는 작업은 내 계좌에서 100만원을 출금해서 상대방 계좌에 100만원을 입금하는 작업이다.

이때 출금까지는 정상작동했는데 입금에서 오류가 발생해버리면 출금한 돈은 증발하게 된다.

따라서 두 작업을 트랜잭션으로 묶어서 둘 중 하나라도 실패하면 모두 실패한 작업으로 처리해줘야 돈이 증발하는 일이 발생하지 않을 것이다.


특성

트랜잭션을 하기 위해선 데이터베이스의 무결성과 일관성을 보장하기 위해 ACID라는 4가지 특성을 만족해야 한다.

Atomic : 원자성으로 트랜잭션을 구성하는 연산들은 한꺼번에 반영되거나 한꺼번에 반영되지 않아야 함, 즉 수행과정 중 오류가 발생하면 트랜잭션 시작 전 상태로 되돌려야 한다.

Consistency : 일관성으로 트랜잭션 성공 후 데이터베이스가 일관성있는 상태를 유지하는 것. 즉 데이터베이스의 제약 조건을 위배하는 작업을 트랜잭션이 수행할 수 없게 하는 것이다.

Isolation : 격리성으로 여러개의 트랜잭션이 동시에 실행중일때 서로의 연산에 끼어들수 없게 해야하는 것이다. 예를 들어 B의 계좌에 100만원을 넣고 있는 상태에 또 다른 누군가가 B의 계좌에 입금을 하는 작업을 할 수 없다는 것이다.

Durability : 지속성으로 트랜잭션 성공 후 데이터베이스에 반영한 결과는 손실되지 않게 유지해야 하는 것을 말한다.


격리수준

Isolation을 구현하는 개념으로 트랜잭션끼리 격리되어야 하는 정도를 나타낸다.

다음과같이 4단계로 나뉜다. 커밋은 트랜잭션이 성공적으로 완료된 상태를 의미한다.

  1. READ UNCOMMITTED: 다른 트랜잭션에서 커밋되지 않은 내용도 참조할 수 있다
  2. READ COMMITTED: 다른 트랜잭션에서 커밋된 내용만 참조할 수 있다.
  3. REPEATABLE READ: 트랜잭션에 진입하기 이전에 커밋된 내용만 참조할 수 있다.
  4. SERIALIZABLE: 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 한다.(성능 매우 떨어짐)

아래로 내려갈 수록 고립 정도가 높고 성능은 떨어진다.

mysql의 기본 격리수준은 REPEATABLE READ이다.




JOIN

여러 테이블을 하나의 테이블처럼 논리적으로 연결하여 사용하는 방법이다.

inner join은 두 테이블을 교집합으로 join하는 개념이며 outter join은 합집합으로 join하는 개념이다.


NoSQL

블로그의 개별 게시물에 따로 정리를 해두었다.

0개의 댓글