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

[CS스터디] 정규화

by mazayong 2022. 11. 21.

--목차--

1. 정규화의 목적

2. 정규화?

3. 정규형의 종류

4. 정규화의 장단점

5. 정규화의 단점에 대한 해결책

--------

 

 

 

 

1. 정규화의 목적

1) 갱신 이상 발생

  • 정보의 중복 저장 및 저장 공간 낭비(한 릴레이션에 여러 엔티티의 애트리뷰트 혼합)
  • 갱신 이상 발생. (동일한 정보를 한 릴레이션은 변경하고, 나머지 릴레이션은 변경하지 않은 경우 정보의 정확성 의문)

2) 갱신 이상

  • 삽입 이상(insertion anomalies)
    • 원치 않는 자료 삽입
  • 삽입하는데 자료가 부족해 삽입이 되지 않아 발생하는 문제
    • 삭제 이상(deletion anomalies)
  • 원치 않는 정보 손실(하나의 자료만 삭제하고 싶지만, 자료가 포함된 튜플 전체가 삭제됨)
    • 수정 이상(modification anomalies)
    • 정확한 정보파악 불가(정확하지 않거나 일부의 튜플만 갱신되어 정보가 일관성이 사라짐)

 

 

 

2. 정규화?

1) 정의

관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업.

불만족스러운 나쁜 릴레이션의 애트리뷰트들을 나누어서 좋은 작은 릴레이션으로 분해하는 작업.

정규화 작업을 거치면 정규형을 만족하게 됨.

 

2) 나쁜 릴레이션 파악 방법

함수적 종속성(Functional Dependency, 엔티티를 구성하고 있는 애트리뷰트 간 상호작용)으로 판단.

판단된 함수적 종속성은 좋은 릴레이션 설계의 정형적 기준으로 사용. 

각각의 정규형마다 어떠한 함수적 종속성을 만족하는지에 따라 정규형 정의, 정규형을 만족하지 못하는 정규형을 나쁜 릴레이션으로 파악.

 

3) 함수적 종속성?

애트리뷰트 데이터들의 의미와 애트리뷰트들 간의 상호 관계로부터 유도되는 제약조건의 일종.

X, Y를 임의의 애트리뷰트 집합이라 할 때, X의 값이 Y의 값을 유일하게 결정한다면 X는 Y를 함수적으로 결정한다고 함.

실세계에서 존재하는 애트리뷰트들 사이의 제약조건으로부터 유도됨.

각종 추론 규칙에 따라 애트리뷰트간의 함수적 종속성 판단 가능.

<함수의 종속성 규칙>

 

4) 정규형이 만족해야 할 조건

분해의 대상인 분해집합은 무손실 조인을 보장해야 한다.

분해집합은 함수적 종속성을 보존해야 한다.

 

 

 

 

3. 정규화의 종류

1) 제 1 정규형

  • 애트리뷰트의 도메인이 오직 원자값만을 포함.
  • 튜플의 모든 애트리뷰트가 도메인에 속하는 하나의 값을 가져야 한다.
  • 비원자적 애트리뷰트들을 허용하지 않는 릴레이션 형태.(다중값 애트리뷰트, 복합 애트리뷰트, 중첩 릴레이션)
  • 만족해야 하는 규칙
    • 각 컬럼은 하나의 속성만을 가짐
    • 하나의 컬럼은 같은 종류나 타입을 가져야 함.
    • 각 컬럼은 유일한 이름을 가져야 함.
    • 컬럼의 순서가 상관없어야 함.

 

2) 제 2 정규형

  • 모든 비주요 애트리뷰트들이 주요 애트리뷰트에 대해서 완전 함수적 종속이면 제 2 정규형 만족.
  • 완전 함수적 종속이란 X -> Y라고 가정시, X의 어떤 애트리뷰트라도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우.
  • 키가 아닌 열들이 각각 후보키에 대해 결정되는 릴레이션 형태.
  • 만족해야 하는 규칙
    • 1 정규형을 만족해야 한다.
    • 모든 컬럼이 컬럼의 부분적 종속을 만족해야 한다. (모든 컬럼이 완전 함수 종속을 만족해야 한다.)

 

