Database 정규화

Database 정규화

1. 데이터베이스 정규화의 목적

  • 삽입, 삭제, 갱신의 이상 현상을 방지한다.

    -> 이상 현상이란? 데이터의 삽입, 삭제, 갱신을 하면서 불필요한 정보가 삭제되거나 삽입되고 갱신시 일부만 변경되어 데이터의 일관성이 없어지는 현상이다.

    • 삽입 이상: 만약 위와 같은 테이블에 이름과 학번의 정보만 넣고 싶은 경우 주소, 전공, 담당 교수에 대한 정보까지 넣어야한다. Null이 들어가게 되도 불필요한 저장공간을 차지하게 된다.

    • 삭제 이상: 김공대 교수가 은퇴하여 김공대 교수만 삭제하고 싶어 김공대 교수를 담당 교수로 가지게 된 튜플을 삭제하게 되면 불필요한 다른 학생들의 정보까지 삭제된다.

    • 갱신 이상: 컴퓨터공학의 담당교수를 모두 김공대 교수로 바꾸고 싶지만 일괄적으로 갱신이 되지 않을 수 있다.

  • 데이터의 중복을 최소화 한다

  • 정보의 일관성을 보장한다.

2. 데이터 베이스 정규화

데이터베이스의 정규화에는 제1정규형~제5정규형까지 존재한다. 하지만 보통 제 3정규형까지 적용하여 데이터베이스를 설계한다.

  • 제 1정규형 : 도메인이 원자 값

제 1정규형에서 도메인이 원자값이라는 것은 한 도메인에 알맞은 값으로 하나 존재해야 한다는 것을 뜻한다. 위와 같은 테이블에서 과목이라는 테이블을 저장하기 위해 과목 1,과목2,과목 3과 같은 컬럼이 있는 것이나 과목 이라는 컬럼에 {수학,영어,국어}와 같이 한번에 여러 값들이 들어갈 수 없고 하나의 값이 들어간다.

-> 다음과 같이 과목이라는 컬럼에 수학,영어, 국어가 들어가게 되지만 이름,학번,학과, 학과장이 중복되게 된다.

  • 제 2 정규형 : 완전 함수종속(부분적 함수 종속 제거)

    제 1정규형을 만족하는 테이블이고 부분적 함수 종속성을 제거한다. 학번 -> 이름 으로 학생을 결정할 수 있고 학번 -> 학과, 학과장, 학번 -> 수강과목 으로 키 값으로 결정할 수 있는 부분적 요소들이 존재하면 이를 테이블로 나눈다.

​ 테이블에서 존재하는 키값으로는 하나의 유일한 튜플을 식별할 수 있어야하며 부분적인 키값으로 식별할 수 있는 요소가 있다면 이를 나누게 된다. 위 테이블은 학번에 의해 결정되는 이름, 학과, 과목에 대한 부분적인 요소들을 테이블로 나눈 결과이다.

  • 제 3정규형 : 이행적 함수 종속성 제거

    제 3정규형은 2정규형을 만족하고 이행적 함수 종속성을 제거한다 . 이행적 함수 종속성이란 A-> B 이면 B->C이게 된다는 조건을 없애는 것이다. 위의 테이블에서 학번을 알면 학과를 알 수 있고 학과를 알면 학과장을 알수 있으니 이행적 함수 종속성이 존재하게 된다. 이를 분리하여 아래와 같은 테이블 처럼 만든다.

  • 제 4정규형: 다치 종속성 제거
  • 제 5정규형: 조인 종속성 제거

3. 역정규화

데이터베이스의 정규화를 하게 되면 테이블이 나뉘는 경우가 많다. 이 경우 데이터의 조회는 조인을 통한 조회를 하게 되는데 방대한 양의 데이터를 조인하게 되면 시스템에 과부하가 걸릴 가능성이 높다.

이를 피하기 위해 나뉘어진 테이블을 다시 하나의 테이블로 합치는 과정이 필요하게 되는데 이를 역정규화라고 한다.

공유하기