Normalization

정미·2022년 7월 21일
0

Computer Science

목록 보기
36/81

정의

관계형 데이터베이스 설계에서 중복을 최소화하기 위해 데이터를 구조화하는 프로세스

목적

  • 테이블 간 중복 데이터 허용하지 않음으로써 데이터 무결성 유지
  • 논리적 데이터 모델링 단계에서 데이터의 중복과 종속으로 인한 이상 현상을 방지
  • 크고 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나눔

이상 현상 Anomaly

불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용

종류

  1. 삽입 이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
  2. 갱신 이상: 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
  3. 삭제 이상: 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제

함수 종속 Functional Dependency (FD)

데이터베이스의 릴레이션 R에서 X와 Y를 R이 부분집합이라고 할 때, X의 값 각각에 대해 Y의 값이 오직 하나로 결정될 때 Y는 X에 종속된다.

  • 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정한다. (결정자의 역할)
    • 기본키나 후보키가 아니어도 다른 속성값을 유일하게 결정하는 속성은 종속 관계에서 결정자가 될 수 있다.
  • 함수 종속은 제2 정규형부터 BCNF까지 적용된다.
  • 정규화가 잘 된 테이블일수록 결정자 X는 PK로 한 개이고 종속자가 여러 개인 구조를 가진다.

1. 부분 함수 종속 Partial FD

  • 기본키가 복합키일 경우 기본키를 구성하는 속성 중 일부에게 종속된 경우
학생 번호(pk)강좌 이름(pk)학생 이름성적
1데이터베이스신예찬4.0
2데이터베이스조원상3.5
3운영체제신광일3.0
1운영체제신예찬4.5

{학생 번호} → 학생 이름

{학생 번호, 강좌 이름} → 성적

학생 이름은 {학생 번호, 강좌 이름}의 일부분인 {학생 번호}에 종속되어 있다.

⇒ 학생 이름은 {학생 번호, 강좌 이름}에 부분 함수 종속이다.

2. 완전 함수 종속 Full FD

  • 종속자가 기본키에만 종속되며 기본키가 여러 속성으로 구성되어 있을 경우
  • 릴레이션 R에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 일부분에는 종속되지 않음
학생 번호(pk)강좌 이름(pk)성적
1데이터베이스4.0
2데이터베이스3.5
3운영체제3.0
1운영체제4.5

{학생 번호, 강좌 이름} → 성적

3. 이행 함수 종속 Transitive FD

  • X, Y, Z라는 3개의 속성이 있을 때, X→Y→Z의 종속 관계가 있고 X →Z가 성립
  • X를 알면 Y를 알고 이를 통해 Z를 알 수 있는 경우

정규화 종류

정규형 Normal Form (NF)

  • 릴레이션이 정규화된 정도
  • 각 정규형마다 제약조건이 존재하고, 차수가 높아질수록 조건이 많아지고 엄격해진다.

제1 정규형 (1NF)

모든 속성은 반드시 하나의 원자값(atomic value)만 가져야 한다.

  • 제1 정규형을 만족해야 RDB의 릴레이션이 될 자격이 있다.
  • 정규화 전
    학생 번호(pk)강좌 이름(pk)학생 이름성적학부학부 전화번호
    1데이터베이스, 운영체제신예찬4.0, 4.5컴퓨터공학부123-4567
    2데이터베이스조원상3.5전자공학부098-7654
    3운영체제신광일3.0철학과567-1234
    4자료구조최상엽4.5컴퓨터공학부123-4567
  • 정규화 후
    학생 번호(pk)강좌 이름(pk)학생 이름성적학부학부 전화번호
    1데이터베이스신예찬4.0컴퓨터공학부123-4567
    2데이터베이스조원상3.5전자공학부098-7654
    3운영체제신광일3.0철학과567-1234
    1운영체제신예찬4.5컴퓨터공학부123-4567
    4자료구조최상엽4.5컴퓨터공학부123-4567
    • 제1 정규형을 만족하는 릴레이션
    • 이상 현상
      • 학생 이름이 {학생 번호, 강좌 이름}이 아닌 학생 번호에만 종속되는 부분 함수 종속이 발생한다.

제2 정규형 (2NF)

