데이터베이스 정규화

Database Normalization

1. 이상(Anomaly) 현상[편집]

  • 정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상
  • 데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생
  • 애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생

1.1. 이상 종류[편집]

삽입할때 잘못 삽입됨, 갱신할때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고
  • 삽입 이상(Insertion Anomaly)
    • 데이터 삽입 시 의도와 다른 값들도 삽입됨
  • 삭제 이상(Delete Anomaly)
    • 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨
  • 갱신 이상(Update Anomaly)
    • 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생

2. 정규화 목적[편집]

  • 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지
  • 각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할
  • 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함
  • 데이터 삽입 시 릴레이션을 재구성할 필요성 감소
  • 효과적인 검색 알고리즘을 생성 가능


3. 정규화 과정[편집]

3.1. 1NF[편집]

First Normal Form

1NF를 만족하려면 도메인이 원자값이어야 한다.

  • 1NF를 만족하지 않는 릴레이션
수강과목 수강자
수학 홍길동
과학 임꺽정, 신사임당
사회 홍길동, 임꺽정
  • 수강자 속성이 원자값이 아니다.
  • 발생할 수 있는 이상(Anomaly)의 예
    • 갱신이상: 홍길동이 사회과목을 '역사'로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.
      • UPDATE 과목 SET 수강과목 = '역사' WHERE 수강과목 = '사회' AND 수강자 = '홍길동'
    • 삭제 이상: 임꺽정이 '과학' 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.
      • DELETE FROM 과목 WHERE 수강과목 = '과학' AND 수강자 = '임꺽정'
  • 1NF를 만족시키는 릴레이션
수강과목 수강자 일련번호
수학 홍길동 1
과학 임꺽정 2
과학 신사임당 3
사회 홍길동 4
사회 임꺽정 5
  • 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.
  • 실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다.

3.2. 2NF[편집]

Second Normal Form
2NF를 만족하려면 부분적 함수 종속을 제거해야 한다.
  • 즉 완전 함수 종속이 되도록 해야 한다.
  • 2NF를 만족하지 않는 릴레이션
학번 이름 소속학과 학과장
1901 홍길동 컴퓨터과 김교수
1845 임꺽정 전자과 박교수
1706 신사임당 기계과 천교수
1925 장영실 컴퓨터과 김교수
  • 학번 <-> 이름+소속+학과장은 종속 관계가 있다.(한 학과내의 이름은 중복되지 않는다고 가정)
  • 하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 <-> 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.
  • 즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 '김교수'와 같이 계속 중복적재 될것이다.
  • 지도교수 사무실도 학번에
  • 발생할 수 있는 이상(Anomaly)의 예
    • 삽입이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 학과장 정보가 삽입되야 한다.
    • 갱신이상: 컴퓨터과의 학과장이 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.
    • 삭제이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져버린다.
  • 2NF를 만족시키는 릴레이션
학번 이름 소속학과
1901 홍길동 컴퓨터과
1845 임꺽정 전자과
1706 신사임당 기계과
1925 장영실 컴퓨터과
학과 학과장
컴퓨터과 김교수
전자과 박교수
기계과 천교수
  • 이와 같이 릴레이션을 구분하는 것이 바람직하다.

3.3. 3NF[편집]

Third Normal Form
3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.
  • 이행적 함수 종속: A→B 이고 B→C 일 때 A→C 인 관계
  • 3NF를 만족하지 않는 릴레이션
  • 발생할 수 있는 이상(Anomaly)의 예
  • 3NF를 만족시키는 릴레이션

3.4. BCNF[편집]

Boyce and Codd Normal Form
BCNF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다.
  • BCNF를 만족하지 않는 릴레이션
  • 발생할 수 있는 이상(Anomaly)의 예
  • BCNF를 만족시키는 릴레이션

3.5. 4NF[편집]

Fourth Normal Form
4NF를 만족하려면 다치 종속성을 제거해야 한다.
  • 4NF를 만족하지 않는 릴레이션
  • 발생할 수 있는 이상(Anomaly)의 예
  • 4NF를 만족시키는 릴레이션

3.6. 5NF[편집]

Fifth Normal Form
5NF를 만족하려면 결정자이면서 후보키가 아닌 것을 제거해야 한다.
  • 5NF를 만족하지 않는 릴레이션
  • 발생할 수 있는 이상(Anomaly)의 예
  • 5NF를 만족시키는 릴레이션