본문 바로가기
SQLD/SQLD 오답노트

오답노트 (문1 ~ 문52) (1과목)

by moca7 2023. 11. 12.

 

1-1. 데이터 모델링의 이해 - 데이터 모델링의 이해

 

ㅁ 모델링의 특징.

- '시스템 구현만을 위해 진행하는' 게 아님. 

 

ㅁ 데이터 모델링이 필요한 주요 이유

- '데이터베이스를 구축하기 위한 용도를 위해 데이터모델링을 수행하고 업무에 대한 설명은 별도의 표기법을 이용한다.' 이거 오답. 이유=> 데이터모델링은 단지 데이터베이스만을 구축하기 위한 용도로 쓰이는게 아니라, 데이터모델링 자체로서 업무를 설명하고 분석하는 부분에 의미가 있다.

 

ㅁ 데이터모델링을 할 때 유의해야 할 사항

- 중복이 발생하면 안됨, 비유연성으로 데이터 모델이 자주 변경되면 안됨, 비일관성으로 데이터의 신뢰성이 훼손되면 안됨.

- 유연해야함. '데이터의 정의를 사용 프로세스와 분리하여 유연성을 높인다.' 이거 맞는 말임. 분리가 안되고 긴밀한 관계가 있으면 그게 비유연한거고, 안좋은 거임.

- '사용자가 처리하는 프로세스나 장표 등에 따라 매핑이 될 수 있도록 프로그램과 테이블간의 연계성을 높인다'. 이거 오답.

 

ㅁ ERD에 대한 설명

- '가장 중요한 엔터티를 오른쪽 상단에 배치하고 추가 발생되는 엔터티들을 왼쪽 편과 하단에 배치하는 것이 원칙이다.' 이거 틀림. 왼쪽 상단에 배치.

 

ㅁ 엔터티의 특징

- '엔터티는 다른 엔터티와 관계가 있을 수 밖에 없다. 단, 통계성 엔터티나 코드성 엔터티의 경우 관계를 생략할 수 있다.' 이거 맞는말.

- '객체지향의 디자인 패턴에는 싱글턴패턴이 있어 하나의 인스턴스를 가지는 클래스가 존재한다. 이와 유사하게 엔터티는 한 개의 인스턴스를 가지는 것만으로도 충분한 의미를 부여할 수 있다.' 이거 틀린 말.

 

ㅁ 속성에 대한 설명

- '속성도 집합이다' 이거 맞는 말임.

- '하나의 인스턴스에서 각각의 속성은 하나 이상의 속성값을 가질 수 있다.' 이거 틀린 말임. 한 개의 속성값만 가져야 함. 

 

ㅁ 속성의 특성에 따른 분류

- '원금, 예치기간, 이자율'과 '이자' 중에서, '이자와 이자율은 파생속성이다.' 이거 틀린말. 이자만 파생속성이고 이자율은 기본속성. 

 

ㅁ 파생속성

- '데이터를 조회할 때 빠른 성능을 낼 수 있도록 하기 위해 원래 속성의 값을 계산하여 저장할 수 있도록 만든 속성'

 

ㅁ 속성의 명칭 부여

- '데이터모델링 대상에서 사용하는 용어도 있고 외부에서 사용하는 용어도 있어 중복이 있을 때, 가급적 해당 업무에서 자주 사용하는 이름을 이용하도록 한다.' 이거 맞는말.

- '직원 엔터티의 이름, 고객 엔터티의 이름과 같이 각 엔터티별로 동일한 속성명을 사용하여 데이터 모델의 일관성을 가져가는 것이 좋다.' 이거 틀린말. 속성의 명칭 부여는 전체 데이터 모델에서 유일성을 확보하는 것이 좋다.

= 테이블 생성시 주의사항. 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다.(데이터 표준화 관점)

 

ㅁ 데이터 모델링의 관계에 대한 설명

- '관계는 존재에 의한 관계와 행위에 의한 관계로 구분될 수 있으나 ERD에서는 관계를 연결할 때, 존재와 행위를 구분하지 않고 단일화된 표기법을 사용한다.' 이거 맞는말. 데이터모델링에서는 존재적 관계와 행위에 의한 관계를 구분하는 표기법이 없음.

