[MariaDB] 정규화 실습

이지연·2025년 11월 27일

개요

이번 포스팅에서는 정규화(Normalization) 과정을
실제 학생-과목 성적 데이터를 통해 1NF → 2NF → 3NF + BCNF까지단계별로 실습하며 각 단계에서 발생하는 부분적 종속, 이행적 종속 등의 문제를 해결하는 방법을 정리!


원본 테이블 (비정규화 상태)

STUDENT_IDCOURSE_IDGRADESTUDENT_NMDEPARTMENTfees
1CSE011101, CSE022202, CSE033303A+, A, B+hongildong컴퓨터공학부5000000
2MEC011101Ahongildong2경영학부4000000
3POD032939Chongildong3기계공학부6000000

문제점:

  • 한 셀에 여러 값 (다중값)
  • 학생정보 중복
  • 등록금(fees)이 학부에 종속

1차 정규화 (1NF) - 원자값 보장

목표: 모든 컬럼이 원자값(하나의 값)만 가지도록 분리

STUDENT_IDCOURSE_IDGRADESTUDENT_NMDEPARTMENTfees
1CSE011101A+hongildong컴퓨터공학부5000000
1CSE022202Ahongildong컴퓨터공학부5000000
1CSE033303B+hongildong컴퓨터공학부5000000
2MEC011101Ahongildong2경영학부4000000
3POD032939Chongildong3기계공학부6000000

개선점

  • COURSE_ID, GRADE를 행 단위로 분리
  • 부분 함수 종속 발생: (STUDENT_ID, COURSE_ID)가 기본키인데, STUDENT_NM, DEPARTMENT, feesSTUDENT_ID에만 종속

2차 정규화 (2NF) - 부분 함수 종속 제거

목표: 비기본키 속성기본키 전체에만 함수 종속되도록 테이블 분리

성적 테이블 (Enrollment)

STUDENT_IDCOURSE_IDGRADE
1CSE011101A+
1CSE022202A
1CSE033303B+
2MEC011101A
3POD032939C

학생정보 테이블 (Student - 중복 발생)

STUDENT_IDSTUDENT_NMDEPARTMENTfees
1hongildong컴퓨터공학부5000000
1hongildong컴퓨터공학부5000000
1hongildong컴퓨터공학부5000000
2hongildong2경영학부4000000
3hongildong3기계공학부6000000

문제점

  • 학생정보 테이블에서 여전히 중복 발생
  • 이행적 종속: STUDENT_ID → DEPARTMENT → fees

3차 정규화 + BCNF (이행적 종속 & 결정자 문제 제거)

목표:

  • 3NF: 비기본키 속성 간 이행적 종속 제거
  • BCNF: 모든 결정자가 후보키가 되도록 보장

1) 성적 테이블 (Enrollment)

STUDENT_IDCOURSE_IDGRADE
1CSE011101A+
1CSE022202A
1CSE033303B+
2MEC011101A
3POD032939C

2) 학생 테이블 (Student)

STUDENT_IDSTUDENT_NM학부ID
1hongildong1
2hongildong22
3hongildong33
4hongildong41
5hongildong51
6hongildong61

3) 학부 테이블 (Department)

IDDEPARTMENTfees
1컴퓨터공학부5000000
2경영학부4000000
3기계공학부6000000

완성된 구조의 장점

  • 삽입 이상 방지: 새로운 학부 등록 시 학생 없이도 가능
  • 삭제 이상 방지: 학생 삭제 시 학부정보 보존
  • 갱신 이상 방지: 컴퓨터공학부 등록금 변경 시 한 곳만 수정

정규화 요약표

단계문제 해결분리 기준테이블 수
1NF다중값 → 원자값행 분리1 → 1
2NF부분 종속 제거학생정보 분리1 → 2
3NF+BCNF이행 종속 제거
결정자 문제 해결
학부정보 분리2 → 3

마치며

결국 핵심은 원자성을 보장 하였는지, 그리고 부분 종속을 제거 하였는지를 파악하면 되고,
부분종속에 대한 개념을 잡기 위해서는 예를들어 학번을 조회하면 학부를 알 수 있는가? 학부를 조회하면 학번을 알수 있는가? 이런식으로 사고해보면 종속관계 파악이 될 듯(근데 그래도 어려움 그냥 표를 다 그려보길 ㅋㅋㅋㅋ)!

profile
Eazy하게

1개의 댓글

comment-user-thumbnail
2025년 12월 11일

역시 기계공학부가 등록금이 비싸네요…
피지컬 ai를 공부하는 저같은 학생은 어떻게 해야하나요?

답글 달기