SQLD

SQLD 정리 강의 요약(2) - 윈도우 함수 ~ 인덱스(Index))

주스 JUICE 2022. 3. 5. 21:25
728x90

✍️ 윈도우 함수(문제 풀기! 기출)

Rows, Range → 결과값 차이점 유의해서 보기

같은 값 유무 파악하기!

 

RANK : 중복 건너뛴다(1, 1, 3등 이렇게)

DENSE. RANK : 건너뛰기 X(1, 1, 2, 3등)

 

Partition by

Order by

 

의미 파악, 무조건 문제 풀어보기

 

 

✍️ 계층형 질의

⓵ prior 자식데이터 = 부모데이터 (프자부)

→ 부모데이터 = Prior 자식데이터 ~ 같은 의미!

⓶ 부모에서 자식으로 가면 순방향 (부자순)

 

prior

level 1 King empno

level 2 James mgr

level 3 Scott

 

현재 james의 mgr이 king의 empno라고 하면

prior empno = mgr

이런 식으로 구성한다는 것

현재값 james를 보았을 때 이전 king의 empno이다

 

 

✍️ 절차형 PL/SQL

Exception : 생략 가능

Procedure, trigger, user defined function 차이점

trigger : commit, rollback 관계, 보통 DML 많이 씀

procedure : 반드시 값이 안나옴

user defined function : 반드시 값 나옴

 

 

✍️ 데이터 모델링

업무 → 데이터 모델화시킴

 

 

 

✍️ 엔터티

⓵ 엔터티 = 업무상 관리하고자 하는 대상

병원에서 환자 관리할 때 엔터티는? = 환자

 

⓶ 특징

속성 2개 이상, 인스턴스 2개 이상, 관계 하나 이상 사용되어야 한다

업무에서 사용해야 하고, 업무 프로세스에 이용되어야 한다

 

⓷ 분류

유형 엔터티 / 개념 엔터티 / 사건 엔터티 (유개사)

기본 엔터티 / 중심 엔터티 / 행위 엔터티 (기중행)

 

 

✍️ 속성

엔터티 내에서 Scott이라는 사람이 있을 때 입은~ 머리는~ 이러한 특성들

관리하고자 하는 대상인 인스턴스의 고유한 특징 = 속성

속성 = 인스턴스들의 집합

 

⓶ 분류

기설파

기본 속성 / 설계 속성 / 파생 속성

정의 파악하기

 

 

✍️ 도메인

데이터 유형, 크기, 제약조건 지정해줌(값의 범위)

물리적 데이터 → check, primary key

 

 

✍️ 관계 식별자

IE

식별자 위로 - PK
나머지 일반 속성들

관계 만들 때

까마귀 발은 동일

 

관계 선택 사항을 어떻게 표기하는가

필수 관계는 ㅣ로

선택 관계는 ㅇl로 표기

 

식별자/비식별자 관계 표기법(ERD) - IE에만 있음

점선은 비식별자, 점선은 식별자

 

 

Barker 둥근 박스

# ~ pk 서술 방식



관계 선택 사항을 어떻게 표기하는가

실선(mandatory)과 점선(optional)으로 표현

 

 

✍️ 식별자

주식별자 특징(4) : 유최불존

유일성, 최소성, 불변성, 존재성

-> 다 만족 시 후보키 될 수 있고

그 중 대표로 선정되면 기본키(primary key)

대체키(alternativie key)

기본키 + 대체키 = 후보키

 

유일성 : 그 인스턴스를 유일하게 구분해낼 수 있는 속성

최소성 : 여러가지 속성을 묶어서도 식별자 가능&최소여야 함

불변성 : 한 번 만들어놓으면 바뀌지 않아야 한다

존재성 : NOT NULL 조건, null 허용되지 않음

 

 

✍️ 식별자 관계, 비식별자 관계

식별자 비식별자
강한 관계 약한 관계
*단점
SQL 구문 복잡
PK 속성 수 ⬆
*단점
불필요한 조인으로
느려진다

 

ERD에서 어떻게 기술되는지 파악하기

ERD 서술 규칙

⓵ 시선 좌상 → 우하

⓶ 관계명 반드시 표기 안해도 됨

(⓷ UML → 객체 지향에서만 쓰인다)

 

 

✍️ 성능 데이터 모델링

⓵ 아키텍처

데이터들의 구조(테이블, 파티션) 정규화, 반정규화

데이터베이스의 구조를 바꾸는 방법

→ 성능 개선, 주방 구조 바꾸는 게 가장 효과적이고 빠름

 

⓶ SQL 명령문

조인 수행 원리(4문제 출제됨)

Optimizer

실행계획(보통 1문제)

 

 

✍️ 정규화

정규화 수행 방법 보고 가기!

1차 : 원자성 확보(속성값 2개인거 잘라내기)