- 'UML에는 클래스다이어그램의 관계 중 연관관계와 의존관계가 있고 이것은 실선과 점선의 표기법으로 다르게 표현이 된다.' 이거 맞는말. 

 

ㅁ 관계에 대한 설명

- 관계의 표기법은 '관계명, 관계차수, 선택성(선택사양)'의 3가지 개념으로 표현한다. 맞는말.

 

ㅁ 두 개의 엔터티 사이의 관계

- '업무기술서, 장표에 관계연결을 가능하게 하는 명사가 있는가?' 이거 틀린말. 동사여야 함.

 

ㅁ 주식별자 지정시 고려사항

- 주식별자에 의해 엔터티 내의 모든 인스턴스들이 유일하게 구분되어야 한다, 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다, 지정된 주식별자의 값자주 변하지 않는 것이어야 한다, 주식별자가 지정이 되면 반드시 값이 들어와야 한다.

 

ㅁ 다음 사원 엔터티에서 식별자의 특성에 해당하지 않는 것은?

- 사원 엔터티 안에 사번 / 부서번호(FK), 주민등록번호.

- (1)주식별자 (2)단일식별자 (3)내부식별자 (4)인조식별자

- 엔터티 내에서 대표성이 있느냐에 따라 주식별자/보조식별자, 엔터티 내에서 스스로 생성되었는지 여부에 따라 내부식별자/외부식별자, 단일 속성으로 식별이 되는가에 따라 단일식별자/복합식별자, 원래 업무적으로 의미가 있던 식별자 속성을 대체하여 일련번호와 같이 새롭게 만든 식별자를 구분하기 위해 본질식별자/인조식별자.

- 사번은 업무적으로 의미 있는 식별자로 시스템적으로 부여된 인조식별자가 아니라 일반적으로 사원 인스턴스의 탄생과 함께 업무적으로 부여되는 사원 인스턴스의 본질적인 속성에 해당하기에 본질식별자다.

- 본질식별자(업무에 의해 만들어지는 식별자), 인조식별자(업무적으로 만들어지지는 않았지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자)

 

ㅁ 식별자/비식별자 관계

- 부모 엔터티에 참조값이 없어도 자식엔터티의 인스턴스가 생성될 수 있는 경우. 비식별자 관계

- 자식쪽 엔터티의 주식별자를 부모엔터티와는 별도로 생성하는 것이 더 유리하다고 판단하는 경우. 비식별자 관계

- 부모엔터티의 인스턴스가 자식 엔터티와 같이 소멸하는 경우. 식별자 관계.

(엔터티별로 데이터 생명주기가 다른 경우) 부모엔터티의 인스턴스가 자식의 엔터티와 관계를 가지고 있지만 자식만 남겨두고 먼저 소멸하는 경우는 비식별자 관계.

- 여러 개의 엔터티를 하나로 통합하면서 각각의 엔터티가 갖고 있던 여러 개의 개별 관계가 통합되는 경우.

이거 비식별자 관계. A-A', B-B'가 있었는데 A와 B가 AB로 통합되버리면 AB의 주식별자를 A', B'의 주식별자로 쓸 수 없어짐.

 

1-2. 데이터 모델링의 이해 - 데이터 모델과 성능

 

ㅁ 성능 데이터 모델링에 대한 설명

- '데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 증가한다.' 이거 맞는말

- '데이터모델은 성능을 튜닝하면서 변경될 수 있는 특징이 있다.' 이거 맞는말 

- '성능이 저하된 결과를 대상으로 데이터모델 보다는 문제발생 시점의 SQL을 중심으로 집중하여 튜닝을 한다.' 이거 틀린말. 그냥 성능 데이터모델링과 무관한 내용이다.

 

ㅁ 반정규화 과정

- 데이터 모델링 단계에서 성능을 충분히 고려하기 위한 성능 데이터 모델링 수행 절차에 대한 설명이다.

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

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

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

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

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

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

- 성능을 고려한 데이터모델링은 정규화를 수행한 이후에 용량산정과 트랜잭션 유형을 파악하여 반정규화를 수행한다. 또한 PK/FK등을 조정하여 인덱스의 특징을 반영한 데이터모델로 만들고 이후에 데이터모델을 검증하는 방법으로 전개한다.

 

