새소식

Computer Science/Database

데이터 모델과 SQL

  • -

 

본 게시물은 ‘정미나, ⌜2022 유선배 SQL개발자(SQLD)⌟, 시대고시기획, 2022’ 을 인용하였습니다.

 

1. 정규화(Normalization)

  • 데이터 정합성(데이터 정확성/일관성 보장) 위해 엔터티를 작은 단위로 분리하는 과정
  • 정규화를 할 경우, 데이터 조회성능은 처리조건 따라 향상되는 경우 있고 저하되는 경우도 있으나
    입력/수정/삭제 성능은 일반적으로 향상됨
  • 그러나 모든 엔터티를 무작정 분리X -> 일정 룰有

1-1. 제1정규형

  • 모든 속성은 반드시 하나의 값만 가져야 함

  • 유사한 속성이 반복되는 경우도 1차 정규화 대상

1-2. 제2정규형

  • 엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 함
  • 주식별자가 복합식별자인 경우, 일반속성이 주식별자의 일부에만 종속될 때 문제점 발생

1-3. 제3정규형

  • 주식별자 아닌 모든 속성 간에는 서로 종속될 수 없음

1-4. 주의사항

  • 적절한 정규화는 성능상 이로우나 지나친 정규화는 성능 저하를 일으킴

1. 회원의 배송상태를 조회하려면 여러 번의 JOIN 필요

2. 회원 엔터티와 배송 엔터티 간의 관계 생성해 성능 개선

 

 

2. 반정규화(De-Normalization)

데이터 조회 성능을 향상시키기 위해 데이터 중복을 허용하거나 데이터를 그룹핑하는 과정

 

  • 주의할 점
    • 조회 성능은 향상시킬 수 있으나 입력/수정/삭제 성능은 저하될 수 있음
    • 데이터 정합성 이슈 발생할 수 있음
  • 반정규화 과정은 정규화 끝난 후 거치게 되고 정규화와 같이 일정한 룰 존재

2-1. 테이블 반정규화

1. 테이블 병합

  • 업무 프로세스 상 JOIN이 필요한 경우 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우 고려
  • 1:1 관계 테이블 병합

  • 1:M 관계 테이블 병합

 

2. 테이블 분할

  • 테이블 수직 분할 : 엔터티 일부 속성을 별도 엔터티로 분할(1:1 관계 성립)

  • 테이블 수평 분할 : 엔터티의 인스턴스를 특정 기준으로 별도의 엔터티로 분할(파티셔닝)

 

3. 테이블 추가

  • 중복 테이블 추가 : 데이터 중복을 감안하더라도 성능 상 반드시 필요하다고 판단되는 경우 별도 엔터티 추가
  • 통계 테이블 추가

  • 이력 테이블 추가

  • 부분 테이블 추가

2-2. 컬럼 반정규화

  1. 중복 컬럼 추가 : 업무 프로세스 상 JOIN이 필요한 경우 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려
  2. 파생 컬럼 추가 : 프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가해 보관하는 방식으로 상품 재고나 프로모션 적용 할인가 등이 해당할 수 있음
  3. 이력 테이블 컬럼 추가 : 대량의 이력 테이블 조회 시 속도가 느려질 것을 대비해 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가해놓는 방식으로 최신 데이터 여부 등이 해당할 수 있음

2-3. 관계 반정규화(중복관계 추가)

  • 업무 프로세스 상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려

 

 

3. 트랜잭션(Transaction)

데이터를 조작하기 위한 논리적인 작업 단위

 

 

4. NULL

4-1. NULL이란?

  • 존재하지 않음. 값이 없음
  • 0과 NULL은 다름
    • 수입이 NULL 이라면, 0원일수도 수천만원 일 수도 있음. 어떠한 사유로 데이터가 입력되지 않아 NULL 값이 된 것
  • 다른 인스턴스 데이터와 연산 시에는 NULL 값 제외

'Computer Science > Database' 카테고리의 다른 글

SQL 활용  (0) 2024.02.29
SQL 기본  (0) 2024.02.28
데이터 모델링의 이해  (0) 2024.02.27
엔터티  (0) 2024.02.26
데이터 모델링의 이해  (0) 2024.02.26
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.