3) 제 3 정규형

  • 비주요 애트리뷰트는 기본키에 대해 이행적으로 종속하지 않을 경우 만족한다.
  • 이행 함수적 종속 : X -> Y, Y -> Z의 경우 추론될 수 있는 X -> Z의 종속관계.
  • 비주요 애트리뷰트가 비주요 애트리뷰트에 의해 종속되는 경우가 없는 릴레이션 형태.
  • 만족해야 하는 규칙 
    • 2 정규형을 만족해야 한다.
    • 기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.

 

4) BCNF(Boyce-Codd) 정규형

  • 여러 후보 키가 존재하는 릴레이션에 해당하는 정규화 내용.
  • 복잡한 식별자 관계에 의해 발생하는 문제를 해결하기 위해 제 3 정규형 보완에 의미가 있음.
  • 비주요 애트리뷰트가 후보키의 일부를 결정하는 분해하는 과정.
  • 만족해야 하는 규칙
    • 3 정규형을 만족해야 한다.

 

모든 제 2 정규형 릴레이션은 제 1 정규형을 갖는다.

모든 제 3 정규형 릴레이션은 제 2 정규형을 갖는다.

모든 BCNF 정규형 릴레이션은 제 3 정규형을 갖는다.

 

관계 데이터베이스 설계의 목표는 각 릴레이션이 3NF(or BCNF)를 갖게 하는 것이다.

 

예시 링크

https://3months.tistory.com/193

 

5) 제 4 정규형

  • 만족해야 하는 규칙
    • BCNF
    • 다치 종속이 없어야 한다.
      • A -> B일 때 하나의 A 값에 여러 B값이 존재하면 다치 종속성을 가진다고 한다.
      • 최소 3개의 컬럼이 존재한다. 
      • R(A, B, C)가 있을 때 A와 B 사이에 다치 종속성이 있을 때 B와 C가 독립적이다.

 

6) 제 5 정규형(Project Join Normal Form)

  • 중복을 제거하기 위해 분해할 수 있을 만큼 전부 분해하는 것.
  • 만족해야 하는 규칙
    • 4 정규형을 만족해야 한다.
    • 조인 종속이 없어야 한다.
      • 하나의 릴레이션을 여러 개의 릴레이션으로 무손실 분해했다가 다시 결합할 수 있는 경우
    • 조인 연산을 했을 때 손실이 없어야 한다.

 

 

 

 

 

 

4. 정규화의 장단점

1) 정규화의 장점

  • 데이터베이스 변경 시 이상 현상 제거
  • 데이터베이스 구조 확장 시 재디자인 최소화.
  • 새로운 데이터형 추가로 인한 확장시, 구조를 변경하지 않아도 되거나 일부만 변경하면 됨.
  • 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만 미쳐서 응용 프로그램의 생명 연장.
  • 사용자에게 데이터모델을 더욱 의미있게 제공.
  • (정규화된 테이블들 간의 관계들은 현실 세계에서 개념들과 그들의 관계 반영)

2) 정규화의 단점

  • 릴레이션 간 연산(JOIN연산) 증가.
  • 질의에 대한 응답 시간 느려짐.
  • (정규화 수행 = 데이터를 결정하는 결정자에 의해 함수적 종속을 갖고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것.
  • 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화됨.
  • 데이터 처리시 속도가 빠를 수도, 느릴 수도 있음)

 

 

 

5. 정규화를 진행해야 하는 상황

조회하는 SQL문장에서 조인이 많이 발생해 성능저하가 나타날 경우 반정규화 적용하는 전략 필요.

1) 반정규화(De-normalization, 비정규화)

정규화된 데이터, 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발의 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 데이터 모델링 기법 중 하나.

 

2) 반정규화가 필요한 상황

자주 사용되는 테이블에 엑세스하는 프로세스의 수가 많고(디스크 I/O량이 많은 경우), 항상 일정한 범위만 조회.

테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하거나 성능상 이슈가 있을 경우

테이블에 지나치게 조인을 많이 사용해 데이터 조회가 기술적으로 어려울 경우

 

3) 반정규화 과정에서 주의할 점

과도하게 적용시 데이터의 무결성 깨질 수 있음.

입력, 수정, 삭제 질의문에 대한 응답 시간 지연

 

 

 

 

참조

https://code-lab1.tistory.com/270

https://code-lab1.tistory.com/47

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Database#index