ㅁ 성능데이터 모델링을 할 때 고려사항

- '데이터 모델링의 정규화는 항상 조회 성능저하를 나타내므로 반정규화 관점에서만 성능을 고려하여 설계하도록 한다.' 틀린말. 정규화는 '입력, 수정, 삭제성능'은 향상되고, '조회성능'은 좋아질수도 나빠질수도 있음.

ex. 정규화하여 조인이 발생하면 성능이 심각하게 저하되는가? 2차 정규화를 적용한 테이블에 대해서 조인을 하더라도 PK Unique Index를 이용하면 조인 성능 저하는 미미하게 발생된다.

- '용량산정은 전체적인 데이터베이스에서 발생되는 트랜잭션의 유형과 양을 분석하는 자료가 되므로 성능데이터 모델링을 할 때 중요한 작업이 될 수 있다.'

- '물리적인 데이터 모델링을 할 때 PK/FK의 칼럼의 순서조정, FK인덱스 생성 등은 성능 향상을 위한 데이터 모델링 작업에 중요한 요소가 된다.'

- '이력데이터는 시간에 따라 반복적으로 발생 되기 때문에 대량 데이터일 가능성이 높아 특별히 성능을 고려하여 칼럼 등을 추가하도록 설계해야 한다.'

 

ㅁ 문35. 아래와 같은 보관금원장 엔터티에서 관서에 대한 정보가 반정규화 되어 있기 때문에 관서정보를 조회할 때 성능저하가 발생하고 있다. 이 엔터티에 대해 몇차 정규화가 필요한 지와 분리된 스키마 구조를 가장 바르게 짝지은 것은?

 

[보관금원장]

관서번호

납부자번호

------------------

관리점번호

관서명

상태

관서등록일자

직급명

통신번호

 

함수종속성(FD): 

{관서번호, 납부자번호} -> {직급명, 통신번호}

{관서번호} -> {관리점번호, 관서명, 상태, 관서등록일자}

 

- 답35. 함수종속성의 규칙에 따라 {관서번호} -> {관리점번호, 관서명, 상태, 관서등록일자}인 관서번호가 PK인 엔터티가 2차 정규화로 분리되어야 한다. / 나머지는 {관서번호, 납부자번호} -> {직급명, 통신번호}

 

- 위의 사례는 '2차 정규화가 안 된 반정규화된 테이블의 모습'이고, '부분키 종속을 정규화하여 두 개의 테이블로 분리한게' 2차 정규화된 테이블의 모습이다.

- 2차 정규화를 하여 분리됨. 복합실별자 중에서 일반속성이 주식별자 속성 중 일부에만 종속관계를 가지고 있으므로 2차 정규화의 대상이 된다. 결과. 기존 테이블의 PK(복합키)들은 그대로 있고, 일반속성 중 주식별자 중 일부에만 종속관계를 가지고 있던 속성들은 다 빠짐. 일부에만 종속관계를 가지고 있던 주식별자는 다른 테이블의 PK가 되고 거기에만 종속관계를 가지고 있던 속성들은 일반속성으로 들어감.

 

- 1차 정규화의 정의는 '중복속성에 대한 분리'. 로우단위의 대상도 1차 정규화의 대상이 되지만 칼럼 단위로 중복이 되는 경우도 1차 정규화의 대상이 된다. <= 한 테이블에 'A유형기능분류코드1', 'B유형기능분류코드2' ... 처럼 인덱스가 많은 경우 1차 정규화를 한다. 

- 2차 정규화란, 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것. 여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미한다. 즉, 기본키 중에 특정 컬럼에만 종속된 컬럼이 없어야 된다는 것.

- 2차 정규화란, 기본키가 2개 이상의 속성일 때(= 복합식별자, 복합키) 부분함수 종속성을 제거하는것. 종속되는 관계가 있다면 분리한다. 

- 3차 정규화란, 기본키에 의존하지 않고 일반칼럼(일반속성)에 의존하는 칼럼이 있다면 이를 제거하는 것.

ex) 사원 테이블에 '부서코드', '부서명' 등은 '부서' 테이블에 있어야 할 속성들이다. 

 

 

ㅁ 문36. 아래 '일자별매각물건' 엔터티에 대한 설명으로 가장 적절한 것은?

 

