본문 바로가기
DataBase

Normalization

by orioncsy 2023. 2. 28.

Normalization

개념

배경

  • 하나의 릴레이션에서 여러 엔티티의 속성을 혼합하면 정보가 중복될 수 있고 공간을 낭비할 수 있다.
  • anormaly
    • 하나의 릴레이션에서는 변경하고 나머지에서는 변경하지 않았을 때 어느 정보가 정확한 것인지 확인 불가
    • insertion anormaly
      • 원하지 않은 자료가 삽입되거나 자료가 부족하여 삽입이 안 되는 경우
    • deletion anormaly
      • 하나의 자료만 삭제하고 싶은데 그 자료가 포함한 튜플 전체를 삭제하면서 원하지 않은 정보 손실 발생
    • modification anormaly
      • 정확하지 않거나 일부 튜플만 변경되어 일관된 정보를 얻을 수 없는 경우

정규화

  • 관계형 데이터베이스에서 중복된 데이터를 최소화하기 위한 과정
  • 릴레이션을 분해해서 해결

함수적 종속성

  • 속성간의 상호 관계로부터 유도되는 제약 조건
  • x의 값이 y의 값을 유일하게 결정한다면 x는 y를 함수적으로 결정한다라고 표현

정규형의 기본 조건

  • 무손실 조인 보장
  • 함수적 종속성을 보장

종류

제 1 정규화

  • 속성의 값이 원자값으로 하나의 값만 들어간다.

제2 정규화

  • 기본키가 아닌 속성이 기본키 속성에 완전 함수 종속을 만족
  • 기본키의 일부에 의해 결정되는 부분 함수 종속이 아닌 완전 함수종속을 만족해야 한다.

제3 정규화

  • 비 기본키가 이행적 함수 종속이 아닌 경우를 만족
  • 이행적 함수 종속은 비 기본키가 기본키에 종속적이고 그 기본키가 다른 비 기본키에 종속적인 경우이다.

BCNF

  • 후보키가 다른 속성을 결정하는 결정자일 경우 분해하는 정규화

장단점

장점

  • 이상 현상 제거
  • DB 구조를 확장 시에 다시 디자인해야 하는 것을 최소화한다.
  • 데이터 모델을 보다 현실 세계의 대상과 유사하게 반영

단점

  • 릴레이션 분해를 자주하면 데이터를 찾을 때 JOIN 연산을 자주 하게 된다.
  • 이로 인해 쿼리 성능 저하가 될 수 있다.

반정규화

  • 정규화된 엔티티, 속성, 관계를 시스템 성능 향상 및 운영 단순화를 위해 중복 통합, 분리하는 데이터 모델링
  • 정규화의 단점을 보완
  • 일반적으로 조회의 성능 처리가 중요할 경우 사용
  • 사용 대상
    • 자주 사용되는 테이블이나 접근하는 프로세스 수가 많고 일정 범위만 접근하는 경우
    • 테이블에 대량의 데이터가 있고 대량의 범위를 자주 처리하는 경우와 성능 우려가 있을 경우
    • 테이블을 지나치게 조인을 많이하여 조회가 어려운 경우
  • 반정규화를 과도하게 하면 데이터 무결성이 깨질 수 있고, 입력, 수정, 삭제에 대한 응답 시간이 지연될 수 있다.

데이터 무결성

  • 데이터의 정확성과 유효성을 의미
  • 객체 무결성
    • 테이블에 기본키가 하나 있어야하고 null값이 아니어야 한다.
  • 참조 무결성
    • 외래키의 값은 null이거나 참조 테이블의 기본키와 동일
  • 도메인 무결성
    • 테이블에 존재하는 필드의 무결성을 보장하기 위해 필드 타입, null 값 허용에 대한 사항을 정의하고 확인하는 조건
  • null 무결성
    • null 값이 될 수 없게 하는 조건
  • 고유 무결성
    • 테이블의 특정 속성에 대해 값이 서로 달라야 하는 조건
  • 키 무결성
    • 하나의 테이블에 적어도 하나의 키가 존재
  • 관계 무결성
    • 테이블의 어느 레코드의 삽입 가능 여부 혹은 한 테이블과 다른 테이블의 레코드 사이의 관계 적절성 여부

Reference

Interview_Question_for_Beginner/Database at master · JaeYeopHan/Interview_Question_for_Beginner

[Database] 데이터 무결성(Data Integrity)이란?

'DataBase' 카테고리의 다른 글

Redis & Memcached  (0) 2023.03.02
RDBMS & NoSQL  (0) 2023.03.01
Transaction  (0) 2023.02.27
Index  (0) 2023.02.26
데이터베이스 인덱스 종류  (0) 2022.12.21