SQL-DDL

Sejin·2025년 5월 6일
0

Data, DB공부

목록 보기
15/26

이상현상(Anomaly)

비효율적으로 설계된 데이터베이스 구조로 인해 데이터의 삽입(Insert), 삭제(Delete), 갱신(Update), 작업 중에 일관성 문제나 데이터 무결성 위반이 발생하는 현상.

주요 이상현상 종류

  • 삽입 이상

  • 삭제 이상

  • 갱신 이상

이상현상의 예


삭제이상(Delete Anomaly)
1102 학생이 'A01' 수강한 기록을 삭제할 떄
삽입이상(Insert Anomaly)
(1104, 유관순, 010-4444-5555)인 학생을 추가하고자 할 때
갱신 이상(Update Anomaly)
'1101'학생의 연락처가 변경된 이유

이상현상의 해결 방법

이상현상을 방지하기 위해 데이터베이스를 정규화(Normalization)하여 데이터 중복을 줄이고, 테이블 간 관계를 잘 설계하는 것이 중요함


정규화(Normalization)

관계형 데이터베이스 설계 과정에서 데이터 중복을 최소화하고 데이터 무결성을 유지하기 위해 데이터를 구조화하는 체계적인 방법론

정규화 목표

1. 이상현상 방지

삽입, 삭제, 갱신 이상현상(Anomalies)을 예방함

2. 데이터 무결성 보장

데이터의 일관성과 정확성을 유지함

3. 효율적인 데이터 관리

논리적이고 명확한 테이블 구조를 통해 데이터 관리와 변경 용이함

정규화 단계(정규형, Nomal Form)

제1정규형(1NF)

도메인들의 값이 원자값으로 구성되도록 함

제2정규형(2NF)

제1정규형을 만족하면서, 부분 함수 종속을 제거함.
부분 함수 종속은 관계형 데이터베이스에서 한 속성이 기본키의 일부에만 종속되는 상태

제3정규형(3NF)

제2정규형을 만족하면서, 이행적 함수 종속을 제거함

보이스-코드 정규형(BCNF)

제3정규형을 만족하면서, 모든 결정자가
후보키가 되도록 함

제4정규형(4NF)

다치 종속을 제거함

제5정규형(5NF)

조인 종속을 제거하여 테이블 간의 데이터 관계를 분리함


정규화 성능

효과

  • 데이터 중복 감소
    성능 향상
  • 데이터가 관심사별로 묶임
    성능 향상
  • 조회 질의에서 조인이 많이 발생
    성능 저하

정규화를 통해 일반적으로 성능이 향상되나, 조회의 경우 처리 조건에 따라 성능이 향상되거나 저하되는 경우가 있을 수 있음

정규화를 통한 성능 예

특정 학생의 학년 변경 시

  • 정규화 전:
    해당 학생이 수강 테이블에서 나타나는 수만큼 변경
  • 정규화 후:
    해당 학생의 학년 한 건만 변경

특정 학년 학생의 학번, 이름 조회 시

  • 정규화 전:
    수강 이력이 누적된 수만큼 인스턴스 조회
  • 정규화 후:
    학생 수만큼 인스턴스 조회(성능 향상)

학번, 이름, 과목명, 평점 조회 시

  • 정규화전:
    하나의 테이블에서 모두 조회
  • 정규화 후:
    조인 필요(약간의 성능 저하)

반정규화

역정규화 = Denormalization

정규화된 엔터티, 속성, 관계에 대해 성능 향상을 목적으로 중복, 통합, 분리를 수행하는 데이터 모델링 기법

비정규화: 정규화를 아예 수행하지 않음

특징

테이블, 칼럼, 관계의 반정규화를 종합적으로 고려해야 함. 일반적으로 속성(칼럼)의 중복을 시도함.
과도한 반정규화는 데이터 무결성을 침해하게됨.

반정규화의 사전 절차

반정규화 대상 조사

  • 범위 처리 빈도수 조사
    a=3과 1>a>5 조사
  • 대량의 범위 처리 조사
    1<a<5과 1<a<100 조사
  • 통계성 프로세스 조사
    a=4과 sum, count, average 연산 조사
  • 테이블 조인 개수
    조인이 많아지면 성능에 영향

다른 방법 유도 검토

  • 뷰(View) 테이블
    뷰 자체가 성능 향상을 가져오지는 않음.
    신중하게 설계된 뷰를 재사용할 때 성능 향사
  • 클러스터링용
    자주 사용되는 테이블의 데이터를 디스크의 같은 블록에 저장
  • 인덱스의 조정
    인덱스 추가, 삭제 및 순서 조정
  • 응용애플리케이션
    데이터 처리를 위한 로직 변경