[매각물건]                                     [일자별매각물건]                                           [매각일자별매각내역]

매각물건번호                               매각물건번호(FK)                                           매각일자

                                                     매각일자

------------------                                -----------------------                                          ------------------------------

감정가액                                       매각시간                                                         총매각금액

등록일자                                       매각장소                                                         총유찰금액

등록자                                           최저매각가격                                                  총매각물건수

                                                     물건상태코드                                                   총유찰물건수

 

반정규화된 속성들:

'일자별매각물건' 테이블의 '매각일자, 매각시간, 매각장소' = '매각기일'

 

- 답36. 2차 정규화가 필요한 엔터티로서 매각기일과 일자별매각물건으로 1:M 관계가 될 수 있다.

 

- 매각시간과 매각장소 속성은 두 개의 주식별자 속성 중 매각일자에만 종속되기 때문에 2차 정규화 대상이다. 그러므로 매각일자를 주식별자로 하고 매각시간과 매각장소 속성을 포함하는 매각기일 엔터티를 독립시킨다. 매각기일 엔터티는 일자별매각물건의 주식별자 중 일부로부터 독립했기 때문에 매각기일과 일자별매각물건은 1:M관계가 된다. 

- 이와 같은 2차 정규화를 통해 특정 장소에서 이루어진 매각내역을 조회하고자 할 때 100만건의 일자별 매각내역 데이터를 모두 읽고 원하는 장소에 해당하는 인스턴스들을 찾아 매각일자별로 그룹핑한 후 매각일자별매각내역과 조인할 필요 없이, 매우 적은 수의 매각기일 엔터티에서 특정 장소에 해당하는 매각일자들을 찾아 매각일자별내역과 1:1로 바로 조인하면 되기 때문에 I/O를 현저하게 감소시킬 수 있어 성능향상 효과를 얻을 수 있다. (일자별 매각내역 100만건, 매각기일 5천건)(두 개의 엔터티가 통합되어 있는 상태임)

 

ㅁ 문37. 아래의 데이터 모델처럼 동일한 유형의 속성이 칼럼단위로 반복되는 경우가 실제 프로젝트를 하면서 많이 발생될 수 있다. 다음 중 아래와 같이 전제조건이 있을 때 테이블에서 나타날 수 있는 현상으로 가장 적절한 것은?

 

전제조건: 유형기능분류코드에 해당하는 속성들은 분포도가 양호하며, SQL Where절에서 각각의 값이 상수값으로 조건 입력될 수 있는 특징을 가진다. 

 

[모델]

모델코드

------------

모델명

제품류코드

물품가

출하가

A유형기능분류코드1

B유형기능분류코드2

.

.

.

 

= 답37. 유형기능분류코드 각각에 대하여 개별로 Index를 모두 생성할 경우 입력, 수정, 삭제 때 성능이 저하되므로 제1차 정규화를 수행한 후 인덱스를 적용하는 것이 좋다.

 

= 칼럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성을 위배한 제1차 정규화의 대상이 된다. 이와 같은 반복적인 속성 나열 형태에서는 각 속성에 대해 'or' 연산자로 연결된 조건들이 사용되는데, 이 때 어느 하나의 속성이라도 인덱스가 정의되어 있지 않게 되면 'or'로 연결된 모든 조건절들이 인덱스를 사용하지 않고 한 번의 전체 데이터 스캔으로 처리하게 되어 성능 저하가 나타날 수 있게 되며, 또한 모든 반복 속성에 인덱스를 생성하게 되면 검색 속도는 좋아지겠지만 반대급부적으로 너무 많은 인덱스로 인해 입력, 수정, 삭제의 성능이 저하되므로, 1차 정규화를 통해서 자연스럽게 문제가 해결되도록 한다. 

- 위는 동일한 속성 형식을 두 개 이상의 속성으로 나열하여 반정규화한 경우이다. 참고로 한 테이블에 인덱스가 많아지면 조회 성능은 향상되지만 데이터 입력/수정/삭제 성능은 저하된다. 중복속성에 대한 분리가 1차 정규화의 정의임을 고려하면 모델 테이블은 1차 정규화의 대상이 된다. 로우 단위의 대상도 칼럼 단위의 중복도 1차 정규화의 대상이다.

 

ㅁ 문38. 아래 '일재고' 엔터티에 대한 설명으로 가장 적절한 것은?

 

[일재고]

물류센터코드

재고일자

------------------

월초재고수량

장기재고1개월수량

장기재고2개월수량

장기재고3개월수량

장기재고1개월주문수량

장기재고2개월주문수량

장기재고3개월주문수량

장기재고1개월금액

장기재고2개월금액

장기재고3개월금액

장기재고1개월주문금액

장기재고2개월주문금액

장기재고3개월주문금액

 

= 답38. 1차 정규화가 필요한 엔터티로서 일재고와 일재고상세로 1:M의 관계가 될 수 있다.

 

= 칼럼 단위에서 중복된 경우도 1차 정규화의 대상이 된다. 이에 대한 분리는 1:M의 관계로 두 개의 엔터티로 분리된다. 

 

- 일재고 엔터티는 물류센터코드, 재고일자 / 월초재고수량만 남는다. 일재고상세 엔터티는 물류센터코드, 재고일자, 재고기간 / 장기재고수량, 장기재고주문수량, 장기재고금액, 장기재고주문금액만 남는다.

- 1차 정규화가 안되어 칼럼단위로 중복된 모델을 1차 정규화를 통해 분리한다. 

 

ㅁ 문39. 아래와 같이 수강지도 엔터티를 만들었을 때 이에 해당하는 정규형과 정규화의 대상으로 가장 바르게 짝지어진 것은?

 

[수강지도]

학번

과목코드

-------------

성적

지도교수명

학과명

 

함수종속성(FD):

1. 학번 II 과목번호 -> 성적

2. 학번 -> 지도교수명

3. 학번 -> 학과명 

 

= 답39. 1차 정규형 - 2차 정규화 대상 

 

= PK에 대해 반복이 되는 그룹이 존재하지 않으므로 1차 정규형이라고 할 수 있으며, 부분 함수종속의 규칙을 가지고 있으므로 2차 정규형이라고 할 수 없음. 2차 정규화의 대상이 되는 엔터티임. 

                                                   

ㅁ 문40. 데이터 모델에 대한 반정규화를 고려할 때 판단요소에 대한 설명으로 가장 적절한 것은?

(1) 반정규화 정보에 대한 재현의 적시성으로 판단한다. 예를 들어, 빌링의 잔액은 다수 테이블에 대한 다량의 조인이 불가피하므로 데이터 제공의 적시성 확보를 위한 필수 반정규화 대상 정보이다. 

(2) 탐색 대상 데이터의 크기로 판단한다. 왜냐하면 대량 데이터에 대한 인덱스를 활용한 탐색은 Random처리의 특성으로 성능 저하가 불가피 하다.

- 다량 데이터 탐색의 경우 인덱스가 아닌 파티션 및 데이터 클러스터링 등의 다양한 물리 저장 기법을 활용하여 성능 개선을 유도할 수 있다.

(3) RDBMS는 현재 레코드 기준으로 이전 또는 이후 위치의 레코드에 대한 접근이 원천적으로 불가능하므로 반정규화를 하지 않으면 해당 정보에 대한 데이터 접근 자체가 불가능하다.

- 이전 또는 이후 위치의 레코드에 대한 탐색은 WINDOW FUNCTION으로 접근 가능하다.

(4) 반정규화 테이블은 집계 테이블에 국한하여 적용하도록 한다.

- 집계 테이블 이외에도 다양한 유형(다수 테이블의 키 연결 테이블 등)에 대하여 반정규화 테이블 적용이 필요할 수 있다.

 

- 반정규화는 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미한다. 반정규화는 데이터를 중복하여 성능을 향상시키기 위한 기법이라고 정의할 수 있고 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미한다. 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다. 

 

ㅁ 문41. 다음 중 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 칼럼들을 별도로 모아놓는 반정규화 기법으로 가장 적절한 것은?

 

= 답41. 테이블추가 - 부분테이블 추가

 

ㅁ 문42. 다음 중 칼럼에 대한 반정규화 기법으로 가장 부적절한 것은? 

(1) 중복칼럼을 추가 - 조인감소를 위해 여러 테이블에 동일한 칼럼을 갖도록 한다. 

