[정처기 필기] 데이터베이스 정규화, 반정규화, 이상 현상
by 볼빵빵오춘기데이터베이스 정규화
- 함수적 종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정이다.
- 좋은 데이터베이스 스키마를 생성하고 불필요한 데이터의 중복을 방지하여 정보 검색을 용이하게 할 수 있도록 허용한다.
정규화의 목적
- 데이터 구조의 안정성 최대화
- 중복 데이터의 최소화
- 수정 및 삭제 시 이상 현상 최소화
- 테이블 불일치 위험 간소화
이상 현상(Anomaly)
- 릴레이션 조작 시 데이터들이 불필요하게 중복되어 예기치 않게 발생하는 곤란한 현상을 의미한다.
- 종류 : 삽입 이상, 삭제 이상, 갱신 이상
삽입 이상(Insertion Anomaly)
데이터를 삽입할 때 불필요한 데이터가 함께 삽입되는 현상이다.
삭제 이상(Deletion Anomaly)
릴레이션의 한 튜플을 삭제함으로써 연쇄 삭제로 인해 정보의 손실을 발생시키는 현상이다.
갱신 이상(Update Anomaly)
튜플 중에서 일부 속성을 갱신함으로써 정보의 모순성이 발생하는 현상이다.
함수적 종속
- 개체 내에 존재하는 속성 간의 관계를 종속적인 관계로 정리하는 방법이다.
- 데이터 속성들의 의미와 속성 간의 상호 관계로부터 도출되는 제약조건이다.
- 기준값을 결정자(Determinant)라 하고 종속되는 값을 종속자(Dependent)라고 한다.
- 속성 Y는 속성 X에 함수적 종속이라 하고 표현은 X→Y로 표현한다.
- 이때 X를 결정자, Y를 종속자라고 부른다.
부분 함수적 종속
복합 속성(A,B)에 대하여 A→C가 성립할 때이다.
이행 함수적 종속
속성 X,Y,Z가 주어졌을 때 X→Y, Y→Z하면 X→Z가 성립된다는 것이다.
정규화 과정
1정규형
- 어떤 릴레이션에 속한 모든 도메인이 원자값(하나의 항목에는 중복된 값이 입력될 수 없음)만으로 되어 있는 릴레이션이다.
- 하나의 속성만 있어야 하고 반복되는 속성은 별도 테이블로 분리한다.
2정규형
- 1정규형을 만족하고, 릴레이션에 내재된 부분 함수적 종속을 제거한다.
- 기본키가 아닌 애트리뷰트 모두가 기본키에 완전 함수 종속이 되도록 부분 함수적 종속에 해당하는 속성을 별도의 테이블로 분리한다.
3정규형
- 1, 2정규형을 만족하고, 속성 간 이행적 함수 종속을 제거한다.
※ 이행적 함수 종속 : A→B, B→C, A→C
BCNF(보이스/코드) 정규형
- 1, 2, 3 정규형을 만족하고, 결정자가 후보키가 아닌 함수종속이 제거되면 보이스/코드 정규형에 속한다.
- 후보키를 여러 개 가지고 있는 릴레이션에서 발생할 수 있는 이상 현상을 해결하기 위해 3정규형 보다 좀 더 강력한 제약조건을 적용한다.
- 보이스/코드 정규형에 속하는 모든 릴레이션은 3정규형에 속하지만, 3정규형에 속하는 모든 릴레이션이 보이스/코드 정규형에 속하지는 않는다.
4정규형
- 1 , 2, 3, BCNF 정규형을 만족하고, 다치 종속을 제거한다.
5정규형
- 1, 2, 3, BCNF, 4정규형을 만족하고, 후보키를 통하지 않은 조인 종속을 제거한다.
반정규화
정규화를 통하여 정합성과 데이터 무결성이 보장되지만, 테이블의 개수가 증가함에 따라 테이블 간의 조인이 증가하여 조회 성능이 떨어질 수 있는데 이렇게 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능 향상과 개발 및 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법이다.
테이블 분할(파티셔닝)
- 테이블을 여러 부분으로 분할하는 것을 의미한다.
- 대표적인 분산 데이터베이스 분할로 각 타피션은 여러 노드로 분산 배치되어 사용자가 각 노드에서 로컬 트랜잭션을 수행할 수 있다.
- 파티션 각각이 작은 데이터베이스가 되도록 분할하는 방법과 하나의 테이블만 같이 선택된 요소로 분리하는 방법이 있다.
반정규화 - 테이블 추가
중복/ 집계 / 이력 / 부분 / 진행 테이블 추가
반정규화 - 컬럼 반정규화
중복 / 파생 / 이력 / PK에 의한 / 응용 시스템 오작동을 위한 컬럼 추가
'📚 자격증 > 정처기' 카테고리의 다른 글
[정처기 필기] 트랜잭션, 트랜잭션의 특성, 병행제어, 로킹, 타임스탬프 (0) | 2023.07.12 |
---|---|
[정처기 필기] 관계 대수, 관계 해석, SQL, VIEW, 시스템카탈로 (0) | 2023.07.12 |
[정처기 필기] DBMS, 스키마, 데이터베이스 설계, 키의 종류 (0) | 2023.07.12 |
[정처기 필기] 정렬, 검색, 해싱, 파일 편성 방법 (0) | 2023.07.12 |
[정처기 필기] 자료구조, 스택, 큐, 데크, 트리, 이진트리 (0) | 2023.07.12 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기