[정보처리기사][데이터 입출력 구현] 함수적 종속 그리고 정규화 / 반 정규화

컴퓨터/정보처리기사

728x90
반응형

함수적 종속 - Functional Dependency

어떤 테이블에서 속성 A, B가 있을 때 속성 A의 값 각각에 대해 시간에 관계없이 항상 속성 B의 값이 오직 하나만 연관되어 있을 때 속성 A가 B를 함수적으로 결정한다 하여 함수적 종속이라 합니다.

 

위처럼 함수적 종속 관계를 아래와 같이 표기하며 A를 결정자 B를 종속자라고 합니다.

 

A → B

 

예시

아래와 같은 테이블이 존재한다고 가정합시다.

학번 이름 학년 학과
101 홍길동 1 체육과
102 이순신 1 경호과
202 김철수 2 자동차과
422 윤봉길 4 화학과

 

학번이 이름,학년,학과를 함수적으로 결정하고 있습니다.

즉, 시간과 관계없이 학번속성의 값에 대해 이름, 학년, 학과가 오직 하나만 연관되어 있기 때문입니다.

이를 표기하면 아래와 같습니다.

 

학번 → 이름, 학년, 학과

 

함수적 종속의 종류

함수적 종속은 몇가지 특징에 따라 구분할 수 있습니다.

 

1. 완전 함수적 종속 - Full Functional Dependency

어떤 테이블에서 속성 B가 다른 속성(집합)A에 전체에 함수적 종속을 만족하는 경우 완전 함수적 종속이라고 합니다.

 

2. 부분 함수적 종속 - Partial Functional Dependency

어떤 테이블에서 속성 B가 다른 속성(집합)A에 전체에 함수적 종속을 만족하면서 속성(집합)A의 부분 속성에 대해서만도 함수적 종속이 성립할 때 부분 함수적 종속이라고 합니다.

 

3. 이행적 함수적 종속 - Transitive Functional Dependency

A → B고 B → C일때 A → C를 만족하는 관계

즉, A는 B와 C를 함수적으로 결정하고 B는 C를 함수적으로 결정하는 관계

 

정규화 - Normalization

정규화는 테이블과 안의 속성들의 상호작용으로 인한 이상(Anomaly)을 방지하기 위해 테이블을 정보손실 없이 분해하는 과정을 말합니다.

 

 

정규화 과정

  1. 제 1정규형 - 속성의 도메인이 원자값화 시키는 정규화과정
  2. 제2 정규형 - 완전 함수적 종속을 만족시키는 과정 (부분 종속성 제거)
  3. 제3 정규형 - 이행적 함수적 종속을 제거하는 과정
  4. BCNF - 모든 결정자를 후보키화 (결정자이면서 후보키가 아닌 것을 제거)
  5. 제4 정규형 - 다치 종속 제거
  6. 제5 정규형 - 조인 종속을 이용, (무손실 조인이 가능하게)

다치 종속(다중 값 종속) - 종속값이 하나가 아닌 여러 값을 결정하는 종속성

조인 종속 - 테이블을 분해하고 다시 합쳤을 때 원상태를 만족하는 종속성

 

반정규화 - Denormalization

의도적으로 정규화를 위배하는 행위

정규화는 기본적으로 데이터베이스의 품질을 보증하고 성능을 보장할 수 있으나, 사용 환경에 따라 시스템의 성능이 저하되거나 관리 효율성이 떨어질 수 있습니다. 이 때문에 반정규화를 종종 하곤 합니다.

 

1. 테이블 통합

사용 환경상 두 개의 테이블이 조인이 많은 경우 하나의 테이블로 통합하여 사용하는 반정규화 

 

2. 테이블 분할

테이블의 튜플의 수, 속성의 수등 테이블이 너무 클 경우 사용하는 반정규화

 

  • 수평 분할 (튜플 분할)
  • 수직 분할 (속성 분할)

3. 테이블 추가

작업 효율 향상을 위해 중복되는 데이터가 존재하는 테이블을 의도적으로 생성하는 반정규화

  • 집계 테이블
  • 진행 테이블
  • 특정 부분만을 포함하는 테이블

4. 중복 속성 추가

작업 효율 향상을 위해 중복되는 데이터가 존재하는 속성을 의도적으로 생성하는 반정규화

  • 사용 경우
    • 조인이 자주 발생하는 속성
    • 접근 경로가 복잡한 속성
    • 액세스 조건으로 자주 사용되는 속성
    • 기본키의 형태가 적절하지 않거나 여러 개의 속성으로 구성된 경우

 

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :