728x90
1. DISK I / O를 경감할 수 있는 반정규화 방법?
- 일단 수직 분할은 특정 칼럼 단위로 테이블을 분할하여 디스크 I / O를 줄일 수 있는 방법이다.
- 반정규화의 대상
- 디스크 I / O량이 많아 성능이 저하될 때
- 경로가 너무 멀어 조인으로 성능이 저하될 때
- 컬럼을 계산하여 읽을 때
- 디스크 I / O량이 많아 성능이 저하될 때
- 반정규화의 개념
- 시스템의 성능 향상
- 개발 및 운영의 편의성 등을 위해 정규화된 데ㅔ이터 모델을 통합, 중보그 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위
- 시스템의 성능 향상
- 반정규화의 특징
- 반정규화를 수행하면 스스템의 성능이 향상되고 관리 효율성을 증가시키지만 데이터의 일관성 및 정합성이 저하될 수 있다.
- 과도한 반정규화는 오히려 성능을 저하시킨다.
- 반정규화를 위해서는 사전에 데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화를 우선으로 할지를 결정해야 한다.
- 반정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등이 있다.
- 반정규화를 수행하면 스스템의 성능이 향상되고 관리 효율성을 증가시키지만 데이터의 일관성 및 정합성이 저하될 수 있다.
- 반정규화 방법
- 테이블 병합
- 1 : 1관계 : 1 : 1관계를 통합하여 성능 향상
- 1 : M관계 : 1 : M관계를 통합하여 성능 향상
- 슈퍼 / 서브타입 : 슈퍼 / 서브 관계를 통합하여 성능 향상 - 테이블 분할
- 수직분할 : 컬럼 단위의 테이블을 디스크 I / O를 분산처리하기 위해 테이블을 1 : 1로 분리하여 성능 향상(트랜잭션의 처리되는 유형파악이 선행되어야 한다.)
- 수평분할 : 행(레코드)단위로 집중 발생되는 트랜잭션을 분석하여 디크스 I / O및 데이터 접근의 효율성을 높여 성능을 향상하기 위해 행 단위로 테이블을 쪼갠다. - 테이블 추가
- 중복테이블 추가 : 다른 업무 or 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을 제거하고 성능을 향상시킨다.
- 통계테이블 추가 : SUM, AVG등을 미리 수행하여 계산해 둠으로써 조회 시 성능을 향상시킨다.
- 이력테이블 추가 : 이력테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력 테이블에 존재하는 방법이다.
- 테이블 병합
2. 1, 2, 3차 정규화?
- 1차 정규화 : 테이블의 속성 하나는 하나의 속성값만을 가져야 한다.
- 2차 정규화 : 기본키 중에 특정 컬럼에만 종속된 컬럼이 존재할 경우 테이블을 분해한다.
- 3차 정규화 : 제 2정규형을 만족하는 상태에서 이행 함수 종속을 제거하는 정규화 과정이다. 주식별자를 제외한 컬럼간의 종속성을 확인해서 종속성이 있으면 분할하는 과정이다.
3. 슈퍼 / 서브타입 데이터 모델
- 슈퍼 / 서브타입 데이터 모델의 변환타입 비교
- One To One Type
- 특징 : 개별 테이블 유지
- 확장성 : 우수함
- 조인성능 : 나쁨
- I / O량 성능 : 좋음
- 관리용이성 : 나쁨
- 트랜잭션 유형에 따른 선택방법 : 개별테이블로 접근이 많은 경우 선택한다. - Plus Type
- 특징 : 슈퍼 + 서브 테이블
- 확장성 : 보통
- 조인성능 : 나쁨
- I / O량 성능 : 좋음
- 관리용이성 : 나쁨
- 트랜잭션 유형에 따른 선택방법 : 슈퍼 + 서브 형식으로 데이터를 처리하는 경우 선택한다. - Single Type
- 특징 : 하나의 테이블
- 확장성 : 나쁨
- 조인성능 : 우수함
- I / O량 성능 : 나쁨
- 관리용이성 : 좋음
- 트랜잭션 유형에 따른 선택방법 : 전체를 일괄적으로 처리하는 경우 선택한다.
- One To One Type
4. 데이터베이스 모델링의 설명
- 도메인은 속성이 가질 수 있는 값의 범위이다.(값의 허용범위이다.)
5. 엔티티의 종류
- 독립 엔티티(Kernel Entity, Master Entity) : 사람, 물건, 장소 등과 같이 현실세계에 존재하는 엔티티
- 업무중심 엔티티(Transaction Entity) : Transaction이 실행되면서 발생하는 엔티티
- 종속 엔티티(Dependent Entity) : 주로 1차 정규화로 인해 관련 중심엔티티로부터 분리된 엔티티
- 교차 엔티티(Intersaction Entity) : M : M의 관계를 해소하려는 목적으로 만들어진 엔티티
- 유형, 무형에 따른 엔티티 종류
- 유형 엔티티 : 업무에서 도출되며 지속적으로 사용되는 엔티티
- 개념 엔티티 : 개념적으로 사용되는 엔티티, 유형 엔티티는 물리적 형태가 있지만, 개념 엔티티는 물리적 형태가 없다.
- 사건 엔티티 : 비즈니스 프로세스를 실행하면서 생성되는 엔티티
- 유형 엔티티 : 업무에서 도출되며 지속적으로 사용되는 엔티티
- 발생시점에 따른 엔티티 종류
- 기본 엔티티 : 다른 엔티티로부터 영향을 받지 않고 독립적으로 생성되는 엔티티, 키 엔티티라고도 한다.
- 중심 엔티티 : 기본 엔티티와 행위 엔티티 간의 중간에 있는 엔티티, 기본 엔티티로부터 발생되고 행위 엔티티를 생성하는 엔티티
- 행위 엔티티 : 2개 이상의 엔티티로부터 발생하는 엔티티, 지속적으로 정보가 추가되고 변경되는 엔티티
- 기본 엔티티 : 다른 엔티티로부터 영향을 받지 않고 독립적으로 생성되는 엔티티, 키 엔티티라고도 한다.
6. ERD 작성 절차
- 엔티티를 그린다.
- 엔티티를 적절하게 배치한다.
- 엔티티 간에 관계를 설정한다.
- 관계명을 기술한다.
- 관계의 참여도를 기술한다.
- 관계의 필수 여부를 기술한다.
7. 비즈니스 프로세스에 의하여 만들어지는 식별자?
- 대체 여부에 따라서 본질 식별자와 인조 식별자로 분류된다.
- 비즈니스 프로세스에 의해 만들어지는 식별자는 "본질 식별자"이다.
8. SQL문 빈칸 채우기?
- "CONNECT BY" -> ORACLE이 지원하는 질의 방법으로 계층형 구조를 탐색할 수 있다.
- 정렬할때 계층형 구조까지 보존하려면 ORDER SIBLINGS BY절을 사용해야 한다.
(같은 부모를 가진 로우, 즉 레벨이 같은 형제 로우에 한해서 정렬이 수행된다.)
9. 아래와 같은 SQL문?
- GROUP BY CUBE(DEPTNO, JOB) 은 소계, 총계 등 모든 합계를 구하는 것이다.
2. 에서 GROUPING SETS(DEPTNO, JOB, (DEPTNO, JOB), ())이므로 DEPTNO의 합, JOB의 합, (DEPTNO, JOB)의 합, 소계의 합을 구하는 SQL문이므로 CUBE와 같이 모든 합을 다 구하는 것이다.
10. SQL문에서 오류가 발생하지 않는 것은?
- 번은 NAME에 DATE타입의 데이터를 입력하여 ERROR가 발생한다.
- 번은 AGE에 NOT NULL인데 NULL값이 들어가 ERROR가 발생한다.
- 번은 ID(PK)값을 입력하지 않아서 ERROR가 발생한다.
11. 계층형 쿼리문의 설명으로 옳지 않은 것?
- NOT IN (3)이므로 3이 포함되면 전개를 멈춘다.
- CONNECT BY PRIOR ID = PARENT_ID이므로 부모ID를 기준으로 자식 ID를 검색하는 순방향 전개이다.
- 중복이 생겼을 때 루프를 돌지 않기 위해 NO CYCLE옵션을 사용할 수 있다.
- ORDER SIBLINGS BY 를 수행하게 되면 전체 테이블이 아니라 계층형으로 된 데이터 값을 기준으로 정렬된다.
12. 인덱스 스캔 방식
- UNIQUE SCAN : 유일한 값 하나 찾기, 예를 들어 고객아이디 찾기.
- RANGE SCAN : 어떠한 조건에서 한 범위를 찾기, 예를 들어 주문번호 찾기.
- FULL SCAN : 전체 데이터 * 전체 행 찾기
- DECENDING : 인덱스 역순으로 찾기, 최댓값 찾기에 유리하다.
(ASC : 최소값 찾기에 유리하다.)
13. SQL문의 실행 결과?
- CASE 문을 사용해서 정렬의 순서를 변경했으므로 ID = 13, ID = 10인 수가 먼저 조회된다.
- 그 다음 AGE DESC이므로 13의 AGE가 먼저 조회된다.
- 따라서 1번이 정답이다.
14. SQL문 실행 결과?
- ORDER BY (CASE WHEN ID = 1000 THEN 0 ELSE ID END)를 통해 ID가 1000인 것들을 0으로 바꾸고 ID값으로 ASC한다.
- 그리고 HAVING COUNT(*) = 2를 통해 카운트한 값이 2인 것들만 남기면 3000, 9999가 남는다.
- 따라서 ID에는 3000, 9999가 들어가야 한다.
15. SUB QUERY의 유형은?
- 메인쿼리의 값을 서브쿼리에서 주입을 받아서 비교하는 것으로 상호연관 서브쿼리(CORRELATED SUB QUERY)이다.
- 서브쿼리에 * A.EMPNO 값을 매번 가져와서 대입해야 하므로 성능이 좋지 않다.
16. KPI-POOL 테이블에서 특정 하나의 값에 대한 자신의 상위 KPI를 검색하는 SQL문은?
- 특정 하나의 값에 대한 자신의 상위 KPI를 검색하는 것으로, MAINKPI가 0부터 출발하여 WHERE SUBKPI가 30이면(특정 하나의 값) 30의 상위 KPI(MAINKPI = 20)이 같이 출력된다.
- PRIOR -> 자식 -> 부모 -> 순방향 전개
- PRIOR -> 부모 -> 자식 -> 역방향 전개
17. 결과가 동일한 SQL문?
- 문제의 SQL문이 SUBKPI가 20이고 MAINKPI가 10 이거나 SUBKPI가 0이고 MAINKPI가 30인 행을 출력하는 문제이다.
- KPIPOOL을 보면 SUBKPI가 20이고 MAINKPI가 10은 하나 존재한다.
하지만 SUBKPI가 0이고 MAINKPI가 30인 행은 없다. - 따라서 SUPKPI = 20인 행을 고르면 되기 때문에 정답은 1번이다.
18. 서브쿼리?
- 서브쿼리에서는 정렬을 수행가시 위해서 내부에 ORDER BY 를 사용하지 못한다.
- 여러 개의 행을 되돌리는 서브쿼리는 다중행 연산자를 사용해야 한다.
- EXIST는 TRUE와 FALSE만 되돌린다.
- 메인쿼리에서는 서브쿼리의 컬럼은 자유롭게 사용할 수 없다.
19. ORACLE데이터에서 날짜를 조회하는 방법?
- 오늘 날짜를 구하기 위해서는 SYSDATE + 1을 해주고, 데이트 타입을 문자열로 변환해주어야 한다.
20. CURSOR의 처리단계
- 명시적 커서 선언 -> Cursor 커서이름
- 명시적 커서 오픈 -> Open 커서이름
- 커서에서 데이터 추출 -> Fetch 커서이름
- 커서 종료 -> Close 커서이름
- CURSOR -> OPEN -> FETCH -> CLOSE!!!!!!!!
21. HASH JOIN?
- 조인 컬럼의 인덱스가 존재하지 않을 경우에도 사용할 수 있다.
- 해시 함수를 이용하여 조인을 수행하기 때문에 '='로 수행하는 조인으로 동등 조건에만 사용가능하다.
- 해시 함수가 적용될 때 동일한 값을 항상 같은 값으로 해싱됨이 보장된다.
- HASH JOIN 작업을 수행하기 위해 해시 테이블을 메모리에 생성해야 한다.
- 메모리에 적재할 수 있는 영역의 크기보다 커지면 임시 영역에 해시 테이블을 저장한다.
- HASH JOIN을 할 때는 결과 행의 수가 적은 테이블을 선행 테이블로 사용하는 것이 좋다.
- 선행 테이블을 Build input이라 하며, 후행 테이블을 Prove input이라고 한다.
22. 3차 정규형을 만족할 때 엔티티의 갯수는?
- 2차 정규화
- 3차 정규화
- 2차 정규화 -> 3차 정규화(종속 존재를 분해한다.) 학번, 코스코드(FK), 평가코드(FK)로 총 3개로 된다.
23. 숫자함수
- ROUND(반올림)
- ABS(절대값)
- FLOOR(CEIL의 반대, 정수로 내림)
- TRUNC(소수점 버림)
- CEIL(FLOOR의 반대, 정수로 올림)
24. 빈칸에 맞는 말?
- "ROLE"은 데이터베이스에서 OBJECT(테이블, 프로시저, 뷰)등의 권한을 묶어서 관리할 수 있다.
25. SQL문 실행 결과는?
- WHERE 조건이 A.COL1 = B.COL1이므로 A.COL1 = 1일 때, B.COL1 = 1인 레코드 -> 2개
A.COL1 = 1일 때, B.COL1 = 1인 레코드 -> 2개
A.COL1 = 2일 때, B.COL1 = 2인 레코드 -> 1개
A.COL1 = 3일 때, B.COL1 = 3인 레코드 -> 2개
A.COL1 = 3일 때, B.COL1 = 3인 레코드 -> 2개
- 위와 같은 계산으로 2 + 2 + 1 + 2 + 2 = 9가된다.
26. SQL1과 동일한 값을 반환하도록 SQL2의 빈칸에 들어갈 서브쿼리 연산자는?
- SQL1의 결과는 (120, 400)이다.
- SQL2에 같은 결과를 반환하기 위해서는 빈칸에 EXIST를 작성해주어야 한다.
- 하위 쿼리가 하나 이상의 레코드를 반환하는 경우 TRUE, 그렇지 않은 경우 FALSE를 리턴한다.
'WorkHard > 자격증' 카테고리의 다른 글
[SQLD 개발자] 시험 전 마지막 요점정리 - 1 (0) | 2023.03.19 |
---|---|
[SQLD 개발자] 기출문제 공부(45회) (0) | 2023.03.18 |
[SQLD 개발자] 기출문제 공부(38회) (0) | 2023.03.18 |
[SQLD 개발자] 기출문제 공부(37회) (0) | 2023.03.16 |
[SQLD 개발자] 기출문제 공부(33회) (0) | 2023.03.15 |