본문 바로가기

언어/SQL

[기본] SQLD 1과목 2장 공부 정리 (정규화, 반정규화, 분산 DB)

과목Ⅰ. 데이터모델링의 이해

 

2장 데이터 모델과 성능

 

1절 정규화

 

1. 정규화(Normalization)

  : 데이터의 일관성, 중복 최소화, 데이터 유연성 최대화를 위한 방법 (= 데이터를 분해하는 과정)

   - 정규화 수행시 업무에 변화가 발생해도 데이터 모델의 변경을 최소화할 수 있음

 

 <정규화 예시>

데이터를 분해해주어 변화에 유연하게 대처할 수 있다.

 

<정규화 절차>

정규화 절차 설명
제1정규화 기본키 설정 (속성의 원자성 확보 = 속성의 중복값 제거)
제2정규화 부분 함수 종속성 제거
(기본키가 2개 이상)
제3정규화 이행 함수 종속성 제거
(기본키를 제외한 칼럼 간 종속성 제거)
BCNF 복수의 후보키가 있고 후보키가 복합속성이며, 서로 중첩
제4정규화 다중값 종속성 제거 (안 중요)
제5정규화 조인에 의한 종속 분해 (안 중요)

※ 한 개의 속성으로 유일성이 만족되지 않을 경우, 두 개 속성을 조합해 기본키로 만들기도 함

 

※ 정규화는 함수적 종속성을 근거로 함

   : X가 변할 때 Y도 변화한다면, Y는 X에 함수적으로 종속된다고 말함 (이기적 SQLD 이론서 내용임)

  ex) 회원ID가 바뀌면 이름도 바뀜 == 회원ID가 이름을 함수적으로 종속함 == 이름은 회원ID에 함수적으로 종속됨

 

 

 - 제1정규화

 

기본키를 설정해준다. (∴ 기본키가 있다면 적어도 1차정규형은 만족)

 

계좌번호와 회원ID 두 속성을 기본키로 설정


- 제2정규화

 

부분 함수 종속성 제거 (복합 인스턴스에 대해 각 인스턴스의 종속성 중복 제거)

 

오른쪽은 부분 함수 종속성을 제거한 것이고, 그 결과 회원이라는 테이블을 새로 만들어준 것이다.


- 제3정규화

 

이행 함수 종속성 제거 (속성 간 종속 제거)

 

기본키를 제외한 칼럼들 사이에서 함수적 종속성이 발생하는 것을 이행 함수 종속성이라고 한다.

 

이행 함수 종속성이 발생했을 때 제3정규화를 수행한다.

 

기본키를 제외한 칼럼들(Y) 사이에서 함수적 종속성이 발생해서 이를 분해한 것이 관리점 테이블이다.


- BCNF (Boyce-Codd Normal Form)

 

복수의 후보키가 있고, 후보키들이 복합 속성이면서, 서로 중첩될 때 이를 제거해주는 작업을 BCNF라고 한다.

 

 

※ 종속성은 중복으로 판단! X가 같을 때 동일하고, X가 바뀔 때 바뀌는 속성이 종속된 속성임


2절 정규화와 성능

 

1. 정규화의 문제점

 - 데이터 조회 시에 조인을 유발해 CPU와 메모리를 많이 사용

 -> 이러한 성능저하를 해결하기 위해 반정규화 사용


3절 반정규화

 

1. 반정규화

  : 데이터 중복을 허용하고 조인을 줄이는 DB성능 향상 방법

  -> 조회 속도는 향상 but, 데이터모델의 유연성은 낮아짐 (데이터 변동에 대처를 잘 못하게됨)

 

   ∴ 만약, 데이터 무결성(혹은 데이터 유연성)을 원한다면 정규화 수행

 

      데이터 입출력량이 많아서----------┐

      경로가 너무 멀어서 조인으로 인한 ├-- 성능 저하가 발생한다면 -> 반정규화 수행!

      칼럼을 읽을 때 예상되는 ---------- ┘

 

2. 반정규화를 수행하는 경우

  • 수행 속도가 느려지는 경우
  • 다량의 범위를 자주 처리해야 하는 경우
  • 특정 범위의 데이터만 자주 처리하는 경우
  • 요약/집계 정보가 자주 요구되는 경우

<반정규화 절차>

1) 대상 조사 및 검토

2) 다른 방법 검토 -- ex) 클러스터링, 뷰, 인덱스 튜닝, 파티션 등

3) 반정규화 수행

 

※ 클러스터링: 인덱스 정보를 저장할 때 물리적으로 정렬해서 저장하는 방법

                  ∴ 조회 시에 인접블록을 연속적으로 읽기 때문에 성능 향상

 

※ 좋은 모델링의 요건 : 중복 배제, Business Rule, 완전성


3. 반정규화 기법

  • 관계의 반정규화 : 모든 속성을 참조하고자 할 때 사용
  • 테이블 반정규화 : 데이터 무결성에 영향
  • 칼럼 반정규화 : 데이터 무결성에 영향
  • 중복 관계 추가 : 데이터 무결성에 영향 없음
