정규화

2023. 10. 7. 16:15BOOKS/SQL 전문가 가이드

 
SQL 전문가 가이드
SQL 전문가 가이드는 SQL 자격검정 대비 수험서로 데이터베이스와 데이터 모델링에 대한 지식을 바탕으로 최적의 성능을 발휘할 수 있도록 SQL을 작성하고 데이터베이스 프로그램이나 응용 소프트웨어의 성능을 최적화하고 데이터베이스 개체의 설계와 구현을 위해 데이터 모델링의 이해, SQL기본 및 활용, SQL 고급 활용 및 튜닝 등의 실무가이드로 구성되어 있다.
저자
한국데이터산업진흥원
출판
한국데이터산업진흥원
출판일
2021.03.15

1. 제 1정규형

: 모든 속성은 반드시 하나의 값을 가져야 한다.

- 속성이 다중값을 가지는 경우

  • 개발의 복잡성 증가
  • 속성의 의미 퇴색
  • 불안정한 데이터 구조 양산
  • 개발의 오류 및 데이터 품질 문제 야기

해결 : 다중값을 가지는 속성을 엔터티로 만들어 준다.

- 중복 데이터를 속성으로 분리한 경우

  • 중복되는 데이터 수가 늘어나면 속성을 매번 추가해야 함
    → DBMS에서 테이블 Lock발생 → 사이트 중지
  • 중복된 데이터를 분리하여 만든 속성을 빠르게 조회하기 위해서는 인덱스를 추가해야함
    → 조회는 빨라지지만 입력,수정,삭제는 느려짐

해결 : 중복되는 데이터는 새로운 엔터티를 만들어 따로 관리해준다.

2. 제 2정규형

: 엔터티의 일반속성은 주식별자 전체에 종속적이여야 한다.

→ 상품번호가 중복되지만 주문번호가 다르므로 중복된 데이터X

  • 상품명은 주문번호에는 종속되지 않으므로 제 2정규형에 위배
    → 문제점
    • 상품명을 변경해야 하는 경우 중복된 상품명을 모두 변경해야 하므로 상품명의 부하가 크게 증가
    • 특정 시점에는 아직 변경되지 않은 상품명 존재
      → 이때 들어온 트랜잭션은 일관되지 않은 데이터 조회
    • 정리 : 일반속성이 주식별자 전체에 종속적이지 않으면(= 제 2정규형에 위배되면) 그 속성은 중복이 발생할 수 있으며 중복되는 속성값을 변경해야 할 경우 해당 속성값을 가지는 인스턴스들을 모두 찾아 변경해주어야하고, 변경 도중 새로운 트랜잭션이 들어오면 일관되지 않은 데이터를 조회하게 되므로 성능과 정합성 문제를 발생시킨다.

해결 : 종속되지 않는 일반 속성은 새 엔터티를 만들어 따로 관리해준다.

→ 상품명도 함께 보고 싶을 경우에는 상품번호를 매핑키로 조인하여 조회해준다.

3. 제 3정규형

: 엔터티의 일반 속성 간에는 서로 종속적이지 않는다.

이행 종속성

→ 이행 종속성을 배제하는 것을 제3정규형이라고 한다.

제 3정규형 위배했을 때 문제점

  • 고객명이 변경되면 주문엔터티에 고객명을 전부 갱신해야 한다. 이는 주문과는 전혀 연관 없는 트랜잭션이다.
  • 데이터 중복으로 인해 발생하는 문제는 성능 부하 및 정합성 오류로 제 2차정규형과 동일

해결 : 고객 엔터티를 분리하여 관리

4. 반정규화와 성능

반정규화

  • 정규화를 반대로 하는 것
  • 성능을 위해 데이터 중복을 허용하는 것
    ※ 조회 성능은 향상시킬 수 있으나 입력,수정,삭제 성능은 저하될 수 있다.

반정규화를 적용한 모델에서 성능이 향상될 수 있는 경우

  • 많이 쓰이는 속성일 경우 조인 건수가 증가하게 되어 성능이 저하될 수 있음
    → 반정규화하여 개선

반정규화를 적용한 모델에서 성능이 저하될 수 있는 경우

  • 인스턴스를 생성할 때 속성값을 결정할 수 없는 경우 속성값이 결정된 후 갱신해주어야 함
    → 불필요한 로직이 추가됨

반정규화는 데이터 불일치로 인한 정합성 문제 뿐만 아니라 불필요한 트랜잭션으로 인한 성능 문제를 만들어내기 때문에 꼭 필요할 때만 적용해야함

'BOOKS > SQL 전문가 가이드' 카테고리의 다른 글

모델이 표현하는 트랜잭션의 이해  (0) 2023.10.07
관계와 조인의 이해  (0) 2023.10.07
식별자  (0) 2023.10.07
관계  (0) 2023.10.07
속성  (0) 2023.09.29