데이터베이스 정규화 (Normalization) 🚀
데이터베이스 설계 시 이상(Anomaly)을 제거하여 데이터를 효율적으로 구조화하는 과정이다.
🔹 정규화란?
✅ 데이터의 중복성과 종속성을 줄이는 방식
✅ 큰 테이블을 작은 테이블로 분해하여 데이터의 일관성을 유지
✅ 관계를 사용하여 관련된 테이블들을 연결
✅ 정규화의 장점
- 이상 현상(Anomaly) 제거 ❌
- 데이터의 명확성 확보 🧐
- 유지보수성 향상 🔧
- 검색(조회) 효율 증가 🔍
- 응용 프로그램에서 최소한의 작업으로 원하는 정보 조회 가능 🏎️
❌ 정규화의 단점
- 테이블 간의 JOIN 연산 증가 🔗
- 응답 시간이 느려질 가능성 🕒
- 성능 저하 시 반정규화(De-normalization) 필요 ⚠️
🔥 이상 현상 (Anomaly)
이상(Anomaly)은 데이터 삽입, 삭제, 수정 시 발생할 수 있는 데이터 불일치 오류를 의미한다.
1️⃣ 삽입 이상 (Insertion Anomaly) ✏️
- 데이터를 삽입할 때 불필요한 데이터를 반복해서 입력해야 하는 경우 발생
2️⃣ 삭제 이상 (Deletion Anomaly) 🗑️
- 테이블에서 일부 데이터를 삭제할 때, 삭제할 필요가 없는 정보도 함께 삭제되는 경우 발생
3️⃣ 갱신(수정) 이상 (Update Anomaly) 🔄
- 데이터 변경 시 일부 레코드만 수정되어 데이터의 일관성이 깨지는 경우 발생 ⚠️
- 데이터 불일치성으로 무결성(Integrity)이 깨질 위험 존재 🚨
🔗 함수적 종속성 (Functional Dependency)
테이블에서 속성 간의 관계를 표현한 것
✅ 완전 함수적 종속성
- 기본키가 아닌 속성들이 기본키 전체에 종속됨
- 기본키가 복합키인 경우, 모든 속성이 기본키 전체에 종속되어야 함
✅ 부분 함수적 종속성
- 기본키가 아닌 속성이 기본키의 일부에만 종속된 경우 발생
✅ 이행 함수적 종속성
- 세 개 이상의 속성이 연결되어 있을 때 발생하는 종속 관계
A → B 그리고 B → C 라면 A → C 가 성립됨
🎯 정규화 단계 (1NF ~ 5NF)
🔹 1NF (제1 정규형)
- 테이블의 각 속성값은 원자값(Atomic Value) 으로만 구성되어야 함
- 중복되는 속성이나 속성 그룹을 별도 테이블로 분리
🔹 2NF (제2 정규형)
- 1NF를 만족하면서 부분 함수적 종속성을 제거
- 테이블 분할, 기본키 변경을 수행
🔹 3NF (제3 정규형)
- 1NF, 2NF를 만족하면서, 모든 non-key 속성이 기본키에만 종속되도록 조정
- 이행적 종속성을 제거
- 테이블 분할 수행
- 3NF를 만족하면서, 모든 결정자가 후보키인 경우
- 후보키가 아닌 결정자가 존재하면 테이블을 분리해야 함
🔹 4NF (제4 정규형)
- 다치 종속(Multi-valued Dependency)을 제거
- 하나의 속성이 두 개 이상의 독립적인 속성 집합에 종속되면 테이블을 분해해야 함
🔹 5NF (제5 정규형)
- 조인 종속(Join Dependency)을 제거
- 테이블을 분해했을 때 원래의 정보를 다시 복원할 수 있어야 함
🚀 정리
- 정규화(Normalization)는 데이터의 중복과 이상 현상을 제거하는 과정
- 정규화를 수행하면 데이터 무결성을 유지하면서 유지보수성을 향상
- JOIN 연산이 많아지는 단점이 있으므로, 성능 문제 발생 시 반정규화를 고려 ⚖️