본문 바로가기
카테고리 없음

정규화(NORMALIZATION)란?

by cook_code 2023. 6. 12.
반응형

오늘은 SQLD 과목 > 데이터 모델링의 이해 > 정규화에 대해 알아보겠습니다.  

 

정규화의 개념

  • 이상현상이 있는 릴레이션을 분해해서 이상현상을 없애는 과정
  • 함수적 종속성 등의 이론에 근거해 좀 더 작은 단위의 테이블로 설계하는 과정
  • 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있습니다. 

※ 이상현상: 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용

 

[DB] 데이터베이스 정규화와 이상 현상 (Normalization & Anomaly)

정규화란 이상 현상을 제거하기 위해서 데이터베이스를 올바르게 설계해 나가는 과정이다. 여기서 이상 현상이란 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연

zz132456zz.tistory.com

※  릴레이션: 관계형 데이터베이스에서 정보를 구분하여 저장하는 기본 단위 (DB 테이블)

 

[Database] 데이터베이스 용어 - 릴레이션, 어트리뷰트, 튜플, 도메인, 차수, 카디널리티, 스키마

데이터베이스 용어

hoyeonkim795.github.io

 

정규화 관련 용어

  • 정규화 (Normalization)

함수적 종속성 등의 이론에 근거하여 좀 더 작은 단위의 테이블로 설계하는 과정 

  • 정규형 (NF: Normal Form) 

정규화 규정, 정규화 결과에 의해 도출된 데이터 모델이 갖춰야 하는 특성 

  • 함수적 종속성(FD: Functional Dependency)  

테이블의 특정 컬럼 A의 값을 알면 다른 컬럼 값을 알 수 있을 때, 

컬럼 B는 컬럼 A에 함수적 종속성이 있다고 합니다. 

ex) 학번(컬럼A)을 알면 학생이름(컬럼B)을 알 수 있을 때 학생이름은 학번에 종속성이 있습니다. 

  • 결정자 (Determinant) 

함수적 종속성 설명에서 컬럼 A를 결정자라고 합니다. 

ex) 학번(컬럼A)을 알면 학생이름(컬럼B)을 알 수 있을 때 학번(컬럼A)이 결정자가 됩니다. 

  • 다치종속 (MVD: MultiValued Dependency) 

결정자 컬럼 A에 의해 컬럼 B의 값을 다수 개 알 수 있을 때, 

컬럼 B는 컬럼 A에 다치종속되었다고 합니다. 

ex) 주민등록번호(컬럼A)를 알면 (컬럼B)을 알 수 있을 때 학번(컬럼A)이 결정자가 됩니다. 

 

정규화의 장점

1. 상호 종속성이 강한 데이터 요소들을 분리하여 독립된 개념 (엔티티, 테이블)으로 정의하게 됨에 따라, 

Cohesoin & Loose Coupling (높은 응집도 & 낮은 결합도) 원칙에 충실해지며, 

이로 인해 유연성이 극대화 됩니다.

2. 개념이 좀 더 세분화됨에 따라 해당 개념에 대한 재활용 가능성이 높아집니다.

3. Non-key (일반 속성) 데이터 요소가 한 번만 표현됨에 따라 중복이 최소화됩니다. 

(데이터 품질 확보, 저장 공간 절약, DML 성능 향상)

 

정규화 이론 

정규화는 1차 정규화부터 5차 정규화까지 있습니다. 

1, 2, 3차 보이스 코드 정규화 : 함수 종속성에 근거하여 정규화를 수행합니다. 

4차 정규화 : 속성의 값이 여러 개 발생하는 다치종속에 근거하여 정규화를 수행합니다. 

5차 정규화 : 조인에 의해 발생하는 이상현상 제거로 정규화를 수행합니다. 

실무에서는 1,2,3치 정규화를 주로 사용하며 4,5차 정규화까지 진행하는 경우는 드물다고 합니다. 

 

1차 정규화

요약 > 함수 종속, 복수의 속성값을 갖는 속성을 분리, 속성의 원자성 확보 

  • 모든 속성은 원자값을 가져야 합니다. 
  • 다중 값을 가질 수 있는 속성은 분리되어야 합니다.

제 1 정규형 위반 예시 ) 

회원 엔티티의 연락처 속성에 이메일, 연락처 두 가지 속성 값이 들어간 경우 

제 1 정규형 위반 해소 ) 

연락처 속성을 삭제합니다.

회원 연락처 엔티티를 추가 생성하여 제 1 정규형을 만족시킵니다 .

 

2차 정규화

요약 > 함수 종속, 일반 속성과 종속적인 속성의 분리,

이전 종속 속성/이행적 함수 종속(Transitive Functional Dependency)을 분리 

  • 제 1정규형을 만족하는 상태에서 모든 Non-key 컬럼은 기본 키 전체에 종속되어야 합니다. 
  • 기본 키에 종속적이지 않거나 일부 컬럼들만 키본 키에 종속적이라면 분리되어야 합니다. 

※ 이전 종속 속성 개념 : x > y, y > z

 

10. 함수적 종속(Functional Dependency)

함수적 종속(Functional Dependency) 함수적 종속이란 어떤 릴레이션 R이 있을때 X와 Y를 각각 속성의 부분집합이라고 가정해봅니다. 여기서 X의 값을 알면 Y의 값을 바로 식별할 수 있고, X의 값에 Y의

dodo000.tistory.com

제 2 정규형 위반 예시 ) 

고객 주문 엔티티가 존재한다고 할 때, 

복합식별자 : 고객아이디, 주문 순번

단일식별자 : 고객아이디 (고객명, 고객등급)

- 매 주문 시마다 고객의 정보를 새로 저장해야 하고 

- 고객 정보를 모르면 주문이 불가하게 되는 경우

고객 정보의 중복이 발생할 수 있습니다. 

또한 올바른 집합 단위에 기초하고 있지 않습니다. 

※ 복합식별자예시 

주문번호와 상품코드가 결합되어야(복합되어야) 식별자로서의 기능을 하는 경우 이 두 컬럼을 복합식별자라고 한다. 

 

제 2 정규형 위반 해소 ) 

고객 주문 엔티티와 고객 엔티티를 분리합니다. 

모든 속성이 식별자만으로 함수 종속을 가지도록 설계합니다. 

(식별자의 일부에만 종속하는 속성이 없도록 합니다. )

 

3차 정규화

요약 > 함수 종속, 일반 속성과 종속적인 속성의 분리,

이전 종속 속성/이행적 함수 종속(Transitive Functional Dependency)을 분리 

  • 제 2정규형을 만족하는 상태에서 일반속성들 간에도 종속관계가 존재하지 않아야 합니다. 
  • 일반 속성들 간 종속 관계가 존재하는 것들은 분리되어야 합니다. 

 

제 3 정규형 위반 예시 ) 

고객 엔티티가 존재한다고 할 때, 

고객 아이디로 직업코드와 직업명을 종속시키지만 직업 코드와 직업명 사이에 종속관계 발생

- 식별자를 제외한 일반 속성끼리 함수 종속이 발생

- 식별자 이외의 키  간 발생하는 함수의 종속

 

제 2 정규형 위반 해소 ) 

직업 엔티티를 추가하여 일반 속성끼리의 함수 종속을 제거합니다.

 

 

 

반응형