데이터베이스 정규화(Normalization)

/ 5 min read /
0 views

데이터베이스 설계의 핵심은 데이터를 효율적으로 관리하고, 무결성을 유지하며, 중복을 최소화하는 것이다. 이를 위해 사용하는 방법이 정규화(Normalization)이다.

데이터베이스 정규화

정규화는 관계형 데이터베이스를 설계할 때 중복 데이터를 줄이고, 데이터 무결성을 유지하며, 효율적인 데이터 관리를 목표로 데이터를 구조화하는 과정이다.

데이터베이스 이상의 개념과 종류

데이터베이스 설계가 적절하지 않을 경우, 삽입 이상, 삭제 이상, 갱신 이상과 같은 문제(이상)가 발생할 수 있다.

삽입 이상 (Insertion Anomaly)

새로운 데이터를 삽입할 때 불필요한 정보를 함께 저장해야 하는 문제다.

학생ID이름학과명학과장
1홍길동컴퓨터학과김교수

문제점: 새로운 학과(예: 전기공학과)를 추가하려면, 학과장이 없는 상태에서도 ‘학생ID’와 ‘이름’ 데이터를 함께 입력해야 한다.

삭제 이상 (Deletion Anomaly)

데이터를 삭제할 때 의도치 않게 다른 중요한 정보도 삭제되는 문제다.

학생ID이름학과명학과장
1홍길동컴퓨터학과김교수

문제점: ‘홍길동’의 데이터를 삭제하면, 컴퓨터학과의 학과장 정보도 함께 사라진다.

갱신 이상 (Update Anomaly)

중복된 데이터 중 일부만 수정되어 데이터 불일치가 발생하는 문제다.

학생ID이름학과명학과장
1홍길동컴퓨터학과김교수
2김영희컴퓨터학과김교수

문제점: 학과장이 변경되었을 때(예: 이교수), 일부 데이터만 갱신하면 불일치가 발생한다.

정규화 단계

정규화는 데이터를 구조화하기 위한 여러 단계로 이루어져 있으며, 단계가 높아질수록 데이터 중복과 이상이 감소한다.

제1정규형 (1NF)

제1차 정규화는 같은 성격과 내용의 컬럼이 연속적으로 나타나는 컬럼이 존재할 때, 해당 컬럼을 제거하고 기본테이블의 PK를 추가해 새로운 테이블을 생성하고, 기존의 테이블과 1:N 관계를 형성하는 것이다

변환 전:

주문ID고객명연락처상품명
1홍길동010-1234-5678사과, 바나나
2김영희010-5678-1234딸기, 포도, 배

변환 후:

주문ID고객명연락처상품명
1홍길동010-1234-5678사과
1홍길동010-1234-5678바나나
2김영희010-5678-1234딸기
2김영희010-5678-1234포도
2김영희010-5678-1234

제2정규형 (2NF)

제2정규화는 PK가 여러 키로 구성된 복합키(Composite Primary Key)로 구성된 경우가 2차 정규화의 대상이 되며, 복합키 전체에 의존하지 않고 복합키의 일부분에만 종속되는 속성들이 존재할 경우 (즉, 부분적 함수 종속 관계) 이를 분리하는 것이다.

변환 전:

주문ID상품ID상품명고객명
1101사과홍길동
1102바나나홍길동
2103딸기김영희
2104포도김영희

변환 후:

주문ID고객명
1홍길동
2김영희
상품ID상품명
101사과
102바나나
103딸기
104포도

제3정규형 (3NF)

테이블의 키가 아닌 컬럼들은 기본키에 의존해야 하는데 겉으로는 그런 것처럼 보이지만 실제로는 기본키가 아닌 다른 일반 컬럼에 의존하는 컬럼들이 있을 수 있다. 이를 (이전적 함수 종속 관계)라고 한다. 제 3정규화는 PK에 의존하지 않고 일반컬럼에 의존하는 컬럼들을 분리한다.

변환 전:

학생ID이름학과ID학과명
1홍길동101컴퓨터학과
2김영희102기계공학과

변환 후:

학생ID이름학과ID
1홍길동101
2김영희102
학과ID학과명
101컴퓨터학과
102기계공학과

BCNF (Boyce-Codd Normal Form)

조건: 제3정규형을 만족하며, 모든 결정자가 후보 키여야 한다.

반정규화

반정규화는 정규화로 나눠진 테이블들을 성능상의 이유로 다시 합치는 작업이다. 정규화로 인해 테이블들이 여러개로 쪼개져서 join이 많이 발생한다면 성능 이슈가 발생한다. 이런 경우에는 정규화에는 위배되지만 성능 향상을 위해 테이블을 합치는 방법을 선택할 수 있다. 그렇다고 정규화를 한다고 해서 반드시 성능을 떨어뜨리는 것이 아니기 때문에 일반화 하지는 말자.

Loading Comments...