[DB] 정규화

개요 

 

잘못 설계된 데이터베이스는 삭제이상, 삽입이상, 수정이상 등의 문제를 일으킬 수 있다.

삭제이상: 튜플을 삭제했는데 유지되어야 하는 정보도 연쇄삭제되는 현상
삽입이상: NULL입력시 튜플 삽입이 거부되는 이상현상
수정이상: 튜플 수정시 데이터의 일부만 수정되어 데이터의 불일치현상이 나타나는 현상

 

- 삭제이상: 5번 튜플(안중근)의 정보 삭제시 AI융합학부의 정보가 같이 삭제된다.

- 삽입이상: 글로벌미디어 학과에 대한 정보를 삽입하고 싶지만 학생명, 학번이 NULL값이라 삽입되지 않는다.

- 수정이상: 소프트웨어학부의 과사무실 정보를 수정하기 위해 3번튜플의 과사무실 정보를 변경하면 3,4번튜플에 불일치가 발생한다.

 

이러한 이상현상은 테이블의 잘못된 설계로 인해 발생한다. 따라서 테이블의 구조를 수정하여 이상현상이 발생하지 않도록 분리할 수 있다.

 

 

정규화

 

 이상현상이 발생하지 않는 테이블을 설계하기 위해서는 릴레이션을 분해하여 속성 사이의 의존성을 제거하는 정규화 과정을 거쳐야 한다. 즉, 릴레이션 내에 존재하는 결정자는 반드시 키여야 한다. 다시 말해 기본키가 아니면서 결정자인 속성이 있을 때 이상현상이 발생한다. 정규화는 단계에 따라서 크게 제1정규형~BCNF정규형으로 분류할 수 있다.

 

- 제 1정규형

릴레이션 R의 모든 속성값이 원자성을 가지면 된다. (값을 하나씩만 가진다)

 

 

위 테이블에서 Cources 속성은 여러개의 속성값을 갖고 있으며, 이는 제 1정규형을 위반한다.

 

- 제 2정규형

제1정규형인 릴레이션 R이 기본키가 아닌 속성이 기본키에 완전 함수 종속이면 된다.

-> 완전 함수 종속이란, 기본키가 2개 이상의 속성으로 구성되었을 때 기본키 속성 전체에 종속하고 부분속성에는 종속하지 않는 것을 말한다. 다시 말하자면 기본키를 구성하는 개별 속성이 결정자가 되면 안되고, 결정자가 된다면 해당 속성을 분리하여 새로운 릴레이션을 생성한다.

(제 1정규형을 끝냈을 때, 기본키가 하나의 속성으로 이루어졌을 경우 제 2정규형을 진행할 필요가 없다)

 

부분 함수 종속

 

위 테이블에서, (학생번호, 강좌이름)이 기본키로 동작하고 있다. 그런데 이때 강의실은 강좌이름에 종속적임을 알 수 있으며, 이는 부분 함수 종족인 상태를 말한다.

 

완전 함수 종속되게 릴레이션 분해

모든 컬럼이 기본키에 종속되도록 테이블을 분리했다.

 

 

- 제 3정규형

제2정규형인 릴레이션 R이 비이행적 종속(직접 종속)이 이루어질 때 3정규형이라고 한다. 비이행적 종속이란, 기본키를 제외한 컬럼간에 종속성이 발생하는 것이다.

속성 사이에 이행적 종속이 일어나는 상태

 

pk가 학생 번호일 때, 일반 컬럼인 수강료는 일반 컬럼인 강좌이름에 종속적이다. 따라서 일반 컬럼간에 종속성이 있으므로 위 테이블은 제 3정규형을 위반하고 있다.

 

비이행적 종속 제거, 릴레이션 분리하여 비이행적 종속만 일어나도록 릴레이션 분리

 

- BCNF 정규형

강화된 제3정규형으로 이해하면 좋은데, 제3정규형에서 모든 결정자는 후보키여야 한다는 조건을 만족해야 한다.

 

 

위와 같은 테이블이 있다고 가정할 때, 교수 ID는 강의실을 결정하고, (교수ID, 과목) 또한 강의실을 결정한다. 즉, 결정자인 교수ID는 강의실을 결정하지만 후보키가 아니다 (중복이 존재한다). 따라서 위 테이블은 BCNF 정규형을 위반한다.

'[ CS기초 ] > 데이터베이스' 카테고리의 다른 글

[DB] Redis  (0) 2023.05.11
[DB] SQL문 문법 정리 - DDL  (0) 2023.02.20
[DB] 트랜잭션, 동시성 제어, 락  (0) 2023.02.08
[DB] SQL문 문법 정리 - DML  (0) 2022.10.12
[DB] 관계 데이터 모델 기초  (0) 2022.09.17