칼럼의 반정규화 기법 내용
중복 칼럼 추가 조인을 감소시키고자 중복된 칼럼 추가
파생칼럼 추가 계산에 의한 성능저하를 예방하고자 미리 값을 계산하여 칼럼(Derived Column)에 보관
이력테이블 칼럼 추가 대량의 이력데이터를 처리할 때, 불특정 날 조회나 최근 값조회 시 발생하는 성능저하를 예방하고자 기능성 칼럼 추가
(ex. 최근값 여부 칼럼, 시작과 종료일자 칼럼 등)
기본키에 의한 칼럼 추가 기본키 안에 데이터가 존재하지만 성능향상을 위해 일반속성으로 포함하는 방법
응용시스템 오작동 처리를 위한 칼럼 추가 업무적 의미는 없지만 오작동 처리를 위한 임시적인 기법

※(주의) 단순하게 업무처리를 위한 칼럼추가는 반정규화가 아님!

 

4. 테이블 병합

 

  • 1:1 관계 테이블 병합 -> 성능 향상
  • 1:N 관계 테이블 병합 -> 성능 향상 but 데이터 중복 발생 多
  • 슈퍼타입과 서브타입 관계 발생할 때 통합 -> 성능 향상

 

※ 슈퍼타입과 서브타입

   : 슈퍼타입은 부모, 서브타입은 자식

   ex) 고객 엔터티 = 슈퍼타입

        개인고객, 법인고객 = 서브타입

 

- 슈퍼타입 및 서브타입 변환 방법

  • OneToOne Type : 슈퍼타입과 서브타입을 개별 테이블로 도출 -> 테이블 수가 많아 조인 발생多, 관리 어려움
  • Plus Type : 슈퍼타입과 서브타입 테이블로 도출 -> 조인 발생 & 관리 어려움
  • Single Type : 슈퍼타입과 서브타입을 하나의 테이블로 도출 -> 조인성능 향상 & 관리가 편리 but 입출력 성능 저하

 

5. 파티션기법

  : DB에 파티션을 사용해 테이블을 분할할 수 있음.

   파티션을 사용하면 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어서 저장.

 

  •  Range Partition : 데이터 값의 범위를 기준으로 파티션 수행 (날짜, 숫자값으로 분리 / 보관 주기에 따라 테이블의 데이터 쉽게 지우는 것이 가능)
  •  List Partition : 특정 값을 지정해 파티션 수행 (주기 삭제기능 X)
  •  Hash Partition : 해시 함수를 적용해 파티션 수행 (지정된 Hash 조건에 따라 테이블 분리 / 주기 삭제 기능 제공)
  •  Composite Partition : Range, Hash를 복합적으로 사용해 파티션 수행

- 파티션 테이블의 장점

 1) 데이터 조회 시 액세스 범위가 줄어들어 성능 향상

 2) 데이터가 분할되어 있어 I/O (Input/Output) 성능 향상

 3) 각 파티션을 독립적으로 백업 및 복구 가능


4절 분산 데이터베이스

 

1. 분산 데이터베이스

  • 중앙집중형 DB

한 대의 물리적 시스템에 DBMS 설치, 사용자가 DBMS에 접속해 사용

  • 분산 DB

    : 물리적으로 떨어진 DB에 네트워크를 연결해서 단일 DB이미지를 보여주고 분산된 작업 처리 수행

    -> 고객은 시스템이 네트워크로 분산됐는지 인식 못하고 자신만의 DB를 사용하는 것처럼 사용

    -> ∴ 투명성이 중요!

 

- 분산 DB의 특징 : 지역 자치성, 빠른 응답속도 & 저렴한 통신비용, 오류의 잠재성 높음, 처리비용 높음

 

<분산 DB의 투명성 종류>

 

- 분할 투명성 : 고객은 하나의 논리적 릴레이션이 사실 여러 단편으로 분할되어 저장됨을 인식할 필요가 없음

- 위치 투명성 : 고객은 데이터가 어느 위치에 있더라도 동일한 명령을 사용해 접근 가능 = 저장 장소 명시가 불필요

- 지역 사상 투명성 : 각 지역 시스템 이름과 무관한 이름 사용 가능 (위치 투명성과 헷갈리지 말 것!)

- 중복 투명성 : DB 객체가 여러 시스템에 중복되어도 고객과는 무관하게 데이터의 일관성 유지

- 장애 투명성 : 지역 시스템 통신망에 이상이 발생해도 데이터 무결성 보장

- 병행 투명성 : 여러 고객의 응용프로그램이 동시에 분산 DB에 대한 트랜잭션을 수행해도 결과에 이상이 없음

 

2. 분산 DB 장점과 단점

장점 단점
- DB 신뢰성, 가용성이 높음
- 병렬처리 수행으로 빠른 응답
- 시스템 용량 확장이 쉬움
- 통신비용이 저렴
- 여러 네트워크가 분산되어 관리와 통제가 어려움
- 데이터 무결성 관리의 어려움 (오류 잠재성 높음)
- 보안관리 어려움
- DB 설계가 복잡하고 처리비용이 높음

데이터 모델의 성능을 고려하는 방법

- 이력 모델 조정, 기본키/외래키 조정, 슈퍼타입/서브타입 조정 등

- DB 용량 산정

- DB의 트랜잭션 유형 파악