자격증 공부📖/SQLD

[SQLD 데이터 모델과 성능] 정규화와 성능

hyunsix 2021. 5. 13. 18:15

정규화를 하는 이유 

  • 상호 종속성이 강한 데이터 요소들을 분리하고, 독립된 개념으로 정의하게 됨에 따라 데이터의 유연성이 상승된다.
  • 개념이 좀 더 세분화에 따라 개념에 대한 재활용 가능성이 높아진다.
  • 일반속성 데이터 요소가 한번만 표현됨에 따라 중복이 최소화된다.
  • 주의할점 ! -> 정규화된 데이터 모델을 처리할 때 입력, 수정, 삭제의 경우 무조건적으로 성능이 향상되지만, 조회의 경우 처리 조건에 따라 성능이 향상 혹은 저하될 수 있다. 

 

정규화의 종류

  • 1차 정규화 : 함수종속, 복수의 속성값을 갖는 속성을 분리, 속성의 원자성 확보
  • 2차 정규화 : 함수종속, 주식별자에 완전종속적이지 않은 속성의 분리, 부분종속 속성을 분리
  • 3차 정규화 : 함수종속, 일반속성에 종속적인 속성의 분리, 이전종속 송성의 분리

음... 무슨 말이지 ? ? 각각의 정규화를 그림으로 이해하면 더 좋을 것 같다.

 

 

1차 정규화

 

위와 같이 나이라는 하나의 속성에 2개 이상의 원자값이 들어온 경우 제 1정규형 위반이라고 하며 이것을 조정하는 것이 이 1차 정규화이다.

 

 

2차 정규화

 

빨간색 박스로 된 고객이름, 주문번호 컬럼이 PK라고 주어졌을 때 파란박스로 이루어진 출신고와 포지션은 주문번호PK에는 종속되어 있지 않는다. 주문번호에 따라 출신고와 포지션이 정해지는 것이 아니기 때문이다. 이렇게 Non-key 컬럼이 기본 key에 종속되어 있지 않거나 기본 key 일부 컬럼에만 종속되어 있는 경우를 제 2형 정규형 위반이라고 하고 제 2정규형에 따르지 않는다고 한다. 

 

 

3차 정규화

위와 같은 경우 선수이름이 PK(primary key) 로 주어졌는데 일반 속성인 포지션과 포지션 코드가 서로 종속적인 관계를 가질 수 있다. 이런 경우 제 3형 정규형 위반이라고 하고 제 3정규형에 따르지 않는다고 한다.