Post

DB 정규화와 정규화 단계

DB 정규화와 정규화 단계

📌 정규화란?

정규화(Normalization)데이터의 중복을 최소화하고 무결성을 지키기 위해 데이터를 구조화하는 방법이다.

장점

  • 중복 데이터가 줄어들기 때문에 저장공간이 줄어든다.
  • 데이터의 일관성을 유지할 수 있다.

단점

  • 여러 테이블에 데이터가 분산될 수 있다.
  • 데이터 조회 시 조인 연산이 필요할 수 있다.

📌 이상 현상

데이터의 중복 및 불일치로 발생하는 문제를 이상 현상(Anomaly) 라고 한다. 이상 현상의 종류는 삽입 이상, 삭제 이상, 갱신 이상이 존재한다.

idstudent_namelecture_idlecture_name
1James101math
2James103physics
3Chris102english

위와 같은 초기 테이블 STU_LEC이 있다고 가정하자.

삽입 이상

새로운 데이터를 삽입할 때 정보가 부족하여 삽입이 불가능한 상황을 말한다. 예를 들어 아무 과목도 수강하지 않는 학생이 있다고 가정하자. STU_LEC에 해당 학생의 정보를 삽입하기 위해서 lecture_id, lecture_name은 null이 되어야 한다.

삭제 이상

특정 데이터를 삭제할 때 의도치 않게 다른 데이터를 잃게 되는 상황을 말한다. 예를 들어 STU_LEC에서 student_name이 Chris인 행을 삭제하면 lecture_name이 english인 정보까지 같이 삭제가 된다.

갱신 이상

데이터를 수정할 때 동일한 데이터가 여러 곳에 존재하여 모든 데이터를 일관성있게 수정하지 못하는 상황을 말한다. 예를 들어 STU_LEC에서 id가 1인 행의 student_name을 Sarah라고 수정했다고 가정하자. 그러나 id가 1인 행과 2인 행은 같은 학생이므로, 정보의 불일치가 발생한다.

데이터베이스를 설계할 때, 항상 정규화를 적용하는 것은 적합하지 않다. 정규화가 답이 아니라는 것이다. 비즈니스 요구사항을 고려하여 비정규화 또한 고려해야 한다.

📌 정규화 단계

정규화 단계는 제1 정규화(1NF), 제2 정규화(2NF), 제3 정규화(3NF), Boyce-Codd Normal Form(BCNF), 제4 정규화(4NF), 제5 정규화(5NF)가 존재한다. 보통 정규화를 수행하는 경우 BCNF까지 진행하며, 그 이후로는 진행하지 않는다. 그 이유는 정규화의 단점이 부각될 수 있기 때문이다.

제1 정규형(1NF)

  • 모든 속성이 원자적이어야 한다.
학생ID학생이름수업
1홍길동수학, 영어
2김영희과학
3이철수수학, 음악

위 테이블의 수업 속성은 여러 값을 가지고 있다. 따라서 원자성을 만족하지 않는다.

학생ID학생이름수업
1홍길동수학
1홍길동영어
2김영희과학
3이철수수학
3이철수음악

제2 정규형(2NF)

  • 1NF를 만족해야 하며 부분 종속(partial dependency)가 없어야 한다.
  • 기본 키가 아닌 속성이 기본 키의 일부에 의존하는 경우를 부분 종속이라고 한다.
학생ID수업ID학생이름수업이름
1101홍길동수학
1102홍길동영어
2103김영희과학
3101이철수수학
3104이철수음악

위 테이블은 1NF를 만족하며, 기본 키는 (학생ID, 수업ID)이다. 그러나 학생이름 속성은 기본 키의 일부 속성은 학생ID에 종속적이다.

학생ID학생이름
1홍길동
2김영희
3이철수
학생ID수업ID수업이름
1101수학
1102영어
2103과학
3101수학
3104음악

제3 정규형(3NF)

  • 2NF를 만족해야 하며 이행 종속(transitive dependency)이 없어야 한다. 즉, 기본 키가 아닌 속성들끼리 종속되는 현상이 없어야 한다.
  • 속성 A가 속성 B에 종속되고, 속성 B가 속성 C에 종속된다고 할 때, 속성 C는 속성 A에 이행적으로 종속된다. 즉, A→B이고 B→C일 때, A→C를 만족하게 된다.
학생ID수업ID수업이름
1101수학
2102영어
3103과학
1101수학
4104음악

위 테이블의 기본 키는 학생ID이다. 성립하는 함수적 종속성은 학생ID→수업ID, 수업ID→수업이름이다. 수업ID와 수업이름은 기본 키가 아니므로, 이행 종속을 만족하고 있다. 제3 정규화를 수행한 결과는 다음과 같다.

학생ID수업ID
1101
2102
3103
4104
수업ID수업이름
101수학
102영어
103과학
104음악

Boyce-Codd Normal Form(BCNF)

  • 3NF를 만족해야 하며 모든 결정자(Determinant)가 후보 키 집합에 속해야 한다.
  • FD A→B에서 A를 결정자라고 한다.
학생번호강의이름교수이름
1데이터베이스김교수
2알고리즘이교수
3운영체제박교수
1알고리즘이교수

위 테이블의 기본 키는 (학생번호, 강의이름)이며, 교수이름→강의이름 함수적 종속성이 추가적으로 성립한다. 여기서 결정자는 교수이름이며, 교수이름은 후보 키 집합에 속하지 않는다.

교수이름강의이름
김교수데이터베이스
이교수알고리즘
박교수운영체제
학생번호교수이름
1김교수
2이교수
3박교수
1이교수

제4 정규형(4NF)

  • BCNF를 만족해야 하며 다치 종속을 제거해야 한다.
  • 다치 종속은 A→B에서 A가 단일 값, B가 다중 값인 경우를 말하며, 이를 A↠B라고 표기한다.
학생ID강의이름주소
1데이터베이스서울시 강남구
1알고리즘서울시 강남구
1운영체제서울시 강남구
2데이터베이스부산시 해운대구
2알고리즘부산시 해운대구
3운영체제대구시 중구

위 테이블에서 기본 키는 학생ID이며, 학생ID→강의이름, 학생ID→주소 함수적 종속성을 만족한다. 다치 종속성을 만족하므로 제 4정규화를 통해 테이블을 분해한다.

학생ID주소
1서울시 강남구
2부산시 해운대구
3대구시 중구
학생ID강의이름
1데이터베이스
1알고리즘
1운영체제
2데이터베이스
2알고리즘
3운영체제

제5 정규형(5NF)

  • Project Join Normal Form(PJNF)이라고도 부른다.
  • 4NF를 만족해야 하며 조인 종속을 제거해야 한다.
  • 조인 종속은 하나의 관계를 분해하고, 다시 조인했을 때 데이터 손실이 발생하거나, 필요없는 데이터가 생기는 것이다.
  • 제5 정규형을 만족하기 위해서 테이블은 사실상 2개의 속성만 사용해야 한다.
This post is licensed under CC BY 4.0 by the author.