WorkHard/자격증

[SQLD 개발자] 기출문제 공부(33회)

코딩공대 2023. 3. 14. 02:14
728x90

1. 파티션 분할 기법?

  • 범위 분할(Range Partitioning)
    • 분할 키 값이 범위 내에 있는지 여부로 구분한다.

    • 예를 들어, 우편번호를 분할 키로 수평 분할하는 경우이다.

  • 목록 분할(List Partitioning)
    • 값 목록에 파티션을 할당 분할 키 값을 그 목록에 비추어 파티션을 선택한다.

    • 예를 들어, Country라는 컬럼 값이 Iceland, Norway, Sweden, Finland 중 하나에 있는 행을 가져올 때 북유럽 국가 파티션을 구축할 수 있다.

  • 해시 분할(Hash Partitioning)
    • 해시 함수의 값에 따라 파티션에 포함할지 여부를 결정한다.

    • 데이터의 관리보다는 성능 향상에 목적을 둔다.

    • 예를 들어, 4개의 파티션으로 분할하는 경우 해시함수는 0 ~ 3의 정수를 돌려준다.

  • 합성 분할(Composite Partitioning)
    • 분할 기준으로 여러 기법을 결합해 사용한다.

  • 라운드 로빈(Round Robin)
    • 라운드 로빈 분할은 파티션에 행의 고른 분포를 원할 때 사용한다.

    • 해시분할과 달리 분할 컬럼을 명시할 필요가 없다.

    • 회전하면서 새로운 행이 파티션에 할당된다.

    • 하나의 중앙처리장치를 임의의 프로세스가 종료될 때까지 차지하는 것이 아니라, 여러 프로세스들이 중앙처리장치를 조금씩 돌아가며 할당받아 실행되는 방식으로, 리눅스를 포함한 대부분의 시스템에서 사용하는 방식이다.

    • 예를 들어, 무더운 여름 세명의 아이들이 하나의 아이스크림을 1/3씩 나누어 먹으려 한다. 먼저 A가 1/3을 먹고, 그다음 B가 1/3, 마지막으로 C가 나머지를 먹는 것보다는, 세 명이 조금씩 돌아가며 먹는 편이 모든 아이들의 갈증을 동시에 해결할 수 있을 것이다.

2. 속성의 분류(속성의 특성에 따른 분류)

  • 기본 속성
    • 사원이름, 직책이름, 고용일자 등 가장 일반적인 속성

  • 설계 속성
    • 업무상 필요한 테이터 외에 업무를 규칙화하기 위해 속성을 새로 만들거나 변형하여 정의하는 속성

  • 파생 속성
    • 다른 속성에 영향을 받아 발생하는 속성, 계산된 값들이 여기에 해당한다.(총 결제금액 등)

3. 속성의 분류(엔티티 구성방식에 따른 분류)

  • PK(Primary Key) 속성
    • 엔티티를 식별할 수 있는 속성

  • FK(Foreign Key) 속성
    • 다른 엔티티와의 관계에서 포함된 속성

  • 일반 속성
    • PK, FK에 포함되지 않은 속성

4. 제3 정규화

  • 제3 정규화
    • 한 엔티티 안의 모든 주식별자가 아닌 속성들은 주식별자에 의존해야 한다.
      속성에 종속적인 속성이 있다면 분리해야 한다.

5. 슈퍼 / 서브 타입 데이터의 특징

  • 공통점과 차이점을 고려하여 효과적으로 표현할 수 있다.

  • 즉, 공통의 부분을 슈퍼타입으로 모델링하고 공통으로부터 상속받아 다른 엔티티와 차이가 있는 속성에 대해서는 별도의 서브엔티티로 구분하여 업무의 모습을 정확하게 표현하면서 물리적인 데이터 모델로 변환을 할 때 선택의 폭을 넓힐 수 있는 장점이 있다.

  • 슈퍼 / 서브 타입 관계의 변환
    • 데이터량이 소량일 경우 성능에 영향을 미치지 않기 때문에 데이터 처리의 유연성을 고려하여 1:1 관계를 유지한다.
      그러나 데이터 용량이 많아지는 경우 그리고 해당 업무적인 특징이 성능에 민감한 경우는 트랜잭션이 해당 테이블에 어떻게 발생되는지에 따라 3가지 변환방법을 참조하여 상황에 맞게 변환하도록 해야 한다.