부분적 함수종속 제거, 모든 속성은 반드시 모든 기본키에 종속되어야 한다.

  • 정규화 전

    학생 번호(pk)강좌 이름(pk)학생 이름성적학부학부 전화번호
    1데이터베이스신예찬4.0컴퓨터공학부123-4567
    2데이터베이스조원상3.5전자공학부098-7654
    3운영체제신광일3.0철학과567-1234
    1운영체제신예찬4.5컴퓨터공학부123-4567
    4자료구조최상엽4.5컴퓨터공학부123-4567
  • 정규화 후

    학생 번호(pk)강좌 이름(pk)성적
    1데이터베이스4.0
    2데이터베이스3.5
    3운영체제3.0
    1운영체제4.5
    4자료구조4.5
    학생 번호(pk)학생 이름학부학부 전화번호
    1신예찬컴퓨터공학부123-4567
    2조원상전자공학부098-7654
    3신광일철학과567-1234
    4최상엽컴퓨터공학부123-4567
    • 제2 정규형을 만족하는 릴레이션
    • 이상 현상
      • 모든 속성이 기본키에 완전 함수 종속되도록 분해
      • 이행함수 종속이 발생한다.
        • 학생번호 → 학부 → 학부 전화번호
        • ex> 갱신 이상
          학생 번호(pk)학생 이름학부학부 전화번호
          1신예찬컴퓨터공학부123-4567
          2조원상전자공학부098-7654
          3신광일철학과567-1234
          4최상엽컴퓨터공학부124-5678

제3 정규형 (3NF)

이행적 함수종속 제거, 기본키가 아닌 모든 속성 간에는 서로 종속될 수 없다.

  • 정규화 전
    학생 번호(pk)학생 이름학부학부 전화번호
    1신예찬컴퓨터공학부123-4567
    2조원상전자공학부098-7654
    3신광일철학과567-1234
    4최상엽컴퓨터공학부123-4567
  • 정규화 후
    학생 번호(pk)학생 이름학부
    1신예찬컴퓨터공학부
    2조원상전자공학부
    3신광일철학과
    4최상엽컴퓨터공학부
    학부(pk)학부 전화번호
    컴퓨터공학부123-4567
    전자공학부098-7654
    철학과567-1234
    • 제3 정규형을 만족하는 릴레이션
    • 이상현상
      • 이행적 함수 종속 해결

Boyce-Codd Normal Form (BCNF)

기본키가 아닌 속성이 기본키의 속성을 결정지을 수 없다.

  • 한 릴레이션에 여러 개의 후보키가 존재하는 경우 제3 정규형까지 만족해도 이상 현상이 발생할 수 있다.
  • strong 3NF(강한 제3정규형), 제3정규형보다 더 엄격한 제약조건
  • BCNF에 속한 릴레이션은 제3 정규형에 속하지만, 제3 정규형에 속하는 모든 릴레이션이 BCNF에 속하는 것은 아니다.
  • 정규화 전
    • 후보키: {학생 번호, 강좌 이름}, {학생 번호, 교수}

    • 제3 정규형을 만족하지만 BCNF를 만족하지 않는 릴레이션

      학생 번호(pk)강좌 이름(pk)교수
      1데이터베이스이승협
      2데이터베이스이승협
      3운영체제유회승
      1운영체제유회승
      4자료구조김지호
    • 함수 종속 관계에서 모든 결정자가 후보키가 아니다.

      • {교수}가 후보키가 아니지만 강좌 이름 속성을 결정한다.
  • 정규화 후
    학생 번호(pk)강좌 이름(pk)
    1데이터베이스
    2데이터베이스
    3운영체제
    1운영체제
    4자료구조
    교수(pk)강좌 이름
    이승협데이터베이스
    유회승운영체제
    김지호자료구조
    • 후보키가 아닌 결정자를 제거/릴레이션 분해

제4 정규형, 제5 정규형

  • 제4 정규형: BCNF를 만족하면서 함수 종속이 아닌 다치 종속(Multi Valued Dependency)을 제거
  • 제5 정규형: 제4 정규형을 만족하면서 후보키를 통하지 않는 조인 종속(Join Dependency)을 제거

정리


출처

0개의 댓글