2022. 10. 20. 00:32ㆍIntelligence Technology
정규화란?
정규화는 종속성이 포함되어 잘못 설계된 관계형 스키마를 더 작은 속성들로 분리하여 수정해 나가는 작업입니다. 즉, 종속성을 피하기 위해 정규화를 진행합니다. 총 6종류의 정규화 과정이 있으며 종류로는 제1 정규형, 제2 정규형, 제3 정규형, BCNF형, 제4 정규형, 제5 정규형이 있습니다. 각 단계별로 전 단계를 만족해야 다음 정규형으로 넘어갈 수 있어 차수가 높아질수록 제약조건들이 늘어납니다.
정규화는 그럼 왜 필요할까요?
정규화를 하는 이유는 속성 간의 종속을 피하기 위해 사용한다고 앞에 말씀드렸는데 바로 데이터 구조의 안정성을 최대화하기 위해 진행합니다. 종속을 피하니 중복되는 값도 줄어들게 되며 릴레이션에서 검색 효율도 올라가게 됩니다. 또한 중복된 속성들을 줄여나가기에 삽입, 삭제, 갱신 등의 명령어를 수행 후에도 값의 유효성이 증가하며 데이터를 새로 삽입하더라도 새로운 릴레이션을 재구성할 필요성이 줄어들게 됩니다.
그럼 각각의 정규화 특징과 순서를 알아보도록 하겠습니다.
제1 정규형(1NF)
제1 정규형은 릴레이션에 속한 모든 도메인(속성이 가질 수 있는 값)이 원자 값(더 이상 나눌 수 없는 값)만으로 되어 있는 릴레이션입니다.
학번 | 이름 | 전공 |
950427 | 똑구 | 컴퓨터공학부, 경영학부 |
960521 | 떡구 | 기계공학부 |
930204 | 덕구 | 경영학부 |
980708 | 독구 | 인공지능학부, 경영학부 |
위 릴레이션은 전공이라는 속성에 2개의 원자 값을 가지고 있는 경우도 있습니다. 제1 정규화를 거치게 되면
학번 | 이름 | 전공 |
950427 | 똑구 | 컴퓨터공학부 |
950427 | 똑구 | 경영학부 |
960521 | 떡구 | 기계공학부 |
930204 | 덕구 | 경영학부 |
980708 | 독구 | 인공지능학부 |
980708 | 독구 | 경영학부 |
위와 같이 작성이 됩니다.
제2 정규형(2NF)
제2 정규형은 제1 정규형을 만족하는 릴레이션의 키가 아닌 모든 속성이 *완전 함수적 종속관계를 이루는 상태를 말합니다.
*완전 함수적 종속 관계란?
->기본키에만 종속이 되는 경우나 기본키가 다른 여러 속성들과 부분 집합을 형성하고 있는 경우 기본키에 종속이 된 경우로 봄
예시) 릴레이션 <거주지>는 주민등록번호, 이름, 주소 속성으로 구성
주민등록번호 | 이름 | 주소 |
950427-1****** | 똑구 | 강남 |
960521-2****** | 똑구 | 송파 |
930204-2****** | 독구 | 용산 |
980708-1******* | 덕구 | 강남 |
- 주민등록번호를 알면 이름과 주소를 모두 식별 가능
- 이름을 알면 중복 값이 있어 주민등록번호와 주소를 모두 알 수 없음
- 주소을 알면 중복 값이 있어 주민등록번호와 이름을 모두 알 수 없음
- 주민등록번호만이 다른 속성들도 결정을 할 수 있음
- 이런 경우 주민등록번호를 제외한 이름과 주소 속성은 다른 속성에 종속되지 않는 완전 함수 종속 상태의 릴레이션
제3 정규형(3NF)
제2 정규형을 만족하며 키가 아닌 모든 속성이 기본키에 대해 *이행적 종속 관계를 이루지 않는 상태를 말합니다.
*이행적 종속 상태란?
A -> B이고 B -> C일 때 A -> C를 만족하는 상태
학번 | 학부 | 학과 연락처 |
950427 | 컴퓨터공학부 | 598 |
960521 | 기계공학부 | 987 |
930204 | 경영학부 | 035 |
980708 | 인공지능학부 | 267 |
학번 속성 밑에 밑줄은 기본키라는 의미입니다. 학번을 알면 학부도 알 수 있고 학부를 알면 학과 연락처 또한 알수 있습니다. 이런 구조의 릴레이션을 이행적 종속 관계를 가진다고 말합니다.
BCNF(Boyce-Codd 정규형)
릴레이션에서 *결정자(학번에 따라 이름이 결정될 때 학번을 결정자라고 하고 이름을 종속 자라고 합니다. )가 모두 후보 키인 경우를 얘기합니다. 제3 정규형에서 후보 키가 많고 서로 중첩이 되는 경우에 적용하며 강한 제3 정규형이라고도 부르며 아래의 제약사항을 가집니다.
제약 사항
1. 키가 아닌 모든 속성은 각 키에 대해 완전 종속 상태여야 함
2. 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가 있지 않은 모든 키에 대해 완전 종속 상태여야 함
3. 어떤 속성도 키가 아닌 속성에 대해 완전 종속할 수 없음
제4 정규형(4NF)
릴레이션에서 A ↠ B(다치 종속관계)가 성립할 때 릴레이션의 모든 속성이 A속성에 종속 상태이면 이 릴레이션은 제4 정규형에 속합니다. 이런 관계를 다치 종속 상태라고 얘기합니다.
즉, 다치 종속은 A, B, C 3개의 속성을 가지는 릴레이션에서 두 개의 독립된 속성이 1:N의 관계를 보일 때 사용하는 용어입니다.
릴레이션 <학적>
학번 | 이름 | 전공 |
950427 | 똑구 | 컴퓨터공학부, 경영학부 |
960521 | 떡구 | 기계공학부 |
930204 | 덕구 | 경영학부 |
980708 | 독구 | 인공지능학부, 경영학부 |
위와 같이 전공이라는 속성에 여러 원자 값을 가지고 있으면 학번과 전공은 다치 종속 관계라고 쓰며 기호로는 학번↠전공으로 표시합니다.
하나의 속성에 하나의 원자 값을 가지도록 표를 다시 만들게 되면 아래와 같이 됩니다.
학번 | 이름 | 전공 |
950427 | 똑구 | 컴퓨터공학부 |
950427 | 똑구 | 경영학부 |
960521 | 떡구 | 기계공학부 |
930204 | 덕구 | 경영학부 |
980708 | 독구 | 인공지능학부 |
980708 | 독구 | 경영학부 |
하지만 위와 같이 릴레이션을 만들면 학번과 이름이 중복되는 상태가 됩니다. 여기서 제4 정규화를 거치게 되면
학번 | 이름 |
950427 | 똑구 |
960521 | 떡구 |
930204 | 덕구 |
980708 | 독구 |
학번 | 전공 |
950427 | 컴퓨터공학부 |
950427 | 경영학부 |
960521 | 기계공학부 |
930204 | 경영학부 |
980708 | 인공지능학부 |
980708 | 경영학부 |
2개의 릴레이션으로 분리가 됩니다.
제5 정규형(5NF)
릴레이션의 후보 키로만 해당 릴레이션의 모든 조인 종속성이 만족될 때 제5 정규형에 속한다고 볼 수 있습니다.
요약
정규화 단계 | 목표 |
제 1정규화 | 속성에 하나 이상의 도메인이 있는 경우 제거, 도메인 원자값 |
제 2정규화 | 부분적 함수 제거, 완전 함수적 종속 관계 |
제 3정규화 | 이행적 종속 제거 |
BCNF | 결정자면서 후보키가 아닌 값 제거 |
제 4정규화 | 다치 종속 제거 |
제 5정규화 | 조인 종속성 이용 |
제5 정규형까지 달성했다고 좋은 릴레이션이라고 보지는 않습니다. 오히려 릴레이션을 너무 분해하면 비효율적인 경우가 많아집니다. 일반적으로 SQL 정규화는 제3 정규형이나 BCNF까지 진행을 하셨으면 데이터의 중복을 많이 줄일 수 있으며 이상이 발생되는 경우를 줄여줍니다.
이상(Anomaly)에는 다음과 같은 종류가 있습니다.
1. 삽입 이상: Insertion Anomaly라고도 부르며 릴레이션에 데이터를 삽입 시 원하지 않은 값들도 함께 삽입이 되는 경우를 뜻함
2. 삭제 이상: Deletion Anomaly라고도 부르며 하나의 튜플을 삭제할 때 원하지 않는 값들도 함께 삭제되는 경우를 뜻함
3. 갱신 이상: Update Anomaly라고도 부르며 튜플에 있는 속성 값을 Update 할 때 일부 튜플만 갱신되어 정보가 불일치하게 되는 경우를 뜻함
이상으로 정규화에 대한 포스팅을 마치겠습니다.
오늘도 똑구의 꿀팁 블로그를 방문해 주셔서 감사합니다.
'Intelligence Technology' 카테고리의 다른 글
[데이터베이스] 스키마(Schema) 정의와 특징, 계층구조 (0) | 2022.10.22 |
---|---|
[데이터베이스] 자료구조의 개념 및 리스트(List)의 특징(선형 구조) (0) | 2022.10.22 |
[데이터베이스] 관계대수의 개요 및 연산자별 특징 (0) | 2022.10.12 |
[데이터베이스] 관계형 데이터베이스의 구조 (0) | 2022.10.12 |
[데이터베이스] 데이터베이스 설계 이유 및 순서는? (0) | 2022.10.10 |