Tiny Star

📊DataBase/📈SQL

[🪪SQLD] 1과목 - 데이터 모델링의 이해 : 정규화와 반정규화 (24년 개정 요약)

청크 2024. 2. 13. 18:56

· 정규화 (Normalization)

 -> 데이터의 일관성, 데이터 중복 방지, 데이터 유연성을 위해 데이터를 분해하고 구조화시키는 과정

 

· 정규화의 목적

 1) 중복을 제거하여 저장공간 절약 및 확보

 2) 데이터의 무결성을 보장하고 정확성과 일관성을 유지

 3) 이상현상의 발생 가능성 저하

-> 데이터 입력, 수정, 삭제 성능은 향상, 조회의 성능은 향상되거나 저하

 

· 이상현상 (Anomaly)

 -> 불필요한 데이터 중복으로 릴레이션에 대한 삽입/수정/삭제 연산 수행 시 발생할 수 있는 부작용

 1) 삽입 이상 : 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입

 2) 갱신 이상 : 중복 튜플 중 일부만 변경 시 데이터 불일치의 문제

 3) 삭제 이상 : 튜플 삭제 시 필요한 데이터까지 손실되는 문제

· 정규화 절차 및 종류 (실제로는 제 3정규화까지만 수행)

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

* 함수적 종속성이란 X->Y이면 Y는 X에 함수적으로 종속된 것으로 X가 변하면 Y도 변화하는지 확인

 

 1) 제 1정규화 : 속성의 원자성을 확보하고 기본키를 설정하는 것

 2) 제 2정규화 : 기본키가 2개 이상의 속성으로 이루어진 경우

부분 함수 종속성을 제거(분해) - 기본키가 1개라면 생략가능 단계

 3) 제 3정규화 : 이행 함수 종속성을 제거

 * 이행적 종속이란 기본키를 제외하고 칼럼 간의 종속성이 발생하는 것으로 A -> B, B -> C이면 A -> C가 성립되는 경우

 4) BCNF : 기본키를 제외하고 후보키가 있는 경우,  후보키가 기본키를 종속시키면 분해

 5) 제 4정규화 : 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중값 종속성을 제거

 6) 제 5정규화 : 조인에 의해서 종속성이 발생되는 경우 분해

 

· 정규화의 문제점

 -> 정규화는 조회 (SELECT) 시 조인 (Join)을 사용하게 되는데 이는 CPU와 메모리 소모가 심하여 부하를 유발

 

· 반정규화

 -> 정규화로 인하여 발생하는 문제점을 해결하기 위한 방법

 -> 데이터 중복을 허용하고 조인을 줄여 데이터 베이스의 성능을 향상시키는 방법으로 조회 (SELECT) 속도는 향상 But 데이터 모델의 유연성은 낮아짐

 

· 반정규화를 수행하는 경우

 1) 정규화에 충실하면 종속성, 활용성은 향상되지만 수행속도가 느려지는 경우

 2) 다량의 범위를 자주 처리해야 하는 경우

 3) 특정 범위의 데이터만 자주 처리하는 경우

 4) 요약/집계 정보가 자주 요구되는 경우

 

· 반정규화의 절차

 1) 대상 조사 및 검토 : 데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상을 조사

 2) 다른 방법 검토 : 반정규화 수행 전 다른 방법이 있는지 검토

                       ex) 클러스터링, 뷰, 인덱스 튜닝, 파티션 등 검토

 3) 반정규화 수행 : 테이블, 속성, 관계 등을 반정규화

 

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

 

· 반정규화 기법

 1) 계산된 칼럼 추가 : 배치 프로그램으로 필요한 정보를 미리 계산하고 그 결과를 특정 칼럼에 추가

 2) 테이블 수직 분할 : 하나의 테이블을 두 개 이상의 테이블로 분할 즉, 칼럼을 분할하여 새로운 테이블 생성

 3) 테이블 수평 분할 : 하나의 테이블에 있는 값을 기준으로 분할하는 방법

 4) 테이블 병합

   - 1:1 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킴

   - 1:N 관계의 테이블을 병합하여 성능을 향상시키지만 많은 양의 데이터 중복이 발생

   - 슈퍼 타입과 서브 타입 관계 발생 시 테이블을 통합하여 성능을 향상

 

* 파티션 기법 : 데이터 베이스 내에서 파티션을 사용하여 테이블을 분할, 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어 저장

 [파티션 기법의 기준]

 1) Range Partition : 데이 값의 범위를 기준으로 파티션 수행

 2) List Partition : 특정한 값을 지정하여 파티션 수행

 3) Hash Partition : 해시 함수를 적용하여 파티션 수행

 4) Composite Partition : 범위와 해시를 복합사용해 파티션 수행

 

 [파티션 테이블의 장점]

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

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

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

 

 * Super Type과 Sub Type : 부모와 자식의 관계가 나타남

 ex) 고객엔터티는 개인고객과 법인고객으로 분류되는데,

 이 때 고객엔터티는 슈퍼 타입이고 개인/법인 고객은 서브타입

 [Super Type과 Sub Type의 관계]

 1) 배타적 관계 : 고객이 개인고객이거나 법인고객인 경우

 2) 포괄적 관계 : 고객이 개인고객일 수도 법인고객 일수도 있는 것

 

 [타입 변환 방법]

 1) OneToOne Type : 슈퍼/서브타입을 개별테이블로 도출,  테이블 수가 많아 조인이 많이 발생하고 관리가 어려운 단점

 2) Plus Type : 슈퍼 타입과 서브 타입 테이블로 도출, 조인이 발생하고 관리가 어려움

 3) Single Type : 슈퍼 타입과 서브 타입을 하나의 테이블로 도출, 조인 성능이 좋고 관리가 편하지만 입출력 성능이 나쁨