CS/데이터베이스

[CS/Database] 정규화

dbfl9911 2024. 10. 28. 23:18
반응형


 

 

•  정규화란?

 

하나의 릴레이션(테이블)에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정이며, 데이터의 일관성 / 최소한의 데이터 중복 / 최대한의 데이터 유연성을 위한 방법입니다.

 

 

 

제1 정규형 : 테이블의 컬럼(열)이 원자 값(하나의 값)을 갖도록 분해합니다. 

제1 정규화 전 상태
제1 정규화 후 상태

 

 

 

제2 정규형 : 제1 정규형을 만족하고, 기본키가 아닌 속성이 기본키에 완전 함수 종속이도록 분해합니다.

(여기서 완전 함수 종속이란 기본키의 부분집합이 다른 값을 결정하지 않는 것을 의미)

제2 정규화 전 상태

 

위 테이블에서 (학생번호, 강좌이름)을 기본키로 설정하면, 성적은 이 기본키를 통해 결정됩니다.
즉, (학생번호, 강좌이름) → 성적 이라는 관계가 성립합니다.

하지만 강의실 정보(강의실 컬럼)는 강좌이름에 따라 자동으로 결정되므로,
강좌이름 → 강의실이라는 새로운 의존성이 존재합니다.
즉, 강좌이름이 같으면 강의실도 동일해야 하는데, 같은 데이터가 반복 저장되는 중복 문제가 발생합니다.

제2 정규화 후 상태

 

제2 정규형은 기본키의 일부가 아닌 속성(부분 함수 종속)을 제거하여 테이블을 분리하는 것입니다.
이를 적용하면 강의실 정보를 별도의 테이블로 분리하여 중복을 줄일 수 있습니다. 

 

 

 

제3 정규형 : 제2 정규형을 만족하고, 이행적 함수 종속을 없애도록 분해합니다.

(여기서 이행적 함수 종속이란 AB, B→C가 성립할 때, A→C가 성립되는 것을 의미)

제3 정규화 전 상태
제3 정규화 후 상태

 

 

 

  BCNF 정규형 : 제3 정규형을 만족하고, 함수 종속성 XY가 성립할 때, 모든 결정자 X가 후보키가 되도록 분해합니다.

BCNF 정규화 전 상태

이 테이블에서 기본키는 (학생번호, 특강이름)입니다. 
즉, 학생번호와 특강이름이 함께 있어야 성적이나 교수 정보를 찾을 수 있는 구조입니다. 

하지만 교수는 강의에 따라 결정되므로, 특강이름 → 교수라는 새로운 의존성이 발생합니다.

BCNF 정규화 후 상태

BCNF 정규형은 모든 결정자가 후보키가 되도록 테이블을 분리하는 것입니다. 

즉, 교수는 특강이름에 따라 결정되지만, (학생번호, 특강이름) 의 기본키에 속하지 않으므로 테이블을 분리해야 합니다. 

 

 


 

 

• 정규화의 장단점

 

- 장점

  • 데이터베이스 변경 시 이상현상이 발생하는 문제점을 해결할 수 있습니다. 
  • 데이터베이스 구조 확장시 정규화된 데이터베이스는 그 구조를 변경하지 않아도 되거나 일부만 변경해도 됩니다. 
📓이상 현상의 종류
이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 생기는 오류를 말한다. 
· 삽입 이상 : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
· 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상 
· 갱신 이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상

 

- 단점

  • 릴레이션(테이블) 분해로 인해 릴레이션 간의 연산(JOIN 연산)이 많아집니다. 이로인해 질의에 대한 응답 시간이 느려질 수 있습니다. 

 

+ 정규화를 수행한다는 것은 이상 현상을 제거한다는 것입니다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있습니다. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있습니다.

 

 


 

 

• 역정규화(반정규화)를 하는 이유

  • 정규화를 거치면 릴레이션 간의 연산(JOIN 연산)이 많아지는데, 이로인해 성능이 저하될 우려가 있습니다.
  • 역정규화를 하는 가장 큰 이유는 성능 문제가 있는(읽기 작업이 많이 필요한) DB의 전반적인 성능을 향상시키기 위함입니다. 

 

 

 


 

* 위 글은 아래 문서를 참고해 작성했습니다. 

https://dev-coco.tistory.com/158

 

신입 개발자 기술면접 질문 정리 - 데이터베이스

💡 데이터베이스의 특징에 대해 설명해주세요. 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 하며, 지속적인 변화(Continuous Evloution) :

dev-coco.tistory.com

https://mangkyu.tistory.com/110

 

[Database] 정규화(Normalization) 쉽게 이해하기

지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz

mangkyu.tistory.com

 


review 1회독 2회독 3회독 4회독 5회독
check ✅(2/22)        

 

반응형