데이터베이스 정규화

|

SQL 첫걸음 8장 데이터베이스 설계 부분을 읽고 정리한 내용입니다.

34장 데이터베이스 설계

  1. 데이터베이스 설계 : 데이터베이스의 스키마 내에서 테이블, 인덱스, 뷰 등의 객체를 정의하는 것
    • 논리명과 물리명
    • 자료형

35장 데이터베이스 정규화

  • 데이터베이스 정규화 (database normalization)
    • 테이블을 올바른 형태로 변경하고 분할하는 것
    • 데이터베이스의 설계 단계에서 수행, 기존 시스템을 재검토할 때 수행
  • 정규화의 목적
    • 하나의 데이터는 한 곳에 있어야 한다.
    • 하나의 데이터가 한 곳에만 저장되어 있다면 데이터를 변경 하더라도 한 곳만 변경하는 것으로 끝낼 수 있다. (상품코드 0001의 상품명이 변경 되었을때는?)
    • 반면 정규화되지 않은 데이터베이스는 여기저기 중복해서 저장된 데이터를 검색하고 일일이 변경해야 한다. 또한 인덱스가 지정된 열의 데이터가 변경되는 경우에는 인덱스도 재구축 해야 한다.
    • 하지만 기본키는 분할된 테이블끼리 연계하기 위해 작성한, 이른바 내부적인 데이터임으로 변경될 일은 거의 없다. 따라서 정규화를 통해 테이블에 대한 인덱스의 재구축을 억제할 수 있다.
  • 정규화
  • 제1정규형
    • 관계형 데이터베이스 테이블에는 하나의 셀에 하나의 값만 저장할 수 있다는 제약이 있음
    • 반복되는 데이터를 가로 (열 방향)이 아닌 세로 (행 방향)로 늘리는 것이 제1 정규화의 1단계이다
    • 제1정규화에서는 테이블 분할과 기본키 지정이 이루어진다.
      • 주문 - 주문번호를 기본키로 갖는다
      • 주문상품 - 주문번호 + 상품코드를 묶어서 기본키로 갖는다
  • 제2정규형
    • 기본키에 중복이 없는지 조사하여 테이블을 분할한다.
    • 이때 기본키에 의해 특정되는 열과 그렇지 않은 열로 나누는 것으로 정규화가 이루어 진다.
    • 부분 함수 종속성을 찾아내서 테이블을 분할하는 것이 제2정규화이다
      • 여기서 함수 종속성이란 키 값을 이용해 데이터를 특정지을수 있는 것을 가리킨다.
  • 제3정규형
    • 기본키 이외의 부분에서 중복이 없는지를 조사하여 테이블을 분할한다.
    • 고객 테이블을 분리하고 고객번호라는 기본키를 지정한다.
  • 제5정규형 까지 있지만 대부분 제3정규형까지의 정규화를 채택한다.