[Database] 정규화

YoungHyo Choi·2021년 8월 31일
0

Database

목록 보기
1/2

잘못된 DB 설계로 인한 갱신 이상

nameidaddressphonedepartment_iddepartment_name
김철수2100석촌동123-12341개발
김철수2100석촌동123-12342기획
박수영4311삼전동341-10023영업
정유나3012가락동859-40992기획
정유나3012가락동859-40993영업
  • 정보의 중복
    • 어떤 정보가 반복적으로 저장되어 저장 공간이 낭비된다
    • 속한 부서(department_id)만큼 사원 정보가 낭비됨
  • 수정 이상(modification anomaly)
    • 반복된 데이터 중에 일부만 수정하면 데이터의 불일치가 발생한다. (모든 데이터를 수정해야 이용 가능)
    • 부서 이름이 바뀔 때, 부서 id에 해당하는 모든 부서명을 바꿔줘야 한다. (바꾸지 않을 경우 오류가 생긴다.)
  • 삽입 이상(insertion anomaly)
    • 불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능하다.
    • 새로운 부서가 생겼는데 해당 부서에 사원이 한명도 없을 경우, 입력이 불가능하다. (Primary Key가 (name, id)이기 때문)
  • 삭제 이상(deletion anomaly)
    • 유용한 정보를 함꼐 삭제하지 않고는 어떤 정보를 삭제하는 것이 불가능하다. (원하는 정보 외에 다른 정보도 삭제)
    • 어떤 부서에 사원이 한명 있을 때, 해당 사원 정보를 삭제할 경우, 부서 정보도 삭제된다.

함수적 종속성

  • determinant(결정자)
    • 주어진 테이블에서 다른 필드를 고유하게 결정하는 하나 이상의 필드
    • ABA \rightarrow B "A가 B의 determinant이다."
  • A 속성(attribute)이 B 속성의 결정자(determinant)이면 B가 A에 함수적으로 종속한다.
    (어떤 테이블 R에서 B 속성이 A 속성에 함수적으로 종속한다.
    \Leftrightarrow 각 A 값에 대해 반드시 한 개의 B 값이 대응된다.)
  • 제2정규형 부터 BCNF까지 적용

완전 함수적 종속성(FFD: Full Functional Dependency)

  • Def) 테이블 R에서 ABA \rightarrow B 이면서 A의 어떠한 진부분 집합에도 함수적으로 종속하지 않으면 B는 A에 완전하게 함수적으로 종속한다고 한다.

이미지 참조) http://contents2.kocw.or.kr/KOCW/document/2016/shinhan/leeukhyun/11.pdf

  • 완전 함수적 종속성 \Rightarrow 키의 최소성 / 키를 구성하는 모든 필드가 있어야 설명이 가능하다.
  • 부분 함수적 종속성 \Rightarrow (복합)키의 일부분으로도 설명할 수 있는 필드가 존재한다.

이행적 함수적 종속성(transitive FD)

  • 테이블 R에서 필드 A, B, C가 있을 때, C가 A에 이행적으로 종속한다. (ACA \rightarrow C)
    \Leftrightarrow ABBCA\rightarrow B \land B\rightarrow C

이미지 참조) http://contents2.kocw.or.kr/KOCW/document/2016/shinhan/leeukhyun/11.pdf

  • 학번을 알면 학과이름과 학과전화번호를 알 수 있고, 학과이름을 알면 학과전화번호를 알 수 있기 때문에 학과전화번호는 학번에 이행적으로 종속한다.

제1정규형, 제2정규형, 제3정규형, BCNF

제1정규형

  • Def) 테이블 R이 제1정규형을 만족한다 \Leftrightarrow 테이블 R의 모든 속성이 원자값만을 갖는다.

  • 모든 속성에 반복 그룹(repeating group)이 나타나지 않으면 제1정규형을 만족한다.

    • repeating group : 한 개의 기본 키값에 대해 두 개 이상의 값을 가질 수 있는 애트리뷰트 (아래 테이블에서 과목번호는 반복 그룹이므로 제1정규형을 만족하지 못한다.)
  • 객체 지향 데이터베이스에서는 제1정규형을 완화해 필드 값으로 집합, 리스트, 배열 등을 가질 수 있다.

    학번이름과목번호
    11302김창선{CS302, CS203}
    20511박준서{CS312, CS203}
  • 해결 방법

    1. 반복 그룹 필드를 분리해서 새로 저장
      학번이름과목번호
      11302김창선CS302
      11302김창선CS203
      20511박준서CS312
      20511박준서CS203
    2. 반복 그룹 필드를 분리해서 새로운 테이블에 저장
      학번이름
      11302김창선
      20511박준서

      학번과목번호
      11302CS302
      11302CS203
      20511CS312
      20511CS203

제2정규형

  • Def) 테이블 R이 제2정규형을 만족한다 \Leftrightarrow 테이블 R이 제1정규형을 만족하면서, 어떤 후보 키에도 속하지 않는 모든 속성들이 R의 기본 키에 완전하게 함수적으로 종속하는 것
  • 기본 키가 두 개 이상의 필드로 구성되었을 경우에만 제1정규형이 제2정규형을 만족하는지 고려할 필요가 있음

제3정규형

  • Def) 테이블 R이 제3정규형을 만족한다. \Leftrightarrow 테이블 R이 제2정규형을 만족하면서, 키가 아닌 모든 필드가 테이블 R의 기본 키에 이행적으로 종속하지 않는 것

BCNF (Boyce-Codd normal form)

  • Def) 테이블 R이 BCNF를 만족한다. \Leftrightarrow 테이블 R이 제3정규형을 만족하고, 모든 결정자가 후보 키이어야 한다.
profile
golang과 elasticsearch를 좋아하는 3년차 백엔드 엔지니어입니다.

0개의 댓글