(2) 파생칼럼을 추가한다. - 조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 갖도록 한다.

(3) FK에 대한 속성을 추가한다. - FK관계에 해당하는 속성을 추가하여 조인 성능을 높인다.

 - FK에 대한 속성 추가는 반정규화 기법이라기 보다는 데이터모델링에서 관계를 연결할 때 나타나는 자연스러운 현상이다. 

(4) 이력테이블에 기능 칼럼을 추가한다. - 최신값을 처리하는 이력의 특성을 고려하여 기능성 칼럼을 추가한다.

 

ㅁ 문43. 아래의 주문, 주문목록, 제품에 대한 데이터모델과 이를 이용하여 데이터를 조회하는 SQL문에서 조회를 빠르게 수행하기 위한 반정규화 방법으로 가장 적절한 것은? 

 

[주문]                                         [주문목록]                                    [제품]

주문번호                                    주문번호(FK)                               제품번호

                                                  제품번호(FK)

------------                                    ------------------                               ------------

                                                                                                        단가

 

SELECT A.주문번호, SUM(C.단가)

FROM 주문 A, 주문목록 B, 제품 C

WHERE A.주문번호 = '2015-02-001'

AND A.주문번호=B.주문번호

AND B.제품번호=C.제품번호

GROUP BY A.주문번호

 

= 답43. 주문 엔터티에 단가를 합한 계산된 칼럼을 추가하도록 한다.

 

= 제품 엔터티에 단가를 주번번호별로 합하는 것은 해당 제품이 여러 주문에 포함될 수 있기 때문에 특정 주문번호만의 단가 합계금액을 갖고 있을 수 없고, 주문목록 엔터티에 주문번호별 단가 합계 금액을 추가하게 되면 하나의 주문에 포함된 제품번호마다 동일한 합계 금액을 반복적으로 저장해야해서 일관성 문제가 발생할 수 있다. 또한 제품 엔터티에 최근값 여부 칼럼을 추가하는 것은 단가 합계 금액을 빠르게 얻기 위한 반정규화와 무관한 조치이다.

그러므로 주문엔터티에 전체를 통합한 계산된 칼럼을 추가하는 것이 한번에 데이터를 조회하는 방법이 되므로 가장 효과적인 반정규화 기법이다. 

 

ㅁ 문44. 아래 데이터 모델에 대한 설명으로 가장 부적절한 것은?

 

[공급자]

공급자번호

---------------

공급자명

공급자EAN

공급자SAN

     ㅣ                                       ㅣ                                     ㅣ

[전화번호]                       [메일주소]                       [위치]

공급자번호(FK)              공급자번호(FK)              공급자번호(FK)

순번                                순번                                순번

---------------------              --------------------               ---------------------

전화번호                         메일주소                         위치

 

ㅇ 공급자의 데이터는 1000만건 이상의 대량 데이터를 가진 테이블임

ㅇ 전화번호, 메일주소, 위치는 자주 변경이 될 수 있으며 데이터 조회를 할 때는 항상 최근에 변경된 값을 조회하게 됨

 

(1) 공급자별로 최근에 변경된 전화번호, 메일주소, 위치와 공급자 이름을 같이 조회할 때 이 값들을 공급자 테이블에 반정규화로 갖고 있는 경우에 비해 조회 성능이 저하되지 않는다. 

- 최근에 변경된 값만을 조회할 경우 과도한 조인으로 인해 성능이 저하되어 나타나게 된다. 

(2) 데이터를 조회할 때 과도한 조인으로 인해 조회성능이 저하될 수 있으므로 공급자 테이블에 가장 빈번하게 조회되는 값인 최근 변경값에 해당하는 전화번호, 메일주소, 위치를 반정규화하여 조회 성능을 향상시킬 수 있다. 

(3) 전화번호, 메일주소, 위치에 대한 가장 최근에 변경된 값을 알 수 있도록 최신여부라는 속성을 추가함으로써 최근 값을 찾기 위한 조회 성능 저하를 예방할 수 있다.

(4) 조회 성능을 위해서는 하나의 테이블로 통합하여 전화번호, 메일주소, 위치 등이 변경될 경우 전체 속성이 계속 발생되는 이력의 형태로 설계될 수 있다. 이럴 경우 조회에 대한 성능은 향상이 되나, 과도한 데이터가 한 테이블에 발생하게 되어 용량이 너무 커지는 단점이 있다. 

 

