본문 바로가기

Web Sever 개발과 CS 기초/DB 지식

정규화(1,2,3,BNCF) 쉽게 이해하기

개요 목적

이번 시간에는 데이터 베이스 정규화에 대해서 알아본다.

데이터 베이스 정규화란, 잘못된 데이터 베이스 설계에서 발생하는 이상현상을 해결하고, 저장 공간을 효율성을 증가하기 위해, 테이블을 여러개로 분리하는 과정이다. 

정규화 방법에는 1차, 2차, 3차, BCNF, 4차, 5차 정규화가 있다. 실무에서 주로 쓰이는 1, 2, 3, BNCF 정규화 방법과 예시를 통해 어떻게 데이터를 깔끔하고, 이상 현상을 방지하는 지 알아보자.

이상현상이란, 데이터베이스의 설계를 잘못하게 되었을 때 데이터 삽입, 갱신, 삭제 연산을 수행할 대 부작용이 발생하는 것을 의미한다.

ex) 삽입 이상 - 불필요한 데이터도 같이 삽입해야 하는 문제

윤성빈은 이벤트에 참여하지 않았는데, 관련 컬럼이 있어서, null이라는 값을 입력해줘야 하는 문제가 발생한다.

1차 정규화

1차 정규화의 규칙은 각 로우(행)마다 컬럼(속성)의 값이 반드시 1개만 존재해야 하는 것이다. 다른 말로 컬럼이 원자값을 갖는다고 표현한다.

 

<1차 정규화 위배 테이블>

<1차 정규화 진행>

2차 정규화

제 1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분리하는 것이다.

완전 함수 종속이란 기본키의 부분집합(여러 기본키 중 하나가)이 결정권자가 되어선 안 되는 것이다.

  • 기본키란, 로우를 구분해주는 컬럼으로 한개일 수도 있고 여러 개(복합키)일 수도 있다.

다른 말로는, 특정 기본키에만 종속된 컬럼이 없어야 한다.

예시를 통해, 부분 종속성을 가진 테이블의 2차 정규화의 필요성과 방법을 알아보자.

 

<2차 정규화 위배 테이블>

위 테이블의 기본키는 (주문 번호, 음료코드, 주문자) 으로 복합키이다. 이 세개가 합쳐져야 한 로우를 확실하게 구분할 수 있다. 

그런데, '음료명'은, 기본키 중에 '음료코드' 키에만 종속되어 있다.(부분 함수 종속)

그렇게 되면, '음료명' 컬럼은 '음료코드'에만 영향을 받는다. 이럴 때 발생되는 이상 현상(어노말리)을 알아보자.

  • 입력 이상: 주문이 발생하지 않으면, 음료명 입력이 불가능 하다.
  • 수정 이상: 음료 코드 1001이 아메리카노가 아닌 다른 음료로 변경 되었을 때, 모든 1001 음료명을 변경해주어야 한다.
  • 삭제 이상: 음료 삭제시 주문까지 삭제되는 문제가 발생한다.

<2차 정규화 진행>

3차 정규화

3차 정규화는 기본키 이외의 다른 컬럼이 다른 컬럼을 결정할 수 없는 것을 의미한다.(이행적 함수 종속이 없는 것)

예시를 3차 정규화의 필요성, 방법을 알아보자.

 

<3차 정규화 위배 테이블>

위 테이블은 학생_id가 유일한 기본키이다. 모든 속성이 기본키에 종속되어 있다. 하지만, 반을 알면, 반키워드와 담임선생님이 알 수 있다. 

반, 반키워드, 담임선생님을 하나의 테이블로 작성해서 분리하면, 반복되는 행복, 홍성욱이라는 중복된 데이터 낭비를 막을 수 있다.

<3차 정규화 진행>

이렇게 테이블을 분리하면 한번의 반키워드, 담임선생님 작성으로 정보를 담을 수 있다.

BNCF 정규화

BNCF 정규화는 3차 정규형을 만족하면서, 모든 결정자가 후보키 집합에 속한 정규형이다.

후보키란 슈퍼키 중에서 최소성을 만족하는 키이다. 슈퍼키란 튜플(로우)을 유일하게 만들어주는 속성의 집합이다. 사람을 구별한다고 할 때 주민번호, 지문, 홍채 속성이 슈퍼키가 될 수 있다.

최소성이란 튜플을 구분하는데 꼭 필요한 속성만 존재하는 것을 의미한다. 사람을 구별하는데 주민번호, 지문, 홍채 속성 중 하나만 있어도 충분하다 그래서 슈퍼키는 최소성에 위배된다. 그래서 슈퍼키 중에서 최소성을 만족하는 주민번호가 후보키가 될 수 있다.

후보키가 아닌 속성이 결정자 역할을 하는 예시를 통해서 BNCF 정규화 방식을 알아보자.

 

<예시 BNCF 정규화 위배 테이블>

이 테이블의 경우, 학생과 과목 코드만으로 튜플(로우)을 구분할 수 있다. 그래서 학생과 과목코드가 후보키가 된다. 후보키가 아닌 교수 속성이 결정자 역할을 하고 있기 때문에 BNCF정규화에 위배된다. 105, jenny라는 수업이 추가되었는데, 수강생이 아무도 없다면, 후보키 학생을 입력하지 못해서, 삽입할 수 없는 문제가 발생한다. 

<BNCF 정규화 진행>


reference

https://3months.tistory.com/193

https://www.youtube.com/watch?v=pMcv0Zhh3J0

https://www.youtube.com/watch?v=gQK8eCGpUGE

https://kosaf04pyh.tistory.com/201