코딩일기/자격증

[정보처리기사] 정규화 : 1NF, 2NF, 3NF, BCNF, 4NF, 5NF | 정보처리기사 실기 기출문제

jhy_2023 2024. 8. 13. 08:47
728x90
반응형

📌 정규화의 기본 개념

  • 정규화는 데이터를 정리하는 과정으로, 관계형 데이터베이스에서 여러 테이블 간의 관계를 정의하는 스키마를 체계적으로 분해해 나가는 것을 말합니다. 이 과정은 여러 단계로 이루어지며, 각 단계에서 데이터 중복을 줄이고, 이상(Anomaly)을 방지하는 데 중점을 둡니다.
  • 정규화(Normalization)는 데이터베이스 설계 시 데이터를 구조화하여 데이터의 중복을 최소화하고 무결성을 유지하며, 데이터를 효율적으로 관리할 수 있도록 하는 중요한 과정입니다. 정규화는 관계형 데이터베이스에서 데이터의 일관성과 정확성을 유지하고, 데이터 중복으로 인해 발생할 수 있는 이상 현상을 방지하는 데 중점을 둡니다.
반응형

📌 정규화의 목적

정규화의 주요 목적은 다음과 같습니다:

  • 데이터 구조의 안정성 및 무결성 유지: 정규화를 통해 데이터 구조를 체계적으로 관리할 수 있으며, 데이터 간의 종속성을 명확히 하여 데이터의 일관성과 무결성을 유지합니다.
  • 효율적인 검색 및 처리: 정규화된 데이터베이스는 불필요한 중복이 없으므로, 데이터를 검색하거나 처리하는 데 있어서 효율적입니다. 이는 쿼리 성능 향상으로 이어질 수 있습니다.
  • 데이터 중복 최소화: 데이터를 중복 저장하지 않도록 하여, 저장 공간을 절약하고 데이터의 일관성을 유지합니다.
  • 데이터 이상 방지: 정규화되지 않은 데이터베이스는 삽입, 삭제, 갱신 등의 연산에서 의도하지 않은 부작용(이상)이 발생할 수 있습니다. 정규화는 이러한 이상을 방지하는 데 도움을 줍니다.
  • 데이터 모형의 단순화: 복잡한 데이터 모델을 단순하게 만들어, 설계 및 유지 관리가 더 쉬워집니다.

 

728x90

📌 정규화의 단계

정규화는 여러 단계로 나누어지며, 각 단계에서 특정한 데이터 문제를 해결합니다. 정규화의 주요 단계는 다음과 같습니다:

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️⃣ 부분 함수적 종속

🔶 부분 함수적 종속 : 기본키가 여러 속성으로 이루어져 있을 때, 기본키의 일부만으로 다른 속성을 결정할 수 있는 관계를 말합니다.

문제 테이블 (1NF 상태)

🔶 위 문제 테이블의 기본키는 학생ID와 과목ID 두 필드로 이루어져 있습니다. 
과목명과 교수명은 과목ID에만 의존합니다. 기본키 전체(학생ID + 과목ID)에 의존하지 않고, 과목ID만으로 결정됩니다.
예) CS101 → 컴퓨터과학, 김교수 따라서 부분 함수적 종속이 존재하며, 이는 제2정규형을 만족하지 못하는 상태입니다.

2️⃣ 제2정규형으로 변환 (완전 함수 종속)

🔶 완전 함수 종속 : 속성이 기본키 전체에만 의존하고, 기본키의 일부에는 종속되지 않는 상태를 말합니다. 즉, 속성은 기본키 전체를 사용해야만 결정됩니다.

학생-성적 테이블
과목 테이블

🔶 부분 함수적 종속을 제거하기 위해 테이블을 두 개로 분리합니다.
학생-성적 테이블은 점수가 학생ID와 과목ID 전체에 종속됩니다. 따라서, 완전 함수 종속 상태가 됩니다.
과목 테이블은 과목명과 교수명이 기본키 과목ID에 종속됩니다. 과목ID는 더 이상 복합키가 아니므로, 부분 함수적 종속이 문제가 되지 않습니다.


2021년 2회 정보처리기사 실기 기출 문제

문제

다음의 <주문목록> 테이블과 <주문> 테이블은 <제품주문> 테이블을 기반으로 분해된 테이블이다.
이러한 분해는 부분 함수적 종속을 제거하여 완전 함수적 종속을 만족하기 위한 과정이다.
결과적으로, 이 분해가 만족하는 정규형은 무엇인지 쓰시오.

정답

제2정규형 (2NF)

해설

부분 함수적 종속 제거완전 함수적 종속을 만족하게 만드는 것이 **제2정규형(2NF)**입니다. 이를 위해 테이블을 분리하여 기본키 전체에만 의존하는 구조로 만들어야 합니다.

1️⃣ 부분 함수적 종속

🔶 부분 함수적 종속: 기본키가 여러 속성으로 이루어져 있을 때, 기본키의 일부만으로 다른 속성을 결정할 수 있는 관계를 말합니다.

🔶 분석:

  • 기본키는 주문번호와 제품번호의 조합으로 이루어져 있습니다.
  • 그러나 고객번호와 주소는 주문번호에만 의존하며, 기본키 전체(주문번호 + 제품번호)에 의존하지 않습니다.
  • 이는 부분 함수적 종속에 해당하며, 테이블이 제2정규형을 만족하지 못하는 상태입니다.

2️⃣ 제2정규형으로 변환 (완전 함수 종속)

🔶 완전 함수 종속: 속성이 기본키 전체에만 의존하고, 기본키의 일부에는 종속되지 않는 상태를 말합니다. 즉, 속성은 기본키 전체를 사용해야만 결정됩니다.

🔶 분석:

  • 부분 함수적 종속을 제거하기 위해 테이블을 두 개로 분리합니다.
  • 주문목록 테이블:
    • 주문수량은 주문번호와 제품번호 전체에 종속됩니다.
    • 따라서, 완전 함수 종속 상태가 됩니다.
  • 주문 테이블:
    • 고객번호와 주소는 주문번호에 종속됩니다.
    • 이 테이블은 기본키가 단일 속성(주문번호)이므로, 부분 함수적 종속 문제가 발생하지 않습니다.

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형