ㅁ 문45. 다음 중 칼럼수가 많은 테이블에 대한 설명으로 가장 적절한 것은?

(1) 한 테이블에 많은 칼럼을 가지고 있으면 조인이 발생되지 않아 여러개 테이블일 때에 비해 성능이 항상 우수하다고 할 수 있다.

(2) 로우체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우 조회성능저하가 발생할 수 있다. 한 테이블내에서 칼럼의 위치를 조정하면 디스크 I/O가 줄어들어 조회 성능을 향상 시킬 수 있다.

(3) 로우체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우 조회성능저하가 발생할 수 있다. 트랜잭션이 접근하는 칼럼유형을 분석하여 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 조회 성능을 향상 시킬 수 있다.

-  트랜잭션이 접근하는 칼럼유형을 분석하여 자주 접근하는 칼럼들과 상재적으로 접근 빈도가 낮은 칼럼들을 구분하여, 별도의 1:1관계 엔터티로 분리하면 디스크 I/O가 줄어들어 성능을 향상 시킬 수 있다.

(4) 로우체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우 조회성능저하가 발생할 수 있다. 그러나 이를 분리할 경우 조인으로 인한 성능 저하가 더 심하게 나타날 수 있으므로 감수하는 것이 좋다. 

 

ㅁ 문46. 아래 설명에서 데이터 액세스 성능을 향상시키기 위해 적용하는 방법에 대해서 (ㄱ)을 채우시오.

 

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

 

= 답46. (ㄱ) 파티셔닝

 

ㅁ 문47. 다음 중 아래 데이터 모델과 SQL문에 대해 개선해야 할 사항에 대한 설명으로 가장 적절한 것은?

 

[긴급사건]                             [특수사건]                                [일반사건]

긴급사건 번호                      특수사건 번호                          일반사건 번호

-------------------                      -------------------                          -------------------

사건명                                  사건명                                      사건명

발생일시                              발생일시                                   발생일시

 

SELECT 긴급사건번호, 사건명 FROM 긴급사건 WHERE 발생일시 = '20150905'

UNION ALL

SELECT 특수사건번호, 사건명 FROM 긴급사건 WHERE 발생일시 = '20150905'

UNION ALL

SELECT 일반사건번호, 사건명 FROM 긴급사건 WHERE 발생일시 = '20150905'

 

ㅇ 전제조건: 위 세 테이블은 함께 조회하는 경우가 대부분이고 아직 시스템을 오픈하지 않았다.

 

= 답47. 긴급사건, 특수사건, 일반사건을 하나의 테이블로 통합하고 PK를 사건분류코드 + 사건번호로 조합하여 구성하도록 한다. 

 

= 개별 테이블을 모두 조회하는 트랜잭션이 대부분이라는 가정이 있으므로 UNION/UNION ALL할 경우 개별조회에 따른 시간소요와 이것을 조합하는 성능저하가 발생된다. 따라서 하나의 테이블로 통합하도록 하고 대신 PK체계나 일반속성에 각 사건을 구분할 수 있도록 구분자를 부여한다.

 

ㅁ 문48. 논리데이터모델의 슈퍼타입과 서브타입 데이터모델을 / 물리적인 테이블 형식으로 변환할 때 설명으로 가장 부적절한 것은?

 

(1) 트랜잭션은 항상 전체를 대상으로 일괄 처리하는데 테이블은 서브타입별로 개별 유지하는 것으로 변환하면 Union 연산에 의해 성능이 저하 될 수 있다. 

(2) 트랜잭션은 항상 서브타입 개별로 처리하는데 테이블은 하나로 통합하여 변환하면 불필요하게 많은 양의 데이터가 집적되어 있어 성능이 저하될 수 있다.

(3) 트랜잭션은 항상 슈퍼+서브 타입을 함께 처리하는데 개별로 유지하면 조인에 의해 성능이 저하될 수 있다.

(4) 트랜잭션은 항상 전체를 통합하여 분석 처리하는데 하나로 통합되어 있으면 / 데이터 집적으로 인해 성능이 저하될 수 있다. - ~/ 하나의 테이블에 집적된 데이터만 읽어 처리할 수 있기 때문에 다른 형식에 비해 성능이 더 우수하다.(조인 감소)

 