반정규화 적용

  • 테이블 반정규화
  • 속성의 반정규화
  • 관계의 반정규화

반정규화 기법 종류

칼럼 반정규화

중복 칼럼 추가

한 테이블에서 이미 존재하는 데이터를 다른 테이블에 중복으로 저장하기 위해 칼럼을 추가하는 방식

  • 목적
    JOIN 연산을 최소화하여 조회 성능을 향상.
    특정 테이블만으로 데이터를 빠르게 조회 가능.

  • 예시
    주문 테이블에 회원의 이름이나 주소를 중복 저장

파생 칼럼 추가

계산 비용을 줄여 성능 최적화 ->
조회 시마다 계산하지 않고 미리 계산된 값을 활용함

1. 칼럼(Column)에 의한 파생

  • 같은 행에 있는 하나 이상의 칼럼 값을 계산하여 새로운 값을 생성하는 방식
  • 데이터의 수평적 계산에 해당됨
  • 예) 주문 테이블에 총주문 금액 칼럼(수문*단가)를 추가함

2. 로우(ROW)에 의한 파생

  • 여러 행에서 값을 집계하거나 비교하여새로운 값을 생성하는 방식
  • 데이터의 수직적 계산에 해당됨
  • 집계 함수 또는 그룹 연산을 사용하여 데이터를 요약하거나 추가적인 인사이트를 제공함
  • 주로 데이터 그룹 전체에 대한 계산에 활용함
    (합계, 평균, 최대값, 최소값 등)

이력 테이블 칼럼 추가

  • 데이터 변경 이력을 저장함으로써 추적 가능성과 데이터 복구를 동시에 확보함
  • 변경된 데이터를 기반으로 과거 상태 분석할 수 있음

PK의 의미적 분리를 위한 칼럼 추가

  • 기본키를 의미적으로 분리하는 기법

데이터 복구를 위한 칼럼 추가

  • 데이터가 손실되거나 삭제된 겨웅 이를 복구할 수 있도록 데이터를 보존하는 칼럼을 추가하는 기법

테이블 반정규화

관계 병합

  • 자주 사용하는 테이블들 간의 관계를 병합함으로써, 조인 연산을 줄이고 데이터 조회 속도를 향상시키는 방법

슈퍼/서브타입 병밥

  • 슈퍼타입(Supertype)과 서브타입(Subtype) 관계로 설게된 테이블을 하나의 테이블로 통합하는 반정규화 기법

  • 슈퍼타입(Supertype)
    공통 속성을 가진 상위 개체

  • 서브타입(Subtype)
    슈퍼타입을 기반으로 추가 속성을 가지는 하위 개체

테이블 분할

  • 테이블 수직 분할과 수평 분할은 데이터베이스에서 테이블을 분할하여 성능 최적화, 관리 효율성 증대, 또는 데이터 분산을 목적으로 사용하는 기법

  • 테이블 수직 분할
    자주 사용되는 속성만 포함한 테이블을 만들어 조회 성능을 향상

  • 테이블 수평 분할
    데이터를 특정 기준(지역, 날짜)으로 나누어서 여러 테이블에 저장하여 각 테이블의 데이터 양을 줄이는 방식

테이블 추가

  • 중복 테이블 추가
    조회 빈도가 높은 데이터를 관리하기 위해 별도의 테이블로 복제하는 기법

  • 통계 테이블 추가
    대규모 데이터에 대해 미리 계산된 요약 정보를 저장하는 테이블을 생성

  • 이력 테이블 추가
    이력 테이블 추가는 데이터 변경 내역이나 시간, 경과에 따른 데이터 상태를 저장하는 별도 테이블으 생성하는 기법

  • 부분 테이블 추가
    하나의 테이블에서 집중적으로 이용되는 칼럼들만을 추출하여 별도의 테이블 생성.
    테이블 수직 분할과 유사하지만, 원본 테이블을 유지하면서 추가함.
    업로드중..

관계 반정규화

중복 관계 추가

  • 중복 관계 추가는 테이블 간의 기존 관계를 단축하기 위해새로운 관계를 추가함.

  • 데이터 조회 시 여러 테이블을 조인해야 하는 상황에서. 중간 단계를 생략하고 필요한 데이터를 직접 연결하여 조회 성능을 개선함.
    업로드중..

profile
Sejin's Journey for Developers

0개의 댓글