[정보처리기사] 정규화 : 1NF, 2NF, 3NF, BCNF, 4NF, 5NF | 정보처리기사 실기 기출문제
📌 정규화의 기본 개념
- 정규화는 데이터를 정리하는 과정으로, 관계형 데이터베이스에서 여러 테이블 간의 관계를 정의하는 스키마를 체계적으로 분해해 나가는 것을 말합니다. 이 과정은 여러 단계로 이루어지며, 각 단계에서 데이터 중복을 줄이고, 이상(Anomaly)을 방지하는 데 중점을 둡니다.
- 정규화(Normalization)는 데이터베이스 설계 시 데이터를 구조화하여 데이터의 중복을 최소화하고 무결성을 유지하며, 데이터를 효율적으로 관리할 수 있도록 하는 중요한 과정입니다. 정규화는 관계형 데이터베이스에서 데이터의 일관성과 정확성을 유지하고, 데이터 중복으로 인해 발생할 수 있는 이상 현상을 방지하는 데 중점을 둡니다.
📌 정규화의 목적
정규화의 주요 목적은 다음과 같습니다:
- 데이터 구조의 안정성 및 무결성 유지: 정규화를 통해 데이터 구조를 체계적으로 관리할 수 있으며, 데이터 간의 종속성을 명확히 하여 데이터의 일관성과 무결성을 유지합니다.
- 효율적인 검색 및 처리: 정규화된 데이터베이스는 불필요한 중복이 없으므로, 데이터를 검색하거나 처리하는 데 있어서 효율적입니다. 이는 쿼리 성능 향상으로 이어질 수 있습니다.
- 데이터 중복 최소화: 데이터를 중복 저장하지 않도록 하여, 저장 공간을 절약하고 데이터의 일관성을 유지합니다.
- 데이터 이상 방지: 정규화되지 않은 데이터베이스는 삽입, 삭제, 갱신 등의 연산에서 의도하지 않은 부작용(이상)이 발생할 수 있습니다. 정규화는 이러한 이상을 방지하는 데 도움을 줍니다.
- 데이터 모형의 단순화: 복잡한 데이터 모델을 단순하게 만들어, 설계 및 유지 관리가 더 쉬워집니다.
📌 정규화의 단계
정규화는 여러 단계로 나누어지며, 각 단계에서 특정한 데이터 문제를 해결합니다. 정규화의 주요 단계는 다음과 같습니다:
1. 제1정규형(1NF)
- 조건: 모든 속성의 값이 원자값(Atomic Value)을 가져야 합니다.
- 원자값: 더 이상 나눌 수 없는 값입니다. 예를 들어, 하나의 필드에 여러 값이 들어 있는 경우 이를 분리합니다.
- 목표: 테이블의 모든 열이 단일 값을 갖도록 하여, 테이블 구조를 단순화합니다.
2. 제2정규형(2NF)
- 조건: 1NF를 만족하고, 기본키가 아닌 모든 속성이 기본키 전체에 대해 완전 함수 종속(Partial Dependency)이어야 합니다.
- 완전 함수 종속(Full Functional Dependency)은 어떤 속성이 기본키 전체에 종속되면서, 기본키의 일부에는 종속되지 않는 경우를 말합니다.
- 부분 함수 종속: 기본키의 일부에만 의존하는 속성이 존재하는 경우입니다.
- 목표: 기본키의 일부가 아닌 전체에 대해 종속성을 가지도록 하여, 부분 함수 종속성을 제거합니다.
3. 제3정규형(3NF)
- 조건: 2NF를 만족하고, 기본키가 아닌 모든 속성이 기본키에만 직접 종속되어야 합니다.
- 이행적 함수 종속: A → B, B → C가 있을 때, A → C로 이어지는 종속 관계를 제거합니다.
- 목표: 이행적 함수 종속성을 제거하여 데이터의 일관성을 강화합니다.
4. BCNF(보이스-코드 정규형)
- 조건: 3NF를 만족하고, 테이블의 모든 결정자가 후보키여야 합니다.
- 결정자: 다른 속성을 결정하는 속성입니다.
- 목표: 모든 결정자가 후보키가 되도록 하여, 모든 관계를 정확히 표현합니다.
5. 제4정규형(4NF)
- 조건: BCNF를 만족하고, 다치 종속(Multivalued Dependency)을 제거해야 합니다.
- 다치 종속: 한 속성의 값이 여러 값과 연관되는 경우입니다.
- 목표: 하나의 속성이 여러 값과 연관될 수 있는 다치 종속을 제거합니다.
6. 제5정규형(5NF)
- 조건: 4NF를 만족하고, 조인 종속성(Join Dependency)을 제거해야 합니다.
- 조인 종속성: 테이블을 분리했을 때 다시 조인할 수 없는 경우를 방지합니다.
- 목표: 테이블의 분해로 인해 데이터의 의미가 훼손되지 않도록 합니다.
🔎 정규화 단계 요약
- 도메인이 원자값 (1NF)
- 부분적 함수 종속 제거 (2NF)
- 이행적 함수 종속 제거 (3NF)
- 결정자이면서 후보키가 아닌 것 제거 (BCNF)
- 다치 종속 제거 (4NF)
- 조인 종속성 제거 (5NF)
2021년 2회 정보처리기사 실기 기출 문제
문제
부분 함수적 종속성을 제거하여 완전 함수 종속을 만족하는 정규형이 무엇인지 쓰시오.
정답
제2정규형 (2NF)
해설
부분 함수적 종속 제거 → 완전 함수 종속을 만족하게 만드는 것이 제2정규형(2NF)입니다. 이를 위해 테이블을 분리하여 기본키 전체에만 의존하는 구조로 만들어야 합니다.
아래 예시를 통해 설명하겠습니다.
1️⃣ 부분 함수적 종속
🔶 부분 함수적 종속 : 기본키가 여러 속성으로 이루어져 있을 때, 기본키의 일부만으로 다른 속성을 결정할 수 있는 관계를 말합니다.
🔶 위 문제 테이블의 기본키는 학생ID와 과목ID 두 필드로 이루어져 있습니다.
과목명과 교수명은 과목ID에만 의존합니다. 기본키 전체(학생ID + 과목ID)에 의존하지 않고, 과목ID만으로 결정됩니다.
예) CS101 → 컴퓨터과학, 김교수 따라서 부분 함수적 종속이 존재하며, 이는 제2정규형을 만족하지 못하는 상태입니다.
2️⃣ 제2정규형으로 변환 (완전 함수 종속)
🔶 완전 함수 종속 : 속성이 기본키 전체에만 의존하고, 기본키의 일부에는 종속되지 않는 상태를 말합니다. 즉, 속성은 기본키 전체를 사용해야만 결정됩니다.
🔶 부분 함수적 종속을 제거하기 위해 테이블을 두 개로 분리합니다.
학생-성적 테이블은 점수가 학생ID와 과목ID 전체에 종속됩니다. 따라서, 완전 함수 종속 상태가 됩니다.
과목 테이블은 과목명과 교수명이 기본키 과목ID에 종속됩니다. 과목ID는 더 이상 복합키가 아니므로, 부분 함수적 종속이 문제가 되지 않습니다.
2021년 2회 정보처리기사 실기 기출 문제
문제
다음의 <주문목록> 테이블과 <주문> 테이블은 <제품주문> 테이블을 기반으로 분해된 테이블이다.
이러한 분해는 부분 함수적 종속을 제거하여 완전 함수적 종속을 만족하기 위한 과정이다.
결과적으로, 이 분해가 만족하는 정규형은 무엇인지 쓰시오.
정답
제2정규형 (2NF)
해설
부분 함수적 종속 제거 → 완전 함수적 종속을 만족하게 만드는 것이 **제2정규형(2NF)**입니다. 이를 위해 테이블을 분리하여 기본키 전체에만 의존하는 구조로 만들어야 합니다.
1️⃣ 부분 함수적 종속
🔶 부분 함수적 종속: 기본키가 여러 속성으로 이루어져 있을 때, 기본키의 일부만으로 다른 속성을 결정할 수 있는 관계를 말합니다.
🔶 분석:
- 기본키는 주문번호와 제품번호의 조합으로 이루어져 있습니다.
- 그러나 고객번호와 주소는 주문번호에만 의존하며, 기본키 전체(주문번호 + 제품번호)에 의존하지 않습니다.
- 이는 부분 함수적 종속에 해당하며, 테이블이 제2정규형을 만족하지 못하는 상태입니다.
2️⃣ 제2정규형으로 변환 (완전 함수 종속)
🔶 완전 함수 종속: 속성이 기본키 전체에만 의존하고, 기본키의 일부에는 종속되지 않는 상태를 말합니다. 즉, 속성은 기본키 전체를 사용해야만 결정됩니다.
🔶 분석:
- 부분 함수적 종속을 제거하기 위해 테이블을 두 개로 분리합니다.
- 주문목록 테이블:
- 주문수량은 주문번호와 제품번호 전체에 종속됩니다.
- 따라서, 완전 함수 종속 상태가 됩니다.
- 주문 테이블:
- 고객번호와 주소는 주문번호에 종속됩니다.
- 이 테이블은 기본키가 단일 속성(주문번호)이므로, 부분 함수적 종속 문제가 발생하지 않습니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."