db 기말

좋은 관계 데이터베이스 스키마를 설계하는 목적

  • 정보의 중복과 갱신 이상이 생기지 않도록

제2정규형부터 BCNF까지 적용된다

결정자

어떤 애트리뷰트의 값은 다른 애트리뷰트의 값을 고유하게 결정할 수 있다

결정자는 주어진 릴레이션에서 다른 애트리뷰트(또는 애트리뷰트들의 집합)를 고유하게 결정하는 하나 이상의 애트리뷰트를 의미한다

A → B

애트리뷰트 A가 애트리뷰트 B의 결정자이면 B가 A에 함수적으로 종속

제1정규형

릴레이션 R의 모든 애트리뷰트가 원자값만을 갖는다

변환하는 법

  • 반복 그룹 애트리뷰트에 나타나는 집합에 속한 각 값마다 하나의 투플로 표현
  • 모든 반복 그룹 애트리뷰트들을 분리해서 새로운 릴레이션에 넣음 원래 릴레이션의 기본 키를 새로운 릴레이션에 애트리뷰트로 추가함

제2 정규형

릴레이션 R이 제1정규형을 만족하면서, 어떤 후보 키에도 속하지 않는 모든 애트리뷰트들이 R의 기본 키에 완전하게 함수적으로 종속

  • 기본 키가 두 개 이상의 애트리뷰트로 구성되었을 경우에만 제1정규형이 제2정규형을 만족하는가를 고려할 필요가 있다

갱신 이상 생기는 이유

학생1 릴레이션에 이행적 종속성이 존재하기 때문

제3정규형

릴레이션 R이 제2정규형을 만족하면서, 키가 아닌 모든 애트리뷰트가 릴레이션 R의 기본 키에 이행적으로 종속하지 않는 것

BCNF

릴레이션 R이 제3정규형을 만족하고 모든 결정자가 후보키어야한다.

트랜잭션

트랜잭션은 네 가지 특성을 만족해야 한다

  • 원자성(Atomicity) - all or nothing
  • 일관성(Consistency)
  • 고립성(Isolation) - 다른 트랜잭션이 접근 x
  • 지속성(Durability) - 고장나도 손실 x

동시성 제어

동시성 제어가 없을 때 생기는 문제

  • 갱신 손실(lost update)
    • 수행 중인 트랜잭션이 갱신한 내용을 다른 트랜잭션이 덮어 씀으로써 갱신이 무효가 되는 것
  • 오손 데이터 읽기(dirty read)
    • 완료되지 않은 트랜잭션이 갱신한 데이터를 읽는 것
  • 반복할 수 없는 읽기(unrepeatable read)
    • 한 트랜잭션이 동일한 데이터를 두 번 읽을 때 서로 다른 값을 읽는 것

2단계 로킹(2-phase locking) 프로토콜

로크를 요청하는 것과 로크를 해제하는 것이 2단계로 이루어진다

  1. 로크 확장 단계가 지난 후에 로크 수축 단계에 들어간다
  2. 일단 로크를 한 개라도 해제하면 로크 수축 단계에 들어간다
  • 로크 확장 단계(1단계)

트랜잭션이 데이터 항목에 대하여 새로운 로크를 요청할 수 있지만 보유하고 있던 로크를 하나라도 해제할수없다

– 로크 수축 단계(2단계)

  • 보유하고 있던 로크를 해제할 수 있지만 새로운 로크를 요청할 수 없다
  • 로크 수축 단계에서는 로크를 조금씩 해제할 수도 있고, 트랜잭션이 완료 시점에 이르렀을 때 한꺼번에 모든 로크를 해제할 수도 있다. - 일반적으로 한꺼번에 해제하는 방식이 사용된다

데드록(deadlock)

두 개 이상의 트랜잭션들이 서로 상대방이 보유하고 있는 로크를 요청하면서 기다리고 있는 상태를 말한다.

로킹–팬텀문제

회복의 필요성

  • 어떤 트랜잭션 T를 수행하는 도중에 시스템이 다운되었을 때, T의 수행 효과가 디스크의 데이터베이스에 일부 반영되었을 수 있다
  • 트랜잭션 T가 완료된 직후에 시스템이 다운되면 T의 모든 갱신 효과가 주기억 장치로부터 디스크에 기록되지 않았을 수 있다
김땡땡's blog

김땡땡's blog

김땡땡