정규화 vs 비정규화

문딤·2022년 10월 7일
0

정규화(Normalized)

관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업이다.
하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정이라 할 수 있다.

한 릴레이션에 여러 entity의 attribute를 혼합하게 되면 정보가 중복 저장되며, 저장 공간을 낭비하게 된다. 또한 중복된 정보로 인해 갱신이상이 발생하게 된다.

이러한 문제를 해결하기 위해 정규화 과정을 거친다. 정규화 과정을 거치게 되면 정규형을 만족하게 된다.

정규형?

◻ 특정 조건을 만족하는 릴레이션의 스키마의 형태
◻ 제1 정규형, 제2 정규형, 제3 정규형, BCNF형, 제4 정규형, 제5 정규형이 존재한다.
◻ 차수가 높아질수록 만족시켜야 할 제약 조건이 늘어난다.

장점단점
데이터베이스 변경시 이상현상 제거릴레이션간의 join 연산 증가 -> 이로인한 질의에 대한 응답 시간저하
저장 공간의 최소화 가능
효과적인 검색 알고리즘 생성가능
데이터 삽입시 릴레이션 재구성의 필요성 감소
데이터 구조의 안정성 및 무결성 유지

정규화의 원칙

  1. 정보의 무손실 표현

=> 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있어서는 안된다.

2.분리의 원칙

=> 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야한다.

  1. 데이터의 중복성이 감소되어야한다.

+@ 함수적 종속

데이터들이 어떤 기준값에 의해 종속되는 것을 말한다.

◻ 완전 함수적 종속

어떤 속성이 기본키에 대해 완전히 종속적인 경우이다.

기본키에 의해 결정되는 컬럼들

◻ 부분 함수적 종속

기본키가 아닌 다른 컬럼과 엮여있는 관계가 있는경우

ex) 예시

비 정규화(Denomalization 반 정규화)

하나 이상의 테이블에 데이터를 중복해 배치하는 최적화 기법이다.

시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위이다.

어느 정도의 데이터 중복이나 갱신 비용을 감수하고 조인 횟수를 줄여 효율적인 쿼리를 날릴 수 있도록 하겠다는 것이다.

장점단점
빠른 데이터 조회 => 조인 비용 감소데이터 갱신이나 삽입 비용이 높다.
살펴볼 테이블이 줄어들기 때문에 데이터 조회 쿼리가 간단해진다. => 버그발생 가능성 감소데이터 갱신 또는 삽입 코드를 작성하기 어려워진다.
데이터 간의 일관성이 깨질수도 있다.
데이터를 중복하여 저장하므로 더많은 저장공간이 필요하다.
데이터 갱신 또는 삽입코드를 작성하기 어려워진다.

비정규화의 대상

  1. 자주사용되는 테이블에 엑세스하는 프로세스의 수가 가장 많고, 항상 일정한 범위만을 조회하는 경우
  2. 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우, 성능 상 이슈가 있을 경우
  3. 테이블에 지나치게 조인을 많이 사용하게 되어 데이터를 조회하는 것이 기술적으로 어려울 경우

대부분의 대규모 IT 업체의 경우처럼, 규모 확장성(scalability)을 요구하는 시스템의 경우 거의 항상 정규화된 데이터베이스와 비정규화된 데이터베이스를 섞어 사용한다.

⁉ 주의점

반 정규화를 과도하게 적용하다보면 데이터의 무결성이 깨질수 있다.
입력,수정,삭제의 질의문에 대한 응답 시간이 늦어질수 있다.

중복된 정보로 인해 발생하는 문제들을 이상 현상(Anomaly)이라 말한다.

  • 삽입 이상(Insertion Anomaly) : 원하지 않는 자료가 삽입된다든지, 삽입하는데 자료가 부족해 삽입이 되지 않아 발생하는 문제점을 말한다.
  • 삭제 이상(Deletion Anomaly) : 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점을 말한다.
  • 갱신 이상(Modification Anomaly) : 정확하지 않거나 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는 문제점을 말한다.

→ 이상 현상은 정규화를 통해 방지할 수 있다.

참고

https://owlyr.tistory.com/20

profile
풀스택개발자가 될래요

0개의 댓글