TIL#150 정규화/반정규화

Dasom·2021년 7월 30일
0

database

목록 보기
10/15

👀 규모 확장성(scalability)을 요구하는 시스템의 경우 거의 항상 정규화된 데이터베이스와 비정규화된 데이터베이스를 섞어 사용한다

정규화

중복을 최소화하도록 설계
-> 특정 조건을 만족하는 릴레이션의 스키마 형태
-> 제1정규형, 제2정규형, 제3정규형, BCNF형, 제4정규형, 제5정규형이 존재
-> 차수가 높아질수록 만족시켜야 할 제약조건이 늘어난다

목적

  • 데이터 구조의 안정성 및 무결성을 유지
  • 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 만듬
  • 효과적인 검색 알고리즘 생성 가능
  • 데이터 중복을 배제해 이상(Anomaly)의 발생 방지 및 자료 저장 공간의 최소화
  • 개체와 속성의 누락 여부 확인 가능
  • 데이터 삽입시 릴레이션을 재구성할 필요성을 줄임

장단점

장점

  • 데이터베이스 변경 시 이상현상(Anomaly)을 제거할 수 있다.
  • 저장 공간을 최소화 할 수 있다.
  • 효과적인 검색 알고리즘을 생성할 수 있다.
  • 데이터 삽입시 릴레이션 재구성의 필요성을 감소시킬 수 있다.
  • 데이터 구조의 안정성 및 무결성을 유지할 수 있다.

단점

  • 릴레이션 간의 조인 연산이 증가한다.
  • 질의에 대한 응답 시간이 저하된다.

원칙

  • 정보의 무손실 -> 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있어서는 안된다.
  • 분리의 원칙 -> 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야 한다.
  • 데이터의 중복성 감소

비정규화

읽는 시간을 최적화하도록 설계
-> 하나 이상의 테이블에 데이터를 중복해 배치하는 최적화 기법

비정규화는 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화원칙을 위배하는 행위이다. 어느 정도의 데이터 중복이나 그로 인해 발생하는 데이터 갱신 비용은 감수하는 대신 조인 횟수를 줄여 한층 효율적인 쿼리를 날릴 수 있도록 하겠단 것이다.

장단점

장점

  • 빠른 데이터 조회가 가능하다. -> 조인 비용이 줄어들기 때문에
  • 데이터 조회 쿼리가 간단해진다. -> 살펴볼 테이블이 줄어들기 때문에
  • 버그 발생 가능성이 줄어든다.

단점

  • 데이터 갱신이나 삽입 비용이 높다.
  • 데이터 갱신 또는 삽입 코드를 작성하기 어려워진다.
  • 데이터 간의 일관성이 깨어질 수 있다. (값이 다르면 어느 쪽이 올바른 값인지 모른다)
  • 데이터를 중복하여 저장하기 때문에 더 많은 저장 공간이 필요하다.

비정규화 대상

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

주의사항

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

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

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

함수적 종속

데이터들이 어떤 기준값에 의해 종속되는 것을 의미


수강 릴레이션이 학번, 이름, 과목명으로 되어 있을 때, 학번이 결정되면 과목명과 관계없이 학번에는 항상 같은 이름이 대응된다. 학번에 따라 이름이 결정될 때 이름을 학번에 함수 종속적이라 한다.
  • 완전 함수적 종속 : 어떤 속성이 기본키에 대해 완전히 종속적일 때를 말한다.
  • 부분 함수적 종속 : 기본키 집합에 완전히 종속적이지만 집합의 부분집합에도 함수적 종속일 때를 말한다.

수강 릴레이션이 학번, 과목명, 성적, 학년으로 되어있고 학번, 과목명이 기본키 일때
- 성적은 학번과 과목명의 같은 경우에 항상 같은 성적이 온다. 기본키의 일부인 학번만으로 같은 성적이 오지도, 일부인 과목명만으로 같은 성적이 오지도 않기 때문에 완전 함수적 종속이다.
- 학년은 과목명에 관계없이 학번이 같으면 같은 학년이 온다. 기본키의 일부인 학번만으로 학년이 결정되기 때문에 부분 함수적 종속이다.
profile
개발자꿈나무🌲

0개의 댓글