2025-08-13 07:13

Tags: SQL

정규화

정규화가 만들어진 이유

  • 데이터 종속성: 데이터 구조 변경 사용하는 모든 응용 프로그램 수정
  • 데이터 중복성: 여러 프로그램이 동일 데이터 각자 중복 저장 저장 공간 낭비. 일관성 유지 X
  • 데이터 베이스를 응용 프로그램에서 독립 데이터를 관계 라는 표 형태로 관리하는 관계형 모델
  • 여기서 나온게 바로 정규화 데이터 이상 현상 해결
  • 함수종속성(완전, 부분, 이행)(결정자종속자) 있는 데이터 모델 정규화 정규형 맞는 데이터 모델
  • 입력 삭제 수정 성능 향상 BUT 조회는 저하될 수 있음 반정규화

정규화 종류: 순서대로 적용해야

제 1정규화(1NF) : 원자성. 완전함수종속성 제거

  • 모든 속성은 반드시 하나의 값을 가져야 한다. 중복 인스턴스X
  • 테이블의 모든 속성 값은 원자적(Atomic)이어야 한다.**

제 2정규형(2NF) : 부분함수종속성 제거

  • 엔터티의 일반 속성은 주식별자 전체에 종속이어야 한다.
  • 1NF를 만족하고, 기본 키(Primary Key)가 아닌 모든 속성은 기본 키에 완전 함수 종속되어야 한다.

제 3정규형(3NF) : 이행함수종속성 제거

정규화 절차

제 1정규화: 원자성 확보

  • 각 행이 하나의 수강 정보를 나타내도록 분리
  • 각 속성은 하나의 값만
  • 수강과목 과목코드, 과목명, 담당교수 모두 다른 속성으로
학번이름학과수강과목 (과목코드, 과목명, 담당교수)
1001김철수컴퓨터공학CS101, 데이터베이스, 이영희
CS202, 운영체제, 박진수
1002박영미전자공학EE201, 회로이론, 최민준
학번이름학과과목코드과목명담당교수
1001김철수컴퓨터공학CS101데이터베이스이영희
1001김철수컴퓨터공학CS202운영체제박진수
1002박영미전자공학EE201회로이론최민준

제 2정규화: 부분함수종속 제거

  • (학번, 과목코드) 담당교수: 특정 학생이 특정 과목 수강 담당 교수 결정 (완전함수종속)
  • 학번 이름, 학과 : 하나의 기본키 학번 만으로 이름, 학과 결정 (부분함수종속)
  • 과목코드 과목명: 하나의 기본키 과목코드 만으로 과목명 결정(부분함수종속)
  1. 학생테이블
학번 (PK)이름학과
1001김철수컴퓨터공학
1002박영미전자공학
  1. 과목 테이블
과목코드 (PK)과목명담당교수
CS101데이터베이스이영희
CS202운영체제박진수
EE201회로이론최민준
  1. 수강신청테이블
학번 (FK)과목코드 (FK)
1001CS101
1001CS202
1002EE201

제 3정규화: 이행함수종속 제거

  • 이행적 함수 종속 관계 제거: A B, BC 일때, A C 성립할때, 기본키 아닌 속성이 다른 속성 결정
  • 과목코드 담당 교수, 담당 교수 교수학과 이면, 과목코드 교수학과 성립하는 이행적 함수 종속
  • 이 경우 만약 교수의 소속학과 바뀜 담당하는 모든 과목의 교수학과 바꿔야함
  • 이행적 함수 종속 (제 3정규화) 별도의 테이블로 분리

1. 과목 테이블 (수정)

과목코드 (PK)과목명담당교수
CS101데이터베이스이영희
CS202운영체제박진수
EE201회로이론최민준

2. 교수 테이블 (신규)

담당교수 (PK)교수학과
이영희컴퓨터공학
박진수컴퓨터공학
최민준전자공학

BCNF (Boyce-Codd Normal Form): 모든 결정자는 후보 키여야 한다.

  • 결정자이면서 후보키가 아닌 경우 제거.
  • 흔치 않은 케이스로 제 3정규화 강화버전으로 이해하고 넘어가자