ㅁ 문49. 아래와 같은 '현금출급기실적' 테이블과 이 테이블에서 데이터를 조회할 때 사용되는 아래의 SQL패턴에 대한 설명으로 가장 적절한 것은?

 

[현금출급기실적]

거래일자

사무소코드

출급기번호

명세표번호

-----------------------

건수

금액

 

SELECT 건수, 금액

FROM 현금출급기실적

WHERE 거래일자 BETWEEN '20140701' AND '20140702' AND 사무소코드 = '000368'

 

ㅇ 단, PK인덱스는 설계된 순서 그대로 생성함

 

= 답49. 사무소코드 '='가 상수값이 들어 왔고, 거래일자가 범위 'BETWEEN'으로 들어왔기 때문에 / PK의 순서를 사무소코드 + 거래일자 + 출급기번호 + 명세표번호로 바꾸고 인덱스를 생성하는 것이 성능에 유리함. 

 

ㅁ 문50. 다음 중 아래의 엔터티와 이 엔터티를 매우 빈번하게 참조하는 SQL의 성능에 대한 설명으로 가장 적절한 것은?

 

[실적]

일자

지사코드

명세번호

-------------

금액

건수

 

SELECT 건수, 금액

FROM 실적

WHERE 일자 BETWEEN '20110101' AND '20110102' AND 지사코드 = '1001'

 

ㅇ 단, PK 인덱스가 존재하며 칼럼순서대로 인덱스가 생성되어 있고, 이 SQL이 트랜잭션의 대부분을 차지함.

 

= 답50. 지사코드에 대해 입력 값이 EQUAL 조건으로 사용되므로 지사코드를 실적 테이블의 맨 처음 위치로 옮겨서 일자 칼럼의 앞에 두면 인덱스 이용 효율성이 높아진다. 

 

ㅁ 문51. 아래 데이터모델에 표현된 FK에 대한 설명으로 가장 적절한 것을 2개 고르시오.

 

[학사기준]                    [수강신청]

학사기준번호               강의번호

------------------               학번

                                     학사기준번호(FK)

                                     성명

                                     연락처1

                                     연락처2

                                     등록년도

                                     감면코드

 

ㅇ 단, 학사기준과 수강신청은 조인하여 정보를 조회할 업무가 많음.

 

= 답51. 학사기준번호는 부모 테이블에 이미 인덱스가 존재하나 / 수강신청과 조인에 의한 성능저하 예방을 위해 상속받아 생긴 수강신청에도 학사기준번호 칼럼에 대한 별도의 인덱스가 필요하다.

= 답51. 데이터모델에서는 관계를 연결하고 데이터베이스에 FK제약조건 생성을 생략하는 경우에도 데이터의 조인관계가 필요하므로 학사기준번호에 대한 인덱스를 생성할 필요가 있다. 

 

= 엔터티 간에 관계가 있을 경우, 이 데이터들이 업무적으로 밀접하게 연결되어 상호간에 조인이 자주 발생한다는 것을 의미하기 때문데, 데이터베이스 상에서 DBMS가 제공하는 FK Constraints를 생성했는지 여부와 상관없이 조인 성능을 향상시키기 위한 인덱스를 생성해 주는 것이 좋다. 

 

ㅁ 문52. 데이터가 여러 지역에 분산되어 있지만 하나의 데이터베이스처럼 사용하기를 원하는 분산데이터베이스 환경에서 데이터베이스 분산설계를 적용하여 효율성을 증대시킬 수 없는 것은?

 

(1) 공통코드, 기준정보 등 마스터 데이터는 분산데이터베이스에 복제분산을 적용한다. 

(2) 거의 실시간 업무적인 특성을 가지고 있을 때 분산데이터베이스를 사용하여 구성할 수 있다.

(3) 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성할 수 있다.

(4) Global Single Instance를 구성할 때 분산데이터베이스를 활용하여 구성하는 것이 효율적이다. 

- GSI는 통합된 한 개의 인스턴스, 즉 통합 데이터베이스구조를 의미하므로 분산데이터베이스와는 대치되는 개념이다.