자격증

[SQLD] 2. 데이터 모델과 성능

Rosie_dev 2021. 11. 18. 13:47

성능을 고려한 데이터 모델링

1. 데이터 모델링을 할 때 정규화를 정확하게 수행한다.

2. 데이터베이스 용량산정을 수행한다.

3. 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.

4. 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.

5. 이력 모델의 조정, PK/FK 조정, 슈퍼차입/서브타입 조정 등을 수행한다.

6. 성능관점에서 데이터 모델을 검증한다.

 

데이터베이스 정규화

불필요한 데이터를 제거하고 테이블 구성을 논리적, 직관적으로 하기 위한 방법이 바로 정규화이다. 정규화는 1차 정규화, 2차 정규화, 3차 정규화, BCNF, 4차 정규화, 5차 정규화로 나눠지는데 아래에 각각에 대해 설명해보고자 한다.

 

먼저 1차 정규화는 각 로우마다 컬럼을 1개씩, 원자값 갖는 것을 말한다. 예를 들어, 한 사원의 소속이 영업, 인사와 같이 2개가 있는 경우는 로우를 분리해서 2개로 만드는 것이다.

컬럼 단위에서 중복된 경우도 1차 정규화 대상이 된다.

 

2차 정규화는 완전 함수 종속을 만족시키는 것이다. 반대로 부분적 함수 종속을 제거하는 것이다. 사원이 가질 수 있는 속성은 이름, 나이, 직무, 직책 등이 있는데, 여기서 이름을 PK로 가지고 간다면, 다른 속성들이 있으므로 완전함수 종속 관계를 만족시키지 못한다. 따라서 테이블을 분리해서 각각의 속성을 한 개씩 갖는 테이블로 만드는 것이다.

 

3차 정규화는 이행 함수 종속을 없애는 것을 말한다. 즉, 여러 속성 가운데 한 가지 속성으로 인해 다른 속성의 값이 결정되는 경우로 중복된 데이터가 발생할 수 있다면 이를 다른 테이블로 분리하는 것이다. 예를 들어 모든 사원은 직책에 따라 동일한 연봉을 갖는다고 가정하자. 여기서 연봉은 직책 속성에 따라 규정되는 값으로 사원 테이블에는 직책만 부여하고, 다른 테이블로 직책과 연봉을 분리시키는 것이다.

 

BCNF, Boyce and Codd Normal Form 은 3차 정규형을 만족하며, 모든 결정자가 후보키 집합에 속한 정규형이다.

여기서 결정자란 위의 3차 정규형의 예에서 들은 것과 같이 하나의 속성을 결정짓는 것으로 연봉을 결정하는 직책을 의미한다. 후보키는 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합으로 기본키로 사용될 수 있는 속성이다. 기본키로 선택되지 못한 후보키는 대체키라고 불린다.

즉, 모든 결정자가 후보키 집합에 속하지 않는 경우는 일반 컬럼이 후보키를 결정하는 경우로, 학생 테이블에서 학생이 수강하는 과목과 그 과목을 결정하는 교수 속성이 같은 튜플 내에 존재하는 경우와 같다. 따라서 테이블을 분리해서 생성할 필요가 있다.

 

주로 1~3차 정규형을 묻는 문제가 많이 출제되고 있는 것 같다. 그 외 정규화는 다음과 같다.

4차 정규화는 3차 정규형을 만족하는 상황에서 릴레이션이 다치 종속성을 보이는 속성을 가지고 있을 경우 이를 제거하기 위해 테이블을 분리하는 것을 말한다.

릴레이션에 존재하는 모든 조인 종속이 릴레이션 후보키를 통해서만 성립된다면 릴레이션 R은 제5정규형에 속한다고 볼 수 있다.

 

테이블의 반정규화

테이블 병합, 테이블 분할, 테이블 추가

 

칼럼의 반정규화

중복칼럼 추가, 파생칼럼 추가, 이력테이블 칼럼 추가, PK에 의한 칼럼 추가, 응용시스템 오작동을 위한 칼럼 추가

 

로우체이닝

한 로우의 데이터 크기가 블록의 데이터 저장 공간보다 클 때 발생하는 현상. 데이터 크기가 블록의 데이터 저장공간보다 클 때 한 로우를 여러 개의 조각으로 분리하고 각 조각을 다른 블록에 저장한다.

 

로우체이닝의 발생으로 조회성능 저하가 발생할 수 있다. 그래서 트랜잭션이 접근하는 칼럼유형을 분석하고 1:1로 테이블을 분리하면 디스크 I/O가 줄어 조회 성능을 향상시킬 수 있다.

 

파티셔닝

데이터베이스의 분할.

하나의 테이블에 많은 양의 데이터가 저장되면 인덱스를 추가하고 테이블을 몇 개로 쪼개도 성능이 저하되는 경우가 있다. 이 때 논리적으로 하나의 테이블이지만 물리적으로 여러 개의 테이블로 분리하여 데이터 액세스도 향상시키고, 데이터 관리방법도 개선할 수 있도록 테이블에 적용하는 기법.

 

수평분할의 예는 성별에 따라 고객데이터를 남, 여로 나누는 것이다.

수직분할의 예는 최근 1년치 자료를 따로 테이블로 나누어 검색 효율을 높이는 것이다.

 

UNION / UNION ALL

UNION은 중복되는 로우는 제거된 채 릴레이션이 합쳐진다. 반면, UNION ALL은 중복에도 상관없이 모든 로우가 출력된다. UNION 연산자를 사용할 때에는 각 쿼리에 컬럼 갯수 및 명칭, 데이터타입을 맞춰서 사용해야 한다.

 

PK 순서 결정기준

쿼리문의 WHERE 값 중 '=' 으로 들어온 조건에 해당하는 칼럼이 인덱스의 가장 앞쪽에 위치할 때 인덱스의 이용 효율이 가장 높다고 할 수 있다.

 

 


데이터모델링의 3가지 요소 : 속성(Attribute)에 대한 이해

정규화(Normalization) 개념과 정규화 과정(4NF, 5NF)

DataBase-start(정규화) : 네이버 블로그

[DATABASE] 데이터베이스 정규화 1NF, 2NF, 3NF, BCNF, 4NF, 5NF 알아보기

데이터베이스 정규화 - 1NF, 2NF, 3NF

오라클의 테이블/로우체이닝/로우 마이그레이션

데이터베이스 분할 - 위키백과, 우리 모두의 백과사전

[Oracle] 오라클 UNION, UNION ALL 사용법 (쿼리 결과 합치기)

 

알라딘: SQL 자격검정 실전문제

 

SQL 자격검정 실전문제

SQL 자격검정 실전문제는 국가공인 SQL 전문가 및 국가공인 SQL 개발자 자격시험 대비 수험서로 SQL 전문가 가이드에서 다루고 있는 데이터 모델링의 이해, SQL기본 및 활용, SQL 고급 활용 및 튜닝 등

www.aladin.co.kr

 

댓글