CS/DataBase

정규화와 반정규화

whyWhale 2021. 4. 28.

정규화 

 

 

정규화 배경


  • 한 릴레이션에 여러 엔티티의 애트리뷰트들을 혼합하게 되면 정보가 중복 저장되며, 저장 공간을 낭비하게 된다.
  • 또한 중복된 정보로 인해 갱신 이상이 발생하게 된다.
  • 동일한 정보를 한 릴레이션에는 변경하고, 나머지 릴레이션에서는 변경하지 않은 경우 어느 것이 정확한지 알 수 없게 된다.
  • 이러한 문제를 해결하기 위해 정규화 과정을 거치는 것이다.

※ 갱신이상

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

 

정규화란


  • 관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업이다.
  • 좀 더 구체적으로는 불만족스러운 나쁜 릴레이션의 애트리뷰트들을 나누어서 좋은 작은 릴레이션으로 분해하는 작업을 말한다.
  • 정규화 과정을 거치게 되면 정규형을 만족하게 된다.
  • 정규형이란 특정 조건을 만족하는 릴레이션의 스키마 형태를 말하며 제 1,2,3,등이 존재한다.
    • 제 1 정규화
      • 테이블 컬럼이 원자값을 갖도록 테이블을 분해하는 것이다.
    • 제 2 정규화
      • 1정규화가 완성 된 후 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다.
      • 완전 함수 종속 : 기본키의 부분집합이 결정자가 되어선 안된다.
    • 제 3 정규화
      • 제 2 정규화가 완성 된 후 이행적 종속을 없애도록 분해하는 것이다.
      • A-> B -> C 가 성립할 때 A->C가 성립하는 것이 이행적 종속이다.
    • BCNF 정규화
      • 제 3 정규화가 완성 된 후 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다.
      • 비주요 애트리뷰트가 후보키의 일부를 결정하는 부분을 분해하는 과정.
     

BCNF 적용 전

 

  • 기본키는 (학생번호,특강이름)으로 교수를 결정한다 하지만, 교수는 특강이름을 결정하고 있다.
  • 문제는 교슈가 특강이름을 결정자이면서 후보키가 아니라는 것이다.

적용 후

 

※ 나쁜 릴레이션을 파악하는 것이 즉 애트리뷰트 간 함수적 종속성을 판단하는 것이다.

 

함수적 종속성 이란?

  • 애트리뷰트 데이터들의 의미와 애트리뷰트들의 간의 상호 관계로부터 유도되는 제약조건의 일종이다.
  • X와 Y를 임의의 애트리뷰트 집합이라 할 때 X의 값이 Y의 값을 유일하게 결정한다면 "X는 Y의 결정자이다"
  • 함수적 종속성은 실세계에서 존재하는 애트리뷰트들 사이의 제약조건으로부터 유도된다.

각각의 정규형은 분해의 대상인 분해 집합 D는 무손실 조인을 보장해야 한다. 즉 분할 전과 후는 같아야 한다.

그리고 분해집합 D는 함수적 종속성을 보존해야 한다.

 

 

더보기

mangkyu.tistory.com/110 예시 설명 참조.

 

 

정규화 장점


  • 이상현상의 문제점을 해결한다.

 

  • 데이터베이스 구조 확상 시 재 디자인 최소화
    • 구조 확장 시 최소화 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경이 가능하다.
    • 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만으로 응용프로그램의 생명을 연장시킨다.

 

  • 사용자들에게 데이터 모델을 더욱 의미있게 제공
    • 사용자에게 데이터 모델을 더욱 의미있게 제공하고 정규화된 테이블들과 테이블간의 관계들은 현실 세계에서의 개념들과 그들간의 관계를 반영한다.

 

단점


  • 릴레이션의 분해로 인해 릴레이션 간의 연산이 많아진다. (JOIN)
  • 이로 인해 질의에 대한 응답 시간이 느려질 수 있다.
  • 용량적으로 최소화되는 효과가 있지만, 정규화된 테이블을 데이터를 처리할 때 속도가 빨라질 수 있고 느려질 수 있다.

 

 

※ 응답시간을 향상시키기 위해 반 정규화를 적용하는 전략을 사용한다.

 

