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가지 변환방법을 참조하여 상황에 맞게 변환하도록 해야 한다.
- 데이터량이 소량일 경우 성능에 영향을 미치지 않기 때문에 데이터 처리의 유연성을 고려하여 1:1 관계를 유지한다.
6. 반정규화 기법
- 테이블 반정규화 : 테이블 병합 / 분할 / 추가
- 컬럼 반정규화 : 중복컬럼 추가 / 파생컬럼 추가 / 이력테이블 컬럼 추가 / PK에 의한 컬럼 추가 등
- 관계 반정규화 : 중복관계 추가
- 테이블과 컬럼의 반정규화는 데이터 무결성에 영향을 미치지만 관계의 반정규화는 데이터 무결성을 깨뜨릴 위험 없이 데이터 처리의 성능을 향상 시킬 수 있다.
7. 서브쿼리?
- 서브쿼리는 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다.
- 서브쿼리는 메인쿼리의 컬럼을 모두 사용할 수 있지만, 메인쿼리는 서브쿼리의 컬럼을 사용할 수 없다.
- 질의 결과에 서브쿼리 컬름을 표시해야 한다면 조인 방식으로 변환하거나 함수, 스칼라 서브쿼르 등을 사용해야 한다.
- 서브쿼리 사용시 주의사항
- 서브쿼리를 괄호로 감싸서 사용한다.
- 서브쿼리는 단일행 또는 복수행 비교 연산자와 함께 사용 가능하다.
- 단일행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하여야 하고 복수행 비교 연산자는 서브쿼리의 결과 건수와 상관 없다.
- 서브쿼리를 괄호로 감싸서 사용한다.
8. CURSOR?
- 쿼리문에 의해서 반환되는 결과값들을 저장하는 메모리 공간
- 커서의 종류?
- 명시적(Explicit) 커서 : 사용자가 선언해서 생성 후 사용하는 SQL커서, 주로 여러개의 행을 처리하고자 할 경우 사용한다.
- 묵시적(Implicit) 커서 : ORACLE에서 자동으로 선언해주는 SQL커서, 사용자는 생성 유무를 알 수 없다.
- 명시적(Explicit) 커서 : 사용자가 선언해서 생성 후 사용하는 SQL커서, 주로 여러개의 행을 처리하고자 할 경우 사용한다.
- 커서의 속성?
- %FOUND : 할당할 레코드가 있는 경우 True값을 반환
- %ISOPEN : 커서가 오픈상태일 경우 True값을 반환
- %NOTFOUND : 할당할 레코드가 없는 경우 True값을 반환
- %ROWCOUNT : 카운터 역할을 한다. 커서가 오픈됐을 경우 0, 패치가 발생할 때 마다 1씩 증가
- %FOUND : 할당할 레코드가 있는 경우 True값을 반환
- 커서의 처리단계
- 명시적 커서 선언 -> Cursor 커서이름
- 명시적 커서 오픈 -> Open 커서이름
- 커서에서 데이터 추출 -> Fetch 커서이름
- 커서 종료 -> Close 커서이름
9. Hash Join의 순서?
- 선행 테이블에서 주어진 조건을 만족하는 레코드를 필터링한다.
- 선행 테이블의 조인 키를 기준으로 해시 함수를 적용하여 해시 테이블을 생성한다.
- 1번, 2번 작업을 선행 테이블에서 조건을 만족하는 모든 행을 수행한다.
- 후행 테이블에서 주어진 조건을 만족하는 레코드를 필터링한다.
- 후행 테이블의 조인 키를 기준으로 해시함수를 적용하여 선행 테이블에서 해시함수 반환값과 같은 값을 반환하는 해당 버킷을 찾는다.
설명이 더 필요한 문제
새로운 문제들이 계속 나와서 큰일이다..
많이 보는 게 답이다!
'WorkHard > 자격증' 카테고리의 다른 글
[SQLD 개발자] 기출문제 공부(37회) (0) | 2023.03.16 |
---|---|
[SQLD 개발자] 기출문제 공부(33회) (0) | 2023.03.15 |
[SQLD 개발자] 기출문제 공부(33회) (0) | 2023.03.14 |
[SQLD 개발자] 기출문제 공부(38회) (0) | 2023.03.10 |
[SQLD 개발자] 기출문제 공부(37회) (0) | 2023.03.09 |