정규화
기술노트
🗃️ 데이터베이스 정규화 (Database Normalization)
정규화는 관계형 데이터베이스(RDBMS)에서 데이터의 중복을 최소화하고 데이터의 일관성을 보장하기 위해, 테이블을 특정 규칙에 따라 분리하고 재구성하는 과정입니다. 데이터베이스를 보다 체계적이고 효율적으로 설계하기 위한 방법론입니다.
정규화를 통해 데이터 삽입, 수정, 삭제 시 발생할 수 있는 '이상 현상(Anomaly)'을 방지할 수 있습니다.
🧐 정규화의 목표와 이상 현상
- 삽입 이상 (Insertion Anomaly) : 불필요한 데이터 없이는 새로운 데이터를 추가할 수 없는 현상.
- 갱신 이상 (Update Anomaly) : 중복된 데이터 중 일부만 수정되어 데이터 불일치가 발생하는 현상.
- 삭제 이상 (Deletion Anomaly) : 특정 정보를 삭제하면, 원치 않는 다른 정보까지 함께 삭제되는 현상.
정규화는 이러한 이상 현상을 해결하여 데이터 무결성을 유지하는 것을 목표로 합니다.
📚 정규형의 종류
정규화는 여러 단계(정규형)로 나뉘며, 일반적으로 제3정규형까지 만족시키는 것을 목표로 합니다.
- 제1정규형 (1NF) : 테이블의 모든 컬럼 값이 원자 값(Atomic Value)을 갖도록 분해합니다. (하나의 컬럼에 여러 값이 들어가지 않도록 함)
- 제2정규형 (2NF) : 제1정규형을 만족하고, 부분 함수 종속성을 제거합니다. (기본 키의 일부에만 종속되는 컬럼을 별도 테이블로 분리)
- 제3정규형 (3NF) : 제2정규형을 만족하고, 이행 함수 종속성을 제거합니다. (기본 키가 아닌 다른 일반 컬럼에 종속되는 컬럼을 분리)
- BCNF (Boyce-Codd Normal Form) : 제3정규형보다 더 엄격한 조건으로, 모든 결정자가 후보 키가 되도록 합니다.
💡 개발자 핵심 Point
- 정규화는 데이터 중복을 줄여 저장 공간을 효율적으로 사용하고, 데이터 일관성을 유지하는 데 필수적입니다.
- 하지만 과도한 정규화는 테이블이 너무 많이 분리되어, 데이터 조회 시 JOIN 연산이 많아져 성능이 저하될 수 있습니다.
- 따라서 실제 시스템 설계 시에는 정규화를 통해 데이터 무결성을 확보하고, 필요에 따라 반정규화(Denormalization)를 적용하여 성능을 최적화하는 균형점을 찾아야 합니다.