데이터베이스 정규화는 데이터의 중복을 최소화하고 무결성을 유지하기 위해 테이블을 구조화하는 과정입니다.
정규화를 통해 삽입, 삭제, 갱신 시 발생할 수 있는 이상 현상을 방지하고, 데이터베이스의 일관성을 유지할 수 있습니다.
정규화는 여러 단계로 나뉘며, 일반적으로 제1정규형, 제2정규형, 제3정규형, BCNF까지 적용합니다.
먼저, 제1정규형에서는 테이블의 모든 속성이 원자값을 가지도록 만들어 중복을 방지합니다.
제2정규형에서는 기본키의 부분 함수 종속성을 제거해 정규화하고, 제3정규형에서는 이행 종속성을 제거합니다.
마지막으로, BCNF에서는 후보키가 아닌 결정자를 제거해 데이터 무결성을 강화합니다.
개념설명
정규화(Normalization)란?
데이터 중복을 줄이고 무결성을 유지하기 위해 테이블을 구조화하는 과정
이를 통해 삽입, 삭제, 갱신 이상을 방지하고, 데이터베이스의 일관성을 유지 가능
정규화의 목표
데이터 중복 제거: 동일한 데이터가 여러 테이블에 존재하는 것을 방지
데이터 무결성 유지: 데이터가 일관성을 가지도록 설계
이상(Anomaly) 방지: 삽입, 삭제, 갱신 시 발생하는 이상 현상 제거
데이터베이스 구조 최적화: 스토리지 효율성을 증가시키고 유지보수성을 높임
정규화 과정
제1정규형
모든 속성이 원자값을 가지도록 함
즉, 한 컬럼에는 하나의 값만 존재해야 함
제1정규화 적용 전
학번
학생명
수강과목
1001
홍길동
데이터베이스, 운영체제
1002
이영희
컴퓨터네트워크
문제) 한 컬럼에 여러 개의 값이 들어가 있음
제1정규화 적용 후
학번
학생명
수강과목
1001
홍길동
데이터베이스
1001
홍길동
운영체제
1002
이영희
컴퓨터네트워크
제2정규형
제1정규형을 만족하면서, 부분 함수 종속 제거
즉, 테이블의 모든 컬럼이 기본키 전체에 완전 종속되도록 함
제2정규화 적용 전
학번
학생명
수강과목
교수명
1001
홍길동
데이터베이스
김교수
1001
홍길동
운영체제
이교수
문제) 학생명은 학번에만 종속, 교수명은 수강과목에 종속 (부분 함수 종속 발생)
제2정규화 적용 후 (테이블 분리)
학생 테이블
학번
학생명
1001
홍길동
1002
이영희
수강 테이블
학번
수강과목
교수명
1001
데이터베이스
김교수
1001
운영체제
이교수
제3정규형
제2정규형을 만족하면서 이행적 종속 제거
즉, 기본키가 아닌 속성이 다른 기본키가 아닌 속성에 종속되지 않도록 함
제3정규화 적용 전
학번
학생명
학과코드
학과명
1001
홍길동
CS01
컴퓨터공학과
1002
이영희
EE02
전자공학과
문제) 학과명이 학과코드에 의해 결정됨 → 이행적 종속 발생
제3정규화 적용 후 (학과 테이블 분리)
학생 테이블
학번
학생명
학과코드
1001
홍길동
CS01
1002
이영희
EE02
학과 테이블
학과코드
학과명
CS01
컴퓨터공학과
EE02
전자공학과
BCNF
제3정규형을 만족하면서, 후보키가 아닌 결정자 제거
즉, 모든 결정자가 후보키가 되도록 보장
BCNF 적용 전
교수명
연구실
학과
김교수
101호
컴퓨터공학과
이교수
102호
전자공학과
문제) 교수명이 연구실을 결정하지만, 교수명이 후보키가 아님
BCNF 적용 후 (테이블 분리)
교수 테이블
교수ID
교수명
P001
김교수
P002
이교수
연구실 테이블
연구실
학과
101호
컴퓨터공학과
102호
전자공학과
꼬리 질문
정규화를 하면 얻을 수 있는 장점에 대해 설명해주세요.
정규화의 단점에 대해 설명해주세요.
어떠한 상황에 정규화를 하는 것이 좋은지, 그리고 단점에 대한 해결책에 대해 설명해주세요.