성능을 고려한 데이터 모델링
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] 데이터베이스 정규화 1NF, 2NF, 3NF, BCNF, 4NF, 5NF 알아보기
[Oracle] 오라클 UNION, UNION ALL 사용법 (쿼리 결과 합치기)
'자격증' 카테고리의 다른 글
[정보처리기사 실기] 프로토콜 (0) | 2022.03.27 |
---|---|
[SQLD] 1. SQL 기본 (0) | 2021.11.18 |
[SQLD] 3. 데이터 모델링의 이해 (0) | 2021.11.15 |
[정보처리기사 실기] 인터페이스 예외처리, 슈퍼타입과 서브타입, 데이터 흐름도, 정규화, 반정규화, 파티션, 코드, 미들웨어 (0) | 2021.10.07 |
[정보처리기사 실기] SW 개발 보안, 객체지향 프로그래밍, 프로그래밍 언어의 종류, 클라우딩 컴퓨터, 인터랙션 (0) | 2021.10.06 |
- 호스팅영역
- 정보처리기사 필기
- 오늘의코딩
- jdbc
- 독서후기
- putty
- intellij
- 개발도서
- 노마드코더
- 북클럽
- 정보처리기사 실기
- gradle build
- git연동
- IT 5분 잡학사전
- 기술블로그
- JIRA
- 배포
- ubuntu
- filezila
- 웹페이지만들기
- gradle
- AWS
- 노개북
- EC2
- SQLD
- spring
- 정보처리기사
- 실용주의프로그래머
- LifecycleException
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |