Skip to content

Latest commit

 

History

History
182 lines (114 loc) · 7.35 KB

normalization.md

File metadata and controls

182 lines (114 loc) · 7.35 KB

데이터베이스 정규화 (Normalization)

주요키워드 : redundancy, anomalies, 1NF, 2NF, 3NF, BCNF

정규화 (Normalization)

관계형 데이터베이스 설계에서 불필요한 데이터 중복(redundancy)을 최소화하기 위해 데이터를 구조화하는 프로세스를 의미한다. 정규화를 통해 삽입/갱신/삭제로 인해 발생할 수 있는 이상현상(anomalies)들을 방지할 수 있다.

이상현상 (Anomalies)

  • 삽입 이상 : 데이터를 입력할 때 원하지 않는 정보도 함께 삽입되는 경우
    • e.g.) 신입생이거나 아직 과목을 수강하지 않는 학생의 튜플을 입력할 때 과목명, 성적이 없어도 불필요하게 입력해야 함
  • 삭제 이상 : 튜플을 삭제할 때 유지되어야할 정보까지도 연쇄적으로 삭제되는 경우
    • e.g.) 123번 학생의 성적을 삭제할 경우, 학생의 학년 정보나 학번 등 유지해야할 정보까지 모두 삭제됨
  • 갱신 이상 : 중복된 튜플 중 일부의 속성만 갱신시킴으로써 정보의 모순이 발생하는 경우
    • e.g.) 456번 학생이 3학년이 될 경우, 3개 튜플 모두에 대해서 학년을 변경해야 되며 그러지 않을 경우 모순이 발생함
학번 과목명 성적 학년
123 수학 A 3
123 영어 B 3
456 수학 A 2
456 영어 A 2
456 지구과학 B 2

함수적 종속

어떤 릴레이션에서 애트리뷰트들의 부분집합을 X, Y라 할 때, 특정 튜플에서 X의 값이 Y의 값을 함수적으로 결정한다면 Y가 X에 함수적으로 종속되었다고 표현한다.

제 1 정규형 (1NF; First Normal Form)

릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있으면 제 1정규형에 속한다. 정규형들 중에서 제 1 정규형만 만족하는 릴레이션은 삽입이상/갱신이상/삭제이상 세가지 이상현상이 모두 나타난다.

STUDENT_ID COURSE_ID GRADE STUDENT_NM
20800399 CSE011101, CSE022202, CSE033303 A+, A, B+ 야붕

위 릴레이션에서 COURSE_ID의 값들을 원자값들로 분리하면 아래와 같은 제 1 정규형 릴레이션을 얻을 수 있다.

STUDENT_ID COURSE_ID GRADE STUDENT_NM
20800399 CSE011101 A+ 야붕
20800399 CSE022202 A 야붕
20800399 CSE033303 B+ 야붕

제 2 정규형 (2NF; Second Normal Form)

제 1 정규형에 속하면서, 기본키가 아닌 모든 애트리뷰트가 기본키에 완전 함수 종속이면 제 2 정규형이다. 즉 부분 함수 종속을 제거한다.

학번 과목코드 성적 학부 등록금
20800399 CSE011101 A+ 컴퓨터공학부 350
20800399 CSE022202 A 컴퓨터공학부 350
20800399 CSE033303 B+ 컴퓨터공학부 350
21300758 MEC011101 F 경영학부 300
21400001 POD032939 C+ 기계공학부 400
21500399 CSE011101 D 컴퓨터공학부 350

위 릴레이션에서 각 튜플을 구분짓는 기본키는 {학번, 과목코드}이다. 이 때, 나머지 애트리뷰트들의 함수적 종속성은 아래와 같다.

1. {학번, 과목코드} -> 성적
2. {학번, 과목코드} -> 학부
3. {학번, 과목코드} -> 등록금
4. 학번 -> 학부
5. 학번 -> 등록금
6. 학부 -> 등록금

여기서 4, 5번은 기본키 중 '학번'에 대한 부분 함수 종속에 해당한다. 따라서 아래와 같이 두 릴레이션으로 분해한다.

  • 학생 릴레이션
학번 학부 등록금
20800399 컴퓨터공학부 350
21300758 경영학부 300
21400001 기계공학부 400
21500399 컴퓨터공학부 350
  • 성적 릴레이션
학번 과목코드 성적
20800399 CSE011101 A+
20800399 CSE022202 A
20800399 CSE033303 B+
21300758 MEC011101 F
21400001 POD032939 C+
21500399 CSE011101 D

제 3 정규형 (3NF; Third Normal Form)

제 2 정규형에 속하면서, 기본키가 아닌 모든 애트리뷰트들에 대해 이행적(연쇄적) 함수 종속을 제거하면 제 3 정규형이다.

애트리뷰트 X, Y, Z에 대해 X->Y 이고 Y->Z이면 X->Z가 된다. 즉 Z가 X에 이행적으로 삼단논법처럼 종속되는 것을 이행적 함수 종속이라 한다.

  • 학생 릴레이션
학번 학부 등록금
20800399 컴퓨터공학부 350
21300758 경영학부 300
21400001 기계공학부 400
21500399 컴퓨터공학부 350

위 학생 릴레이션에서 함수적 종속성은 다음과 같다.

1. 학번 -> 학부
2. 학부 -> 등록금
3. 학번 -> 등록금

여기서 3번은 "등록금"이 "학번"에 이행적으로 종속된다. 따라서 X->Y->Z를 X->Y, Y->Z가 되도록 두 릴레이션으로 분리한다.

  • 소속 릴레이션
학번 학부
20800399 컴퓨터공학부
21300758 경영학부
21400001 기계공학부
21500399 컴퓨터공학부
  • 등록금 릴레이션
학부 등록금
컴퓨터공학부 350
경영학부 300
기계공학부 400

정규화의 장점과 단점

장점

  • 데이터의 삽입/삭제/변경 시 발생하는 각종 이상현상(Anomalies)들을 해결할 수 있다.
  • 불필요한 데이터 중복(redundancy)이 제거된다.
  • 데이터베이스 구조가 확장되거나 새로운 데이터형이 추가될 때 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.

단점

  • 릴레이션의 분해로 인해 릴레이션 간의 연산(JOIN 연산)이 많아진다.
  • JOIN 연산이 늘어나므로 질의에 대한 응답 시간이 느려질 수 있다.

비정규화 (De-normalization)

과다한 JOIN 연산으로 인해 쿼리 성능 저하가 발생한다면 비정규화(반정규화)를 적용할 수 있다.

반정규화는 정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 데이터 모델링 기법 중 하나이다. 디스크 I/O 량이 많아서 조회 시 성능이 저하되거나, 테이블끼리의 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되거나, 칼럼을 계산하여 조회할 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다. 일반적으로 조회에 대한 처리 성능이 중요하다고 판단될 때 부분적으로 반정규화를 고려하게 된다.

Reference