SQLD 실전 문제 : 데이터 모델과 성능
문제 1
Q. 다음 중 성능 데이터 모델링에 대한 설명으로 가장 부적절한 것은?
① 성능이 저하된 결과를 대상으로 데이터 모델 보다는 문제 발생 시점의 SQL을 중심으로 집중하여 튜닝을 한다.
② 데이터의 증가가 빠를수록 성능 저하에 따른 성능 개선 비용은 증가한다.
③ 데이터 모델은 성능을 튜닝하면서 변경이 될 수 있는 특징이 있다.
④ 분석/설계 단계에서 성능을 고려한 데이터 모델링을 수행할 경우, 성능 저하에 따른 Rework 비용을 최소화 할 수 있는 기회를 가지게 된다.
정답 : ①
해설 : 문제 발생 시점의 SQL을 중심으로 집중 튜닝하는 것은 성능 데이터 모델링과 무관한 내용이다.
※ 성능 데이터 모델링이란?
데이터베이스 성능 향상을 목적으로 설계 단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것
문제 2
Q. 아래 설명을 읽고 다음 ( ㄱ ) 안에 들어갈 단어를 작성하시오.
첫 번째, 데이터 모델링을 할 때 정규화를 정확하게 수행한다.
두 번째, 데이터베이스 용량 산정을 수행한다.
세 번째, 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
네 번째, 용량과 트랜잭션의 유형에 따라 ( ㄱ ) 를 수행한다.
다섯 번째, 이력 모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등을 수행한다.
정답 : 반정규화(역정규화)
해설 : 데이터 모델링 단계에서 성능을 충분히 고려하기 위한 성능 데이터 모델링 수행 절차에 대한 설명이다.
문제 3
Q. 다음 중 아래에서 성능을 고려한 데이터 모델링의 순서로 가장 적절한 것은?
가. 데이터 모델링을 할 때 정규화를 정확하게 수행한다.
나. 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
다. 데이터베이스 용량 산정을 수행한다.
라. 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
마. 성능 관점에서 데이터 모델을 검증한다.
바. 이력 모델의 조정, PK/FK 조정, 슈퍼 타입/서브 타입 조정 등을 수행한다.
① 가-나-다-라-마-바
② 가-나-다-라-바-마
③ 가-다-라-바-나-마
④ 가-다-라-나-바-마
정답 : ④
해설 : 성능을 고려한 데이터 모델링은 정규화를 수행한 이후에 용량 산정과 트랜잭션 유형을 파악하여 반정규화를 수행한다. 또한 PK/FK 등을 조정하여 인덱스의 특징을 반영한 데이터 모델로 만들고, 이후에 데이터 모델을 검증하는 방법으로 전개한다.
문제 4
Q. 다음 중 성능 데이터 모델링을 할 때 고려사항으로 가장 부적절한 것은?
① 데이터 모델링의 정규화는 항상 조회 성능 저하를 나타내므로 반정규화 관점에서만 성능을 고려하여 설계하도록 한다.
② 용량 산정은 전체적인 데이터베이스에 발생되는 트랜잭션의 유형과 양을 분석하는 자료가 되므로, 성능 데이터 모델링을 할 때 중요한 작업이 될 수 있다.
③ 물리적인 데이터 모델링을 할 때 PK/FK의 칼럼의 순서 조정, FK 인덱스 생성 등은 성능 향상을 위한 데이터 모델링 작업에 중요한 요소가 된다.
④ 이력 데이터는 시간에 따라 반복적으로 발생이 되기 때문에 대량 데이터일 가능성이 높아 특별히 성능을 고려하여 칼럼 등을 추가하도록 설계해야 한다.
정답 : ①
해설 : 정규화가 항상 조회 성능을 저하시킨다는 것은 잘못된 생각이며, 기본적으로 중복된 데이터를 제거함으로써 조회 성능을 향상시킬 수 있음을 알아야 한다.
문제 5
Q. 아래와 같은 보관금원장 엔티티에서 관서에 대한 정보가 반정규화 되어 있기 때문에 관서정보를 조회할 때 성능 저하가 발생하고 있다. 이 엔티티에 대해 몇 차 정규화가 필요한 지와 분리된 스키마 구조를 가장 바르게 짝지은 것은?
함수종속성(FD) :
{관서번호, 납부자번호} → {직급명, 통신번호}
{관서번호} → {관리점번호, 관서명, 상태, 관서등록일자}
① 2차 정규화 - 정규화테이블{관서번호, 납부자번호, 관리점번호, 관서명, 상태, 관서등록일자}
② 3차 정규화 - 정규화테이블{관서번호, 납부자번호, 관리점번호, 관서명, 상태, 관서등록일자}
③ 2차 정규화 - 정규화테이블{관서번호, 관리점번호, 관서명, 상태, 관서등록일자}
④ 3차 정규화 - 정규화테이블{관서번호, 관리점번호, 관서명, 상태, 관서등록일자}
정답 : ③
해설 : 함수 종속성의 규칙에 따라 {관서번호} → {관리점번호, 관서명, 상태, 관서등록일자}인 관서번호가 PK인 엔티티가 2차 정규화로 분리되어야 한다.
문제 6
Q. 다음 중 아래 '일자별매각물건' 엔티티에 대한 설명으로 가장 적절한 것은?
① 1차 정규화가 필요한 엔티티로서 매각기일과 일자별매각물건으로 1:M 관계가 될 수 있다.
② 1차 정규화가 필요한 엔티티로서 매각기일과 일자별매각물건으로 1:1 관계가 될 수 있다.
③ 2차 정규화가 필요한 엔티티로서 매각기일과 일자별매각물건으로 1:M 관계가 될 수 있다.
④ 2차 정규화가 필요한 엔티티로서 매각기일과 일자별매각물건으로 1:1 관계가 될 수 있다.
정답 : ③
해설 : 매각기일은 일자별로 매각이 시행되는 장소와 시간을 의미하는 것으로, 일자별매각물건 엔티티의 매각시간, 매각장소 속성은 2개의 주식별자 속성 중 매각일자에만 종속되기 때문에 2차 정규화 대상이 된다. 그러므로 매각일자를 주식별자로 하고 매각시간과 매각장소 속성을 포함하는 매각기일 엔티티를 독립시킨다. 이때 매각기일 엔티티는 일자별매각물건의 주식별자 중 일부로부터 독립했기 때문에 매각기일과 일자별매각물건은 1:M 관계로 연결된다.
문제 7
Q. 아래의 데이터 모델처럼 동일한 유형의 속성이 컬럼 단위로 반복되는 경우가 실제 프로젝트를 하면서 많이 발생 될 수 있다. 다음 중 아래와 같이 전제조건이 있을 때 테이블에서 나타날 수 있는 현상으로 가장 적절한 것은?
전제조건 : 유형기능분류코드에 해당하는 속성들은 분포도가 양호하며, SQL Where절에서 각각의 값이 상수값으로 조건 입력될 수 있는 특징을 가진다.
① 조회 조건이 유형기능분류코드에 따라 반복되는 그룹이 칼럼 단위로 되어 있으므로 제 1정규형이라고 할 수 있다.
② 유형기능분류코드에 대해 Where절에 조건으로 들어오는 값이 있으므로 PK와 이에 대한 Index만 있으면 SQL 문장은 빠르게 수행될 수 있다고 할 수 있다.
③ 유형기능분류코드가 일반 속성 안에서 반복적으로 속성이 구분되어 있기 때문에 이전 종속을 수행해야 하는 제 2정규형이라 할 수 있다.
④ 유형기능분류코드 각각에 대하여 개별 Index를 모두 생성할 경우 입력, 수정, 삭제 때 성능이 저하되므로 제1차 정규화를 수행한 후 인덱스를 적용하는 것이 좋다.
정답 : ④
해설 : 칼럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성을 위배한 제1차 정규화 대상이 된다. 이와 같은 반복적인 속성 나열 형태에서는 각 속성에 대해 'OR' 연산자로 연결 된 조건들이 사용되는데, 이 때 어느 하나의 속성이라도 인덱스가 정의되어 있지 않게 되면 'OR'로 연결된 모든 조건절들이 인덱스를 사용하지 않고 한 번의 전체 데이터 스캔으로 처리되게 되어 성능 저하가 나타날 수 있게 되며, 모든 반복 속성에 인덱스를 생성하게 되면 검색 속도는 좋아지겠지만 반대급부적으로 너무 많은 인덱스로 인해 입력, 수정, 삭제의 성능이 저하되므로 1차 정규화를 통해서 자연스럽게 문제가 해결될 수 있도록 해야 한다.
문제 8
Q. 다음 중 아래 '일재고' 엔티티에 대한 설명으로 가장 적절한 것은?
① 1차 정규화가 필요한 엔티티로서 일재고와 일재고상세로 1:M의 관계가 될 수 있다.
② 1차 정규화가 필요한 엔티티로서 일재고와 일재고상세로 1:1의 관계가 될 수 있다.
③ 2차 정규화가 필요한 엔티티로서 일재고와 일재고상세로 1:M의 관계가 될 수 있다.
④ 2차 정규화가 필요한 엔티티로서 일재고와 일재고상세로 1:1의 관계가 될 수 있다.
정답 : ①
해설 : 컬럼 단위에서 중복된 경우도 1차 정규화의 대상이 된다. 이에 대한 분리는 1:M의 관계로 2개의 엔티티로 분리된다.
문제 9
Q. 다음 중 아래와 같이 수강지도 엔티티를 만들었을 때 이에 해당하는 정규형과 정규화의 대상으로 가장 바르게 짝지어진 것은?
함수종속성(FD)
1. 학번 || 과목번호 → 성적
2. 학번 → 지도교수명
3. 학번 → 학과명
① 1차 정규형 - 2차 정규화 대상
② 2차 정규형 - 3차 정규화 대상
③ 3차 정규형 - 보이스코드 정규화 대상
④ 보이스코드 정규형 - 4차 정규화 대상
정답 : ①
해설 : PK에 대해 반복이 되는 그룹(Repeating)이 존재하지 않으므로 1차 정규형이라고 할 수 있으며, 부분 함수 종속의 규칙을 가지고 있으므로 2차 정규형이라고 할 수 없다. 결국 2차 정규화의 대상이 되는 엔티티임을 알 수 있다.
※ 중복 속성에 대한 분리가 1차 정규화의 대상이 되며, 행(로우) 단위의 중복도 1차 정규화의 대상이 되지만, 열(칼럼) 단위로 중복이 되는 경우도 1차 정규화의 대상이다.
문제 10
Q. 다음 중 데이터 모델에 대한 반정규화를 고려할 때 판단 요소에 대한 설명으로 가장 적절한 것은?
① 반정규화 정보에 대한 재현의 적시성으로 판단한다. 예를 들어 빌링의 잔액(Balance)은 다수 테이블에 대한 다량의 조인이 불가피하므로 데이터 제공의 적시성 확보를 위한 필수 반정규화 대상 정보이다.
② 탐색 대상 데이터의 크기로 판단한다. 왜냐하면 다량 데이터에 대한 인덱스를 활용한 탐색은 Random 처리의 특성으로 성능 저하가 불가하다.
③ RDBMS는 현재 레코드 기준으로 이전 또는 이후 위치의 레코드에 대한 접근이 원천적으로 불가능하므로 반정규화를 하지 않으면 해당 정보에 대한 데이터 접근 자체가 불가능하다.
④ 반정규화 테이블은 집계 테이블에 국한하여 적용하도록 한다.
정답 : ①
해설 :
- 다량 데이터 탐색의 경우 인덱스가 아닌 파티션 및 데이터 클러스터링 등의 다양한 물리 저장 기법을 활용하여 성능 개선을 유도할 수 있다. 다만, 하나의 결과셋을 추출하기 위해 다량의 데이터를 탐색하는 처리가 반복적으로 빈번하게 발생한다면 이때는 반정규화를 고려하는 것이 좋다.
- 이전 또는 이후 위치의 레코드에 대한 탐색은 윈도우 함수(Window Function)으로 접근이 가능하다.
- 집계 테이블 이외에도 다양한 유형(다수 테이블의 키 연결 테이블 등)에 대하여 반정규화 테이블 적용이 필요할 수 있다.
※ 반정규화(Denormalization)
- 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능 향상과 개발(Development)과 운영(Manipulation)의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법
- 데이터를 중복하여 성능을 향상시키기 위한 기법
- 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미한다.
- 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O 량이 많아서 성능이 저하되거나, 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되거나, 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다.
문제 11
Q. 다음 중 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 칼럼들을 별도로 모아놓는 반정규화 기법으로 가장 적절한 것은?
① 칼럼 추가 - 부분 칼럼 추가
② 칼럼 추가 - 중복 칼럼 추가
③ 테이블 추가 - 중복 테이블 추가
④ 테이블 추가 - 부분 테이블 추가
정답 : ④
해설 : 반정규화의 기법은 테이블, 속성, 관계에 대해서 반정규화를 적용할 수 있으며, 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 칼럼들을 별도로 모아 놓는 반정규화 기법은 테이블 추가 반정규화 기법 중에서 부분 테이블 추가에 해당한다.
※ 테이블의 반정규화
기법 분류 | 반정규화 기법 |
테이블 병합 | 1:1 관계 테이블 병합 |
1:M 관계 테이블 병합 | |
슈퍼/서브타입 테이블 병합 | |
테이블 분할 | 수직 분할 |
수평 분할 | |
테이블 추가 | 중복 테이블 추가 |
통계 테이블 추가 | |
이력 테이블 추가 | |
부분 테이블 추가 |
※ 칼럼의 반정규화
반정규화 기법 |
중복 칼럼 추가 |
파생 칼럼 추가 |
이력 테이블 칼럼 추가 |
PK에 의한 칼럼 추가 |
응용 시스템 오작동을 위한 칼럼 추가 |
문제 12
Q. 다음 중 칼럼에 대한 반정규화 기법으로 가장 부적절한 것은?
① 중복 칼럼을 추가. - 조인 감소를 위해 여러 테이블에 동일한 칼럼을 갖도록 한다.
② 파생 칼럼을 추가한다. - 조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 갖도록 한다.
③ FK에 대한 속성을 추가한다. - FK 관계에 해당하는 속성을 추가하여 조인 성능을 높인다.
④ 이력 테이블에 기능 칼럼을 추가한다. - 최신 값을 처리하는 이력의 특성을 고려하여 기능성 칼럼을 추가한다.
정답 : ③
해설 : FK에 대한 속성 추가는 반정규화 기법이라기 보다는 데이터 모델링에서 관계를 연결할 때 나타나는 자연스러운 현상이다.
※ 반정규화 절차
1. 반정규화 대상 조사
- 범위 처리 빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수
2. 다른 방법 유도 검토
- 뷰(VIEW) 테이블
- 클러스터링 적용
- 인덱스의 조정
- 응용 애플리케이션
3. 반정규화 적용
- 테이블 반정규화
- 속성의 반정규화
- 관계의 반정규화
문제 13
Q. 다음 중 아래의 주문, 주문목록, 제품에 대한 데이터 모델과 이를 이용하여 데이터를 조회하는 SQL문에서 조회를 빠르게 수행하기 위한 반정규화 방법으로 적절한 것은?
SELECT A.주문번호, SUM(C, 단가) FROM 주문 A, 주문목록 B, 제품 C WHERE A.주문번호 = '2015-02-001' AND A.주문번호 = B.주문번호 AND B.제품번호 = C.제품번호 GROUP BY A.주문번호
① 제품 엔티티에 단가를 합한 계산된 칼럼을 추가하도록 한다.
② 주문목록 엔티티에 단가를 합한 계산된 칼럼을 추가하도록 한다.
③ 주문 엔티티에 단가를 합한 계산된 칼럼을 추가하도록 한다.
④ 제품 엔티티에 최근값 여부에 대한 칼럼을 추가하도록 한다.
정답 : ③
해설 : 제품 엔티티에 단가를 주문번호별로 합하는 것은 해당 제품이 여러 주문에 포함될 수 있기 때문에 특정 주문번호만의 단가 합계금액을 갖고 있을 수 없고, 주문목록 엔티티에 주문번호별 단가 합계 금액을 추가하게 되면 하나의 주문에 포함된 제품번호마다 동일한 합계 금액을 반복적으로 저장해야 해서 일관성 문제가 발생할 수 있다. 또한 제품 엔티티에 최근값 여부 칼럼을 추가하는 것은 단가 합계 금액을 빠르게 얻기 위한 반정규화와 무관한 조치이다. 그러므로 주문 엔티티에 전체를 통합한 계산된 칼럼을 추가하는 것이 한번에 데이터를 조회하는 방법이 되므로 가장 효과적인 반정규화 기법이다.
문제 14
Q. 다음 중 아래 데이터 모델에 대한 설명으로 가장 부적절한 것은?
- 공급자의 데이터는 1000만건 이상의 대량 데이터를 가진 테이블임.
- 전화번호, 메일주소, 위치는 자주 변경이 될 수 있으며, 데이터 조회를 할 때는 항상 최근에 변경된 값을 조회하게 됨.
① 공급자별로 최근에 변경된 전화번호, 메일주소, 위치와 공급자 이름을 같이 조회할 때 이 값들을 공급자 테이블에 반정규화로 갖고 있는 경우에 비해 조회 성능이 저하되지 않는다.
② 데이터를 조회할 때 과도한 조인으로 인해 조회 성능이 저하될 수 있으므로 공급자 테이블에 가장 빈번하게 조회되는 값인 최근 변경값에 해당하는 전화번호, 메일주소, 위치를 반정규화하여 조회 성능을 향상시킬 수 있다.
③ 전화번호, 메일주소, 위치에 대한 가장 최근에 변경된 값을 알 수 있도록 최신여부 라는 속성을 추가함으로써 최근 값을 찾기 위한 조회 성능 저하를 예방할 수 있다.
④ 조회 성능을 위해서는 하나의 테이블로 통합하여 전화번호, 메일주소, 위치 등이 변경될 경우 전체 속성이 계속 발생되는 이력의 형태로 설계될 수 있다. 이럴 경우 조회에 대한 성능은 향상이 되나, 과도한 데이터가 한 테이블에 발생하게 되어 용량이 너무 커지는 단점이 있다.
정답 : ①
해설 : 최근에 변경된 값만을 조회할 경우 과도한 조인으로 인해 성능이 저하되어 나타나게 된다.
문제 15
Q. 다음 중 칼럼수가 많은 테이블에 대한 설명으로 가장 적절한 것은?
① 한 테이블에 많은 칼럼을 가지고 있으면 조인을 발생되지 않아 여러개 테이블일 때에 비해 성능이 항상 우수하다고 할 수 있다.
② 로우 체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우 조회 성능 저하가 발생할 수 있다. 한 테이블 내에서 칼럼의 위치를 조정하면 디스크 I/O가 줄어들어 조회 성능을 향상시킬 수 있다.
③ 로우 체이닝이 발생할 정도로 한 테이블 많은 칼럼들이 존재할 경우 조회 성능 저하가 발생할 수 있다. 트랜잭션이 접근하는 칼럼 유형을 분석하여 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 조회 성능을 향상시킬 수 있다.
④ 로우 체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우 조회 성능 저하가 발생할 수 있다. 그러나 이를 분리할 경우 조인으로 인한 성능 저하가 더 심하게 나타날 수 있으므로 감수하는 것이 좋다.
정답 : ③
해설 : 한 테이블에 많은 칼럼들이 존재할 경우 데이터가 물리적으로 저장되는 디스크 상에 넓게 분포할 가능성이 커지게 되어 디스크 I/O가 대량으로 발생할 수 있고 이로 인해 성능이 저하될 수 있다. 따라서 트랜잭션이 접근하는 칼럼 유형을 분석해서 자주 접근하는 칼럼들과 상대적으로 접근 빈도가 낮은 칼럼들을 구분하여 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 성능을 향상시킬 수 있다.
※ 반정규화의 대상에 대해 다른 방법으로 처리
- 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(VIEW)를 사용하면 이를 해결할 수도 있다.
- 대량의 데이터 처리나 부분 처리에 의해 성능이 저하되는 경우에 클러스터링을 적용하거나 인덱스를 조정함으로써 성능을 향상시킬 수 있다.
- 대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리할 수 있다. 즉 파티셔닝 기법(Partitioning)이 적용되어 성능 저하를 방지할 수 있다.
- 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상시킬 수 있다.
문제 16
Q. 아래 설명에서 데이터 액세스 성능을 향상시키기 위해 적용하는 방법에 대해서 ( ㄱ )을 채우시오.
하나의 테이블에 많은 양의 데이터가 저장되면 인덱스를 추가하고 테이블을 몇 개로 쪼개도 성능이 저하되는 경우가 있다. 이때 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 액세스 성능도 향상시키고, 데이터 관리 방법도 개선할 수 있도록 테이블에 적용하는 기법을 ( ㄱ ) 이라고 한다.
정답 : 파티셔닝(Partitioning)
문제 17
Q. 다음 중 아래 데이터 모델과 SQL문에 대해 개선해야 할 사항에 대한 설명으로 가장 적절한 것은?
SELECT 긴급사건번호, 사건명 FROM 긴급사전 WHERE 발생일시 = '20150905' UNION ALL SELECT 특수사건번호, 사건명 FROM 특수사건 WHERE 발생일시 = '20150905' UNION ALL SELECT 일반사건번호, 사건명 FROM 일반사건 WHERE 발생일시 = '20150905'
※ 전제 조건 : 위 세 테이블은 함께 조회하는 경우가 대부분이고 아직 시스템을 오픈하지 않았다.
① UNION ALL 로 조회하면 정렬로 인한 성능이 저하되므로 UNION으로 조합하여 조회한다.
② 긴급사건, 특수사건, 일반사건을 하나의 테이블로 통합하고 PK를 사전분류코드 + 사건번호로 조합하여 구성하도록 한다.
③ 긴급사건, 특수사건, 일반사건 테이블을 개별로 유지하되 PK에 사건분류코드를 포함하도록 한다.
④ 세 개의 테이블을 그대로 유지하되 반정규화된 형태의 통합 테이블을 하나 더 생성하여 조회의 성능을 향상하도록 한다.
정답 : ②
해설 : 개별 테이블을 모두 조회하는 트랜잭션이 대부분이라는 가정이 있으므로 UNION/UNION ALL 할 경우 개별 조회에 따른 시간 소요와 이것을 조합하는 성능 저하가 발생된다. 따라서 하나의 테이블로 통합하도록 하고 대신 PK 체계나 일반 속성에 각 사건을 구분할 수 있도록 구분자를 부여한다.
※ 슈퍼/서브 타입 데이터 모델의 변환 기술
- 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성
- 슈퍼 타입 + 서브 타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼 타입 + 서브 타입 테이블로 구성
- 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성
문제 18
Q. 다음 중 논리 데이터 모델의 슈퍼 타입과 서브 타입 데이터 모델을 물리적인 테이블 형식으로 변환할 때 설명으로 가장 부적절한 것은?
① 트랜잭션은 항상 전체를 대상으로 일괄 처리하는데 테이블은 서브 타입별로 개별 유지하는 것으로 변환하면 Union 연산에 의해 성능이 저하될 수 있다.
② 트랜잭션은 항상 서브 타입 개별로 처리하는데 테이블은 하나로 통합하여 변환하면 불필요하게 많은 양의 데이터가 집적되어 있어 성능이 저하될 수 있다.
③ 트랜잭션은 항상 슈퍼 + 서브 타입을 함께 처리하는데 개별로 유지하면 조인에 의해 성능이 저하될 수 있다.
④ 트랜잭션은 항상 전체를 통합하여 분석 처리하는데 하나로 통합되어 있으면 데이터 집적으로 인해 성능이 저하될 수 있다.
정답 : ④
해설 : 트랜잭션은 항상 전체를 통합하여 분석 처리하는데, 슈퍼-서브 타입이 하나의 테이블로 통합되어 있으면 하나의 테이블에 집적된 데이터만 읽어 처리할 수 있기 때문에 다른 형식에 비해 더 성능이 우수하다. (조인 감소)
문제 19
Q. 다음 중 아래와같은 '현금출급기실적' 테이블과 이 테이블에서 데이터를 조회할 때 사용되는 아래의 SQL 패턴에 대한 설명으로 가장 적절한 것은?
SELECT 건수, 금액 FROM 현금출급기실적 WHERE 거래일자 BETWEEN '20140701' AND '20140702' AND 사무소코드 = '000368'
(단, PK 인덱스는 설계된 순서 그대로 생성함.)
① 사무소코드가 '='로 상수값이 들어 왔고, 거래일자가 범위 'BETWEEN'으로 들어왔기 때문에 거래일자 + 사무소코드 + 출급기번호 + 명세표번호 로 구성된 PK 인덱스는 최적의 효율성을 가지고 있음.
② 사무소코드가 '=' 로 상수값이 들어 왔고, 거래일자가 범위 'BETWEEN' 으로 들어왔기 때문에 PK의 순서를 사무소코드 + 출급기번호 + 명세표번호 + 거래일자로 바꾸고 인덱스를 생성하는 것이 성능에 유리함.
③ 사무소코드가 '='로 상수값이 들어 왔고, 거래일자가 범위 'BETWEEN'으로 들어왔기 때문에 PK의 순서를 거래일자 + 출급기번호 + 명세표번호 + 사무소코드로 바꾸고 인덱스를 생성하는 것이 성능에 유리함.
④ 사무소코드 '='로 상수값이 들어 왔고, 거래일자가 범위 'BETWEEN'으로 들어왔기 때문에 PK의 순서를 사무소코드 + 거래일자 + 출급기번호 + 명세표번호로 바꾸고 인덱스를 생성하는 것이 성능에 유리함.
정답 : ④
해설 : 인덱스는 값의 범위에 따라 일정하게 정렬이 되어 있으므로 상수값으로 EQUAL 조건으로 조회되는 칼럼이 가장 앞으로 나오고, 범위 조회하는 유형의 칼럼이 그 다음에 오도록 하는 것이 인덱스 액세스 범위를 줄일 수 있는 가장 좋은 방법이 된다.
문제 20
Q. 다음 중 아래의 엔티티와 이 엔티티를 매우 빈번하게 참조하는 SQL의 성능에 대한 설명으로 가장 적절한 것은?
SELECT 건수, 금액 FROM 실적 WHERE 일자 BETWEEN '20110101' AND '20110102' AND 자사코드 = '1001'
(단, PK 인덱스가 존재하며 칼럼 순서대로 인덱스가 생성되어 있고, 이 SQL이 트랜잭션의 대부분을 차지한다고 가정함.)
① 명세번호를 실적 테이블에 맨 처음 칼럼으로 옮기면 PK 인덱스의 이용 효율성이 향상된다.
② 지사코드에 대해 입력 값이 EQUAL 조건으로 사용되므로 지사코드를 실적 테이블의 맨 처음 위치로 옮겨서 일자 칼럼의 앞에 두면 인덱스 이용 효율성이 높아진다.
③ 일자가 SQL 문장의 Where절에 첫 번째 조건으로 나왔으므로 칼럼 순서에서도 첫 번째에 위치하는 것이 효율성이 높다.
④ 일자, 명세번호, 지사코드로 칼럼 순서를 바꾸어야 일자 범위에 대한 내용을 먼저 식별하고, 그 다음으로 지사코드를 찾기에 용이할 수 있으므로 이때 인덱스의 효율성이 가장 높다.
정답 : ②
해설 : '='로 들어온 조건에 해당하는 칼럼이 인덱스의 가장 앞쪽에 위치할 때 인덱스의 이용 효율성이 가장 높다고 할 수 있다.
※ PK 순서를 결정하는 기준
- 인덱스 정렬 구조를 이해한 상태에서 인덱스를 효율적으로 이용할 수 있도록 PK 순서를 지정해야 한다.
- 즉, 인덱스의 특징은 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞쪽에 위치한 속성의 값이 비교자로 있어야 인덱스가 좋은 효율을 나타낼 수 있다.
- 앞쪽에 위치한 속성 값이 가급적 '=' 아니면 최소한 범위 'BETWEEN' '< >' 가 들어와야 인덱스를 이용할 수 있는 것이다.
문제 21
Q. 다음 중 아래 데이터 모델에 표현된 FK(Foreign Key)에 대한 설명으로 가장 적절한 것을 2개 고르시오.
(단, 학사기준과 수강신청은 조인하여 정보를 조회할 업무가 많음.)
① 학사기준번호는 부모 테이블에 이미 인덱스가 존재하기 때문에 상속받아 생긴 수강신청에는 학사기준번호 칼럼에 대한 별도의 인덱스가 필요하지 않다.
② 학사기준번호는 부모 테이블에 이미 인덱스가 존재하나 수강신청과 조인에 의한 성능 저하 예방을 위해 상속받아 생긴 수강신청에도 학사기준번호 칼럼에 대한 별도의 인덱스가 필요하다.
③ 데이터 모델에서는 관계를 연결하고 데이터베이스에 FK 제약 조건 생성을 생략하는 경우에 학사기준번호에 대한 인덱스를 생성할 필요가 없다.
④ 데이터 모델에서는 관계를 연결하고 데이터베이스에 FK 제약 조건 생성을 생략하는 경우에도 데이터의 조인 관계가 필요하므로 학사기준번호에 대한 인덱스를 생성할 필요가 있다.
정답 : ②, ④
해설 : 엔티티 간에 논리적 관계가 있을 경우, 즉 엔티티 간에 관계(Relationship)을 정의하여 관련 엔티티 상호 간에 업무적인 연관성이 있음을 표현한 경우에는, 이 데이터들이 업무적으로 밀접하게 연결되어 상호간에 조인이 자주 발생한다는 것을 의미하는 것이기 때문에, 데이터베이스 상에서 DBMS가 제공하는 FK 제약 조건을 생성했는지 여부와 상관 없이 조인 성능을 향상시키기 위한 인덱스를 생성해주는 것이 좋다. 그러므로 수강신청 테이블의 학사기준번호에 인덱스가 필요하다.
데이터베이스에 생성하는 FK 제약 조건은 데이터 모델 상에 표현된 논리적 관계에 따라 관련 인스턴스 간에 일관성을 보장하기 위해 설계된 제약 조건을 구현할 수 있도록 DBMS가 제공해주는 하나의 '지원 기능'으로 이해될 수 있다.
문제 22
Q. 다음 중 데이터가 여러 지역에 분산되어 있지만 하나의 데이터베이스처럼 사용하기를 원하는 분산 데이터베이스 환경에서 데이터베이스 분산 설계를 적용하여 효율성을 증대시킬 수 없는 것은?
① 공통 코드, 기준 정보 등 마스터 데이터는 분산 데이터베이스에 복제 분산을 적용한다.
② 거의 실시간(Near Real Time) 업무적인 특성을 가지고 있을 때 분산 데이터베이스를 사용하여 구성할 수 있다.
③ 백업 사이트를 구성할 때 간단하게 분산 기능을 적용하여 구성할 수 있다.
④ Global Single Instance(GSI)를 구성할 때 분산 데이터베이스를 활용하여 구성하는 것이 효율적이다.
정답 : ④
해설 : Global Single Instance(GSI)는 통합된 한 개의 인스턴스 즉, 통합 데이터베이스 구조를 의미하므로, 분산 데이터베이스와는 대치되는 개념이다.
※ 분산 데이터베이스 장단점
장점
- 지역 자치성, 점증적 시스템 용량 확장
- 신뢰성과 가용성
- 효용성과 융통성
- 빠른 응답 속도와 통신 비용 절감
- 데이터의 가용성과 신뢰성 증가
- 시스템 규모의 적절한 조절
- 각 지역 사용자의 요구 수용 증대
단점
- 소프트웨어 개발 비용
- 오류의 잠재성 증대
- 처리 비용의 증대
- 설계, 관리의 복잡성과 비용
- 불규칙한 응답 속도
- 통제의 어려움
- 데이터 무결성에 대한 위협
'Certificate > SQLD' 카테고리의 다른 글
[SQLD] 실전 문제 : SQL 활용 ② (0) | 2022.07.02 |
---|---|
[SQLD] 실전 문제 : SQL 활용 ① (0) | 2022.06.30 |
[SQLD] 실전 문제 : SQL 기본 ② (0) | 2022.06.25 |
[SQLD] 실전 문제 : SQL 기본 ① (1) | 2022.06.25 |
[SQLD] 실전 문제 : 데이터 모델링의 이해 (0) | 2022.06.21 |
[SQLD] SQL 최적화의 원리 (0) | 2022.01.20 |
[SQLD] SQL 활용 (0) | 2022.01.19 |
[SQLD] SQL 기본 (0) | 2022.01.18 |