Database Normalization: 1NF to 5NF in Plain English
- 데이터베이스 정규화는 데이터베이스를 효율적이고 일관성 있게 설계하고 구성하는 과정입니다. 🛠️
- 정규화를 통해 데이터 불일치(예: 같은 항목에 다른 이름)를 방지하고, 데이터 삽입, 업데이트, 삭제 시 발생할 수 있는 오류를 줄일 수 있습니다. 🛡️
- 제1정규형 (1NF): 각 셀에 단일 값만 포함하고, 반복되는 그룹이 없으며, 모든 테이블에 고유한 기본 키가 있어야 합니다. 🔑
- 1NF를 달성하려면, 여러 값을 포함하는 행을 분리하고 각 행에 고유한 ID(대리 키 선호)를 부여해야 합니다. ➡️
- 제2정규형 (2NF): 기본 키의 일부에만 의존하는 비키(non-key) 속성이 없어야 합니다. 즉, 모든 비키 속성은 전체 기본 키에 종속되어야 합니다. 🔗
- 2NF는 삽입, 업데이트, 삭제 이상(anomaly)을 해결하기 위해 관련 없는 데이터를 별도의 테이블로 분리하고 외래 키로 연결합니다. 🚫
- 제3정규형 (3NF): 비키 속성이 다른 비키 속성에 종속되는 전이적 종속성이 없어야 합니다. 모든 비키 속성은 오직 기본 키에만 직접적으로 종속되어야 합니다. 🎯
- 3NF는 데이터 변경 시 한 곳에서만 업데이트하도록 하여 업데이트 이상을 방지하며, 많은 데이터베이스 설계가 이 단계에서 멈춥니다. 🛑
- 보이스-코드 정규형 (BCNF): 3NF의 더 엄격한 형태로, 중복되는 후보 키가 있는 드문 경우를 처리하며, 속성을 별도 테이블로 분리하는 유사한 과정을 따릅니다. ✨
- 제4정규형 (4NF): 다치 종속성(multivalued dependencies)을 다루며, 두 정보가 독립적이라면 같은 테이블에 두지 않아야 합니다. ↔️
- 4NF는 독립적인 다치 사실을 포함하는 테이블을 각각의 독립적인 테이블로 분리하여 해결합니다. 📚
- 제5정규형 (5NF): 불필요한 분해를 피하고, 여러 독립적인 관계를 한 곳에 표현하여 발생할 수 있는 데이터 불일치를 방지합니다. 🧩
- 5NF는 테이블을 더 작은 테이블로 분해하여 각 테이블이 단일하고 독립적인 관계를 나타내도록 하여 데이터 일관성을 보장합니다. 🔄
- 각 정규형은 이전 정규형을 기반으로 하며, 상위 정규형을 만족하려면 하위 정규형도 만족해야 합니다. 📈