반정규화


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

 

  • 디스크 I/O량이 많아 조회 시 성능이 저하 또는 테이블끼리의 경로가 너무 멀어 조인으로 인한 성능 저하가 예상 되거나 , 칼럼을 계산하여 조회할 때 성능이 저하 될 것이 에상되는 경우 반정규화를 수행하게 된다.
  • 일반적으로 조회에 대한 처리 성능이 아주 중요하다고 판단될 때 부분적으로 반 정규화를 고려하게 된다.
    •  
더보기
  • 테이블 통합
    • 두 개의 테이블이 자주 조인될 경우 성능향상에 도움을 준다.
    • 1:1, 1:N ,슈퍼/서브 타입 테이블 통합.
    • 고려사항
      • 데이터검색은 간편하지만 , 레코드 증가로 인해  처리량이 증가
      • 테이블 통합으로 인해 CRUD가 복잡해 질 수 있다.
      • 제약조건을 설계하기 어렵다.
  • 테이블 분할
    • 수평 분할
      • 레코드를 기준으로 테이블 분할.
      • 레코드 별로 사용 빈도의 차이가 있는 경우 사용.
    • 수직 분할
      • 속성이 너무 많을 경우 분할.
      • 갱신 위주의 속성 분할.
      • 자주 조회ㅣ되는 속성 분할
      • 크기가 큰 속성 분할
      • 보안을 적용해야 하는 분할
    • 주의 사항
      • 기본키의 유일성 관리가 어려워진다.
      • 데이터 양이 적거나 사용 빈도가 낮은 경우 분할이 꼭 필요한지 고려해야 한다.
      • 분할된 테이블로 오히려 저하될 수 있다.
      • 데이터 검색에 중점을 두어 테이블 분할 여부를 결정
  • 중복 테이블 추가
    • 여러 테이블에서 데이터를 추출해서 사용해야 하거나 다른 서버에 저장된 테이블을 이용해야 하는 경우 중복 테이블을 추가하여 작업의 효율성을 향상시킬수 있다.
      • 중복테이블 추가하는 경우
        • 정규화로 인해 수행 속도가 느려지는 경우
        • 많은 범위의 데이터를 자주 조회하는 경우
        • 특정 범위의 데이터만 자주 처리해야 하는 경우
        • 처리 범위를 줄이지 않고는 수행 속도를 개선할 수 없는 경우
      • 중복 테이블 추가하는 방법
        • 집계 테이블의 추가
          • 집계 데이터를 위한 테이블 생성 후 각 원본 테이블에 트리거를 설정하여 사용하는 것으로, 트리거 오버헤드에 주의해야 한다.
        • 진행 테이블의 추가
          • 이력 관리 등의 목적으로 추가하는 테이블로, 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본키를 설정한다.
        • 특정 부분만을 포함하는 테이블의 추가
          • 데이터가 많은 테이블의 특정 부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성.
  • 중복 속성 추가
    • 조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가 하는 것이다.
    • 중복속성을 추가하면 데이터의 무결성을 확보하기 어렵고 ,디스크 공간이 추가로 필요하다.
    • 중복 속성 추가하는 경우
      • 조인이 자주 발생하는 속성
      • 접근 경로가 복잡한 속성
      • 엑세스의 조건으로 자주 사용되는 속성
      • 기본키의 형태가 적절하지 않거나 여러 개의 속성으로 구성된 경우.
    • 중복 속성 추가시 고려사항
      • 테이블 중복과 속성의 중복 고려
      • 데이터 일관성 및 무결성에 유의
      • SQL 그룹 함수를 이용하여 처리할 수 있어야 함.
      • 저장 공간의 지나친 낭비 고려.

반정규화 대상 

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

반정규화 주의사항.

  • 과도한 반 정규화로 무결성이 깨질 수 있다. 또한 입력,수정,삭제의 질의문에 대한 응답시간이 늦어 질 수 있다..

'CS > DataBase' 카테고리의 다른 글

모델링 IE 표기법 _ 객체 다중성 표기법  (0) 2021.07.13
인덱스  (0) 2021.05.02
교착상태  (0) 2021.05.01
트랜젝션  (0) 2021.04.29
데이터 베이스의 사용 이유와 성능  (0) 2021.04.28

댓글