2차 : 부분함수 종속성 제거

3차 : 이행함수 종속성 제거

BCNF : 후보키가 상속하는 거 제거, 후보키가 두 개 이상의 복합키가 있을 후보키를 뜯어냄

 

2차, 3차 예시 잘 보고 들어가기

 

⓶ 이상현상

삭제, 삽입이상 등 예시

 

⓷ 성능

select절에서는 조인 때문에 느려질 수 있음

그러나 insert, update에서는 더 증가할 수 있다

 

다른 성능 모델링 하기 전에 정규화 제일 먼저 실행

 

 

✍️ 반정규화

특징

데이터 무결성을 해침

 

처음 정규화할 때 대상 분석을 함 (대범한 통조림)

: 대량범위 처리 빈도수 조사, 범위 처리 빈도수 조사, 통계 처리 여부 조사

 

반정규화 들어가는 게 아니라 다른 방법 고안(응클뷰)

응용 시스템 변경

클러스터링/인덱스 처리 고려

뷰 처리 고려

 

이것마저도 안되면 반정규화 들어감

 

반정규화 방법 (테속관)

테이블 : 병합(1:1, 1:M, 슈퍼/서브타입 병합), 분할(부분테이블, 통계테이블, 중복테이블, ...)

속성 : 파오리/ 파생칼럼, 오류가 나지 않도록 임시 컬럼, 이력 컬럼, PK→일반속성으로 편입, 중복속성, ... 

관계 : 중복 관계 추가

~ 정의랑 뭐가 있는지 암기  

 

 

✍️ 데이터에 따른 성능

row migration

chaining

특징, 언제 발생하는지 정도 그냥 읽어보기

 

→ 해결할 수 있는 방법 : Partitioning

list partitioning

range partitioning : 관리 쉬움, 가장 많이 쓰인다

hash partitioning : 관리 어려움

각각 특징 문제 나올 수 있음(관리를 얼마나 쉽게 할 수 있는가, 관리 용이성 문제 다수 : range가 가장 쉬움)

 

 

✍️ 슈퍼 / 서브타입

서브타입 : 용량별 처리 가능

 

용량

- 작은 경우 : one to one 타입을 사용 ㅁ-ㅁ-ㅁ(트랜잭션이 개별로 들어감)

- 큰 경우 : 트랜잭션 유형으로 분류

 

트랜잭션

⓵ 공통점 / 차이점에 따라서 별개로 트랜잭션이 들어온다 : plus type 사용

⓶ 전체 통합 : single type(하나의 통합된 테이블)

 

 

✍️ 분산 데이터 베이스

투명성이라는 개념 있음(중요도 떨어짐)

 

가장 큰 특징

여러 서버로 뜯어놓는 것 = 반정규화와 유사

가장 큰 특징이 데이터 무결성 해친다

 

 

✍️ 조인 수행 원리 (4문제)

문제 많이 풀고 인터넷 관련 내용 찾아보기 정말 많이 나옴

 

⓵ NL : 랜덤액세스, 대용량 sort 작업 시 유리

⓶ Sort merge : 조인키 기준으로 정렬, 등가/비등가 조인

⓷ Hash : 등가조인만 사용, 함수처리한다, 선행테이블 작다, hash 처리하기 때문에 별도 저장공간 필요(은근 데이터 잡아먹음)

 

SQL 실전자격검정에 있는 선택지만 외우고 들어가면 됨

 

 

✍️ 옵티마이저

CBO : Cost Based Optimizer (경로 짜봤을 때 가장 경제적인 것)

RBO : Rule Based Optimizer (규칙에 따라서 옵티마이징 이루어진다)

 

 

✍️ 인덱스

인덱스 언제 사용?

❌ 부정형, LIKE 함수, 묵시적 형변환할 땐 사용 ❌

 

인덱스 사용 시 성능 저하 

insert, update, delete (목차를 계속 바꾸게 되므로 성능 저하)

 

 

✍️ 실행 계획

실행 순서 무조건 1문제 나옴

 

1

2

3

4

5

 

들여쓰기해서 1번, 2번, 3번, 4번, 5번 실행순서로 옳은 것은?

들어가기 했을 수록 빨리 작동함

제일 앞에 있는 게 제일 느림

제일 느린 애부터 씀

같은 레벨 2, 4 - 위에 있는 거 먼저 씀

2보다 3이 빠르고 5보다 4가 빠름

 

(3-2)-(5-4)-1

 

제일 마지막에 실행되는 것을 바로 빼버리기

같은 레벨인 경우 뭉텅이로 처리

뭉텅이 사이의 우열은 들여쓰기 얼마나 되어있나로 따지기

 

 

 

 

 


정규화 많이 보기

PIVOT

UNPIVOT

빈칸 나오면 뭐쓸지 아는 정도

MERGE 보기

728x90