✅ 정규화란?
데이터베이스 정규화는 관계형 데이터베이스 데이터 모델의 중복을 최소화하고 데이터의 일관성, 유연성을 확보하기 위한 목적으로 데이터를 분해하는 과정을 뜻한다. 일반적으로 크고 제대로 조직되지 않은 테이블들을 잘 조직된 여러 개의 테이블을 나누는 과정이라고 생각하면 이해하기 쉽다. 정규화를 하는 목적은 데이터들을 조금 더 효율적으로 관리하는데에 그 목적이 있다.
- 불필요하거나 중복되는 데이터들을 제거한다.
- 이상현상(Anomaly)을 방지한다.
- 데이터 저장을 논리적으로 한다.
데이터를 효율적으로 관리하기 위해서는 위의 3가지를 고려해 데이터모델을 재설계해야 한다. 이렇게 정규화를 수행하면 비즈니스 로직에 변화가 생기더라도 데이터 모델의 변경을 최소화할 수 있다.
✅ 이상현상(Anomaly)이란?
이상현상의 종류
- 삭제 이상: 데이터 삭제 시 의도와는 상관없이 다른 정보까지 연쇄적으로 삭제되는 현상
- 삽입 이상: 데이터 삽입 시 의도와는 상관없이 원하지 않는 값들도 함께 삽입되는 현상
- 수정 이상: 데이터 수정 시 의도와는 상관없이 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상
✅ 정규화 절차
정규화 절차 | 설명 |
제 1정규화 | 속성(Attribute)의 원자성을 확보하고 원자값이 아닌 도메인을 분해한다. |
제 2정규화 | 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다. |
제 3정규화 | 기본키를 제외한 컬럼간의 종속성을 제거한다. 즉 이행 함수 종속성을 제거한다. |
정규화는 제 1정규화부터 제 5정규화까지 있지만, 실질적으로는 제3 정규화까지만 수행한다.
✅ 제 1정규화
제 1정규화는 테이블의 컬럼이 원자값을 갖도록 테이블을 분해하는 것이다. 기존의 테이블이 위와 같은 형식으로 되어있다고 하면, 골프초급 프로그램을 신청한 데이터를 찾기 위해서는 query를 다음과 같이 짜야할 것이다.
# 기존 Query
WHERE 프로그램 = '골프초급'
# 정규화 안되었을 때
WHERE 프로그램 LIKE '%골프초급%'
제 1정규화가 되어있지 않다면 프로그램을 수강신청한 사람 찾기도 번거로워질 뿐 아니라, 프로그램명 수정도 어려워진다.
따라서 다음과 같이 한 칸에 하나의 데이터만 삽입하게 되면 위와 같은 문제점들을 일정부분 해소할 수 있다.
✅ 제 2정규화
제 2정규화는 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)하는 것을 뜻한다.
만약에 위와 같이 테이블이 있고 가격 테이블의 6000원을 7000원으로 변경하고자 한다면 가격 하나를 변경하려고 해도 수 많은 데이터들을 수정하게 되는 비효율이 발생한다. 따라서 현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업을 통해 효율적으로 데이터를 수정하게끔 해주어야 한다.
따라서 다음과 같이 테이블을 분해하면 프로그램 데이터를 수정할때 보다 쉽게 변경할 수 있다. 하지만 이와 같이 분리할 경우 테이블 1개만 봤을 경우에 원하는 데이터 값을 찾기 어려울 수 있다.
✅ 제 3정규화
제 3정규화란, 제 2정규화를 진행한 테이블에 대해 이행적 종속이 없도록 분해하는 것이다. 여기서 이행적 종속이란 A -> B, B -> C가 성립할 때 A -> C가 성립하는 것을 의미한다.
위와 같은 테이블의 장점은 한 컬럼의 데이터를 수정함으로 인해 다른 컬럼까지 같이 수정을 하게 되는 번거로움을 해결할 수 있다.
📚 Reference
'Computer Science' 카테고리의 다른 글
함수형 프로그래밍의 특징과 장단점 (0) | 2023.02.08 |
---|---|
IPC(Inter-Process Communication)란? (2) | 2023.02.06 |
애자일(Agile)이란? (0) | 2023.02.01 |
TDD(Test Driven Development)란? (0) | 2023.01.31 |
[DB] 데이터베이스 인덱스(Index)란 무엇인가? (0) | 2023.01.30 |