정규화와 성능

정규화란?

 

데이터베이스에서 정규화는 관계형 데이터 모델 이론에서 중복 정보 정의를 최소화하여

 

논리 데이터 모델링의 목적인 정확성, 일관성, 단순성, 비 중복성, 안정성을 만족시키는

 

최적의(Optimal) 개념적 데이터를 만드는 것을 정규화라고 합니다.

 

1972년 E.F CODE 박사에 의해 제안된 이론으로 실세계에서 발생하는 데이터를 수학적인 방법에 의해

 

구조화시켜 체계적으로 관리할 수 있도록 한 이론 

정규화 필요성

  • 입력이상 : 데이터 입력시 필요없는 속성까지 입력
  • 수정이상 : 데이터 수정시 원하지 않는 데이터까지 수정
  • 삭제이상 : 데이터 삭제피 필요한 데이터까지 삭제

 

정규화 종류

  • 1차 정규화 : 모든 속성은 원자값을 가짐  복수의 속성 값을 갖는 속성을 분리
  • 2차 정규화 : 주식별자에 종속적이지 않은 속성의 분리, 부분 종속 속성을 분리
  • 3차 정규화 : 속성에 종속적인 속성의 분리, 이전 종속 속성의 분리

1차 정규화 사례

 

모니터, 마우스가 여러개가 있어서 문제가 있음

  • 입력 이상 : 주문이 발생되어야만 제품 정보를 등록할 수 있다.
  • 수정 이상 : 마우스의 수량을 9702에서 15000으로 변경하고자 한다면 데이터를 3번 수정해야 한다.
  • 삭제 이상 : 제품번호가 1201인 스피커를 주문한 내역을 삭제하면 제품명, 재고수량 정보도 모두 삭제된다.

이에 따라 주문 관련 정보와 제품 관련정보를 분리하여 1차 정규화 실시가 필요합니다.

 

이어서 2차 정규화에 대해서 알아보겠습니다.

  • 입력 이상 : 고객정보 입력 시 주문정보도 입력해야 함
  • 수정 이상 : 만약 주문번호 AB345의 우선순위를 1에서 10으로 수정할 경우, 1001+AB345와 1007+AB345를 같이 수정해야 함
  • 삭제 이상 : 주문번호 삭제시 고객번호도 함께 삭제됨 

2차 정규화는 모든 속성은 기본키에만 종속되어야 하고, 일부에만 종속되면 안된다는 개념입니다.

 

1차 정규화를 실시했지만, 여전히 아래와 같은 문제가 있습니다.

 

 

  • 제품번호 + 주문번호에 종속적인 속성 : 주문수량
  • 주문번호에 종속적인 속성 : 수출여부, 고객번호, 사업자번호, 우선순위  

이에 따라 주문번호가 기본키임 테이블과 제품번호 주문번호가 기본키인 테이블인 주문목록으로 쪼개야 합니다.

마지막 3차 정규화는 기본키가 아닌 다른 속성들이 종속되면 안된다는 개념입니다.

  • 입력 이상 : 새로운 고객 등록 시 주문이 없으면 입력이 안됨
  • 수정 이상 : 한 고객이 여러 번 주문한 경우 고객 정보가 반복적으로 발생. 고객 정보 수정시 여러 개의 데이터를 수정해야 한다.
  • 삭제 이상 : 고객번호 4520이 주문을 취소하면 주문 정보만 삭제되는 것이 아니라 고객 정보도 모두 삭제된다.

이 문제에서는 고객번호에 사업자번호가 포함되어 있는데요.

 

이 고객번호에 종속적인 속성을 분리하여 별도 테이블로 만드는 작업입니다.

 

이렇게 정규화에 대해서 알아보았는데요.

 

정리하면 아래와 같습니다.

구분 개념 확인사항 비고
1차정규화 모든 속성은 반드시 하나의 속성만 가져야 함(원자성) 하나의 속성에 여러개 값이 있는지 확인  
2차정규화 부분함수 종속성을 제거 기본키의 일부 속성에 종속되는 케이스 찾기  
3차정규화 이행함수 종속성을 제거 식별자가 아닌 속성이 다른 속성을 결정하는지 확  

 

 

정규화 참고 사이트 

 

https://tech.devgear.co.kr/?mid=db_kb&page=4&document_srl=333 

 

DB전문가 기술자료 - 데이터모델링이란 - 6.정규화

1. 정규화 정의 1972년 E.F CODE 박사에 의해 제안된 이론으로 실세계에서 발생하는 데이터를 수학적인 방법에 의해 구조화시켜 체계적으로 관리할 수 있도록 한 이론 2. 정규화 필요성 가. 엔티티를

tech.devgear.co.kr

https://wikidocs.net/170749

 

21. 정규화 (2장에서 어렵고 중요한 내용)

# 정규화 > 2장에서 가장 어려운 정규화와 반정규화입니다. 이번 글에선 정규화부터 하겠습니다. 정규화는 논리적 데이터모델링에 속하며, Key/속성/관계에 대한 정의를 다 ...

wikidocs.net

 

'Programming > SQLD' 카테고리의 다른 글

SQLD 자격증 취득 - 시험 등록하기  (0) 2022.10.22
Mariadb fulltext index 사용하기  (0) 2022.10.14
SQL 명령어 종류 - DDL/DML/DCL/TCL  (0) 2022.09.18
데이터 모델링의 이해  (0) 2022.09.09
SQLD 자격증 준비하기  (0) 2022.08.28