슈퍼 / 서브타입 데이터 모델의 변환


6. 반정규화 기법

  • 테이블 반정규화 : 테이블 병합 / 분할 / 추가

  • 컬럼 반정규화 : 중복컬럼 추가 / 파생컬럼 추가 / 이력테이블 컬럼 추가 / PK에 의한 컬럼 추가 등

  • 관계 반정규화 : 중복관계 추가

  • 테이블과 컬럼의 반정규화는 데이터 무결성에 영향을 미치지만 관계의 반정규화는 데이터 무결성을 깨뜨릴 위험 없이 데이터 처리의 성능을 향상 시킬 수 있다.

7. 서브쿼리?

  • 서브쿼리는 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다.

  • 서브쿼리는 메인쿼리의 컬럼을 모두 사용할 수 있지만, 메인쿼리는 서브쿼리의 컬럼을 사용할 수 없다.

  • 질의 결과에 서브쿼리 컬름을 표시해야 한다면 조인 방식으로 변환하거나 함수, 스칼라 서브쿼르 등을 사용해야 한다.

  • 서브쿼리 사용시 주의사항
    • 서브쿼리를 괄호로 감싸서 사용한다.

    • 서브쿼리는 단일행 또는 복수행 비교 연산자와 함께 사용 가능하다.

    • 단일행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하여야 하고 복수행 비교 연산자는 서브쿼리의 결과 건수와 상관 없다.

8. CURSOR?

  • 쿼리문에 의해서 반환되는 결과값들을 저장하는 메모리 공간

  • 커서의 종류?
    • 명시적(Explicit) 커서 : 사용자가 선언해서 생성 후 사용하는 SQL커서, 주로 여러개의 행을 처리하고자 할 경우 사용한다.

    • 묵시적(Implicit) 커서 : ORACLE에서 자동으로 선언해주는 SQL커서, 사용자는 생성 유무를 알 수 없다.

  • 커서의 속성?
    • %FOUND : 할당할 레코드가 있는 경우 True값을 반환

    • %ISOPEN : 커서가 오픈상태일 경우 True값을 반환

    • %NOTFOUND : 할당할 레코드가 없는 경우 True값을 반환

    • %ROWCOUNT : 카운터 역할을 한다. 커서가 오픈됐을 경우 0, 패치가 발생할 때 마다 1씩 증가

  • 커서의 처리단계
    1. 명시적 커서 선언 -> Cursor 커서이름
    2. 명시적 커서 오픈 -> Open 커서이름
    3. 커서에서 데이터 추출 -> Fetch 커서이름
    4. 커서 종료 -> Close 커서이름

9. Hash Join의 순서?

  1. 선행 테이블에서 주어진 조건을 만족하는 레코드를 필터링한다.
  2. 선행 테이블의 조인 키를 기준으로 해시 함수를 적용하여 해시 테이블을 생성한다.
  3. 1번, 2번 작업을 선행 테이블에서 조건을 만족하는 모든 행을 수행한다.
  4. 후행 테이블에서 주어진 조건을 만족하는 레코드를 필터링한다.
  5. 후행 테이블의 조인 키를 기준으로 해시함수를 적용하여 선행 테이블에서 해시함수 반환값과 같은 값을 반환하는 해당 버킷을 찾는다.

설명이 더 필요한 문제


새로운 문제들이 계속 나와서 큰일이다..

많이 보는 게 답이다!