[SQLD/개정] 최종 정리 노트 - 김강민SQLD (2/2)
해당 내용은 김강민 SQLD ‘SQLD 최종 정리강의 2편’과 관련된 내용입니다.
관련 영상 링크 : https://www.youtube.com/watch?v=PjCSvexo3Ow
당부 말씀드립니다. 제 게시글을 활용할 시, 본인 블로그에 출처 명시를 꼭 부탁드립니다.
19. 윈도우 함수 ★★★
- ROWS, RANGE 결과 값 차이점
순위함수
- RANK : 동일 점수, 중복 건너뜀 (1등, 2등, 2등, 4등)
- DENSE_RANK : 동일 점수, 중복 건너뛰지 X (1등, 2등, 2등, 3등)
- ROW_NUMBER : 고유 점수 부여 (1등, 2등, 3등, 4등)
- PARTITION BY : 파티션별 순위 매김
SELECT DEPTNO, EMPNO, ENAME, SAL
DENSE_RANK() OVER (ORDER BY SAL DESC) AS RANK
FROM SCOTT.EMP;
SELECT DEPTNO, EMPNO, ENAME, SAL
RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) AS RANK
FROM SCOTT.EMP;
-- PARTITION BY 가 ORDER BY 보다 먼저 옴
20. 계층형 쿼리 : 수직 관계의 트리 구조
- START WITH 절에 시작 조건 찾기
- CONNECT BY 절대 연결 조건 찾기
SELECT DEPT_NAME, DEP_CD, PARENT_CD, LEVEL
FROM DEP
START WITH PARENT_CD IS NULL -- 최상위 노드 설정
CONNECT BY PRIOR DEP_CD = PARENT_CD; -- PRIOR 자식데이터 = 부모데이터
21. 절차형 PL/SQL
- EXCEPTION 예외처리 생략 가능
- PROCEDURE
- 개발자가 자주 실행해야 하는 로직을 절차적 언어를 사용해 저장한 프로그램 모듈
- 반드시 값 낼 필요 없음
- EXECUTE 명령어로 실행, COMMIT & ROLLBACK 가능
- TRIGGER
- DML 문 수행 시 DB에서 자동으로 동작
- 생성 후 자동 실행
- COMMIT & ROLLBACK 불가
- USER DEFINED FUNCTION
- RETURN을 사용해서 하나의 값을 반드시 돌려줘야함
CREATE PROCEDURE 프로시저이름... BEGIN.... END;
CREATE FUNCTION 유저함수... RETURN... BEGIN... END;
22. 데이터 모델링
프로세스 중심 데이터베이스
- 절차도에 따라 프로그램이 이루어짐, 업무에만 집중해서 정보시스템 만듦
→ 서점에서 광고도 하면 프로세스 다름, 같은 정보 다 따로 씀
→ 안 맞는 경우 생김(데이터 퀄리티 떨어짐)
관계형 데이터베이스
- 데이터의 관계에 집중, 프로세스 중심 데이터베이스 한계 극복
- 핵심 정보들을 유기체적으로 연결시켜서 관계를 중심적으로 짜게 됨
객체지향 데이터베이스
- 객체 하나하나에 집중한 데이터베이스 → 복잡
엔터티
- 정의
- 업무 상 유용한 정보를 저장하고 관리하기 위한 집합적인 것
- 사람, 장소, 물건, 사건, 개념 등 관심사
- 과목 엔터티의 인스턴스 : 수학, 영어
- 엔터티의 특징
- 반드시 필요한 정보
- 유일한 식별자로 식별
- 인스턴스 2개 이상
- 속성 2개 이상
- 다른 엔터티와 관계 1개 이상
- 프로세스에 이용 되어야 함
- 엔터티 분류
- 유형엔터티(강사), 개념엔터티(보험상품), 사건인터티(주문)
- 기본/키엔터티(사원), 중심엔터티(주문), 행위엔터티(주문목록)
속성 : “인스턴스들의 집합”
- 관리하고자 하는 대상(인스턴스)의 특성, 고유한 성질
- 기본특성(사원이름), 설계특성(부서번호), 파생속성(총결제금액)
도메인 : “속성이 가질 수 있는 값의 범위”
- 데이터 유형, 크기, 제약조건 등
- 물리적 데이터 모델링 시 CHECK, PK 등이 도메인이 됨
23. 관계
- IE (네모난 모양) / BARKER (둥근셀, *사용)
- 공통점 : 까마귀발
- 차이점 : 관계선택사항 표기방법
- IE : 원과 짝대기
- BARKER : 실선과 점선
24. 식별자
- 주식별자 특징 : 유최불존
- 유일성 : 인스턴스를 유일하게 구분할 속성
- 최소성 : 최소로 식별
- 불변성 : 한번 만들면 바뀌지 않음
- 존재성 : NOT NULL
- 유체불존 다 만족하면 후보키, 이 중 대표가 기본키, 그 외는 대체키 (대체키+기본키 = 후보키)
25. 식별자/비식별자 관계
- 식별자 : 강한관계, PK 속성수 증가 → SQL 구문이 복잡해짐
- 비식별자 : 약한관계, 조인 많음 → 느려짐
- ERD 서술규칙 : 좌상 → 우하단, 관계명 반드시 표기 안해도 됨
26. 성능 데이터 모델링
- 아키텍쳐 모델링
- 데이터베이스 구조를 바꾸는 방법
- 테이블, 파티션 등 정규화/반정규화..
- 가장 효과적. 더 성능이 좋음
- SQL 명령문 수정
- 조인 수행 원리 (HASH JOIN 등)
- Optimizer
- 실행계획
27. 정규화 ★★★★
- 정규화 수행 방법
- 1차 : 원자성 확보, 속성2개 자르기
- 2차 : 부분함수 종속성 제거
- 3차 : 이행함수 종속성 제거
- BCNF : 후보키를 뜯어내는… 느낌
- 이상현상
- 삭제 이상, 삽입 이상 등등
- 정규화 성능 효능
- SELECT 절에서는 느려질 수 있음 (JOIN 때문에)
- INSERT UPDATE에서는 증가할 수 있음
28. 반정규화
- 특징 : 데이터 무결성을 해칠 수 있음
- 절차 :
→ 대상 분석 (대량범위, 범위처리, 통계처리)
→ 다른 방법 고안 (응용 시스템 변경, 클러스터링/인덱스, 뷰 등)
→ 반정규화 - 테이블 반정규화
- 병합(1:1, 1:M, 슈퍼/서브타입)
- 분할(부분 테이블, 통계 테이블, 중복 테이블 분할)
- 속성 반정규화
- 파생컬럼, 오류, 이력컬럼 추가, PK 일반 속성으로 편입, 중복 속성..
- 관계 반정규화
- 중복 관계 추가
29. 대량 데이터에 따른 성능
- 로우 마이그레이션, 로우 체이닝 → 해결방안 : 파티셔닝 (List, Range, Hash)
- 관리를 얼마나 쉽게 할 수 있냐?
- Hash가 관리 어려움
- Range가 관리 쉽고 가장 많이 쓰인다.
30. 슈퍼/서브타입
- 용량 적은 경우의 트렌젝션 : One to One ㅁ-ㅁ-ㅁ (트렌젝션이 개별로 들어감)
- 용량 큰 경우의 트렌젝션
- 공통/차이점에 따라 별개로 트렌젝션이 들어옴 : 슈퍼/서브타입 플러스 타입
- 전체 통합 트렌젝션 : 하나의 통합된 테이블인 싱글 타입
- Q. 다음 중 언제 쓰냐? 물어봄
31. 분산데이터베이스
- 여러개 서버로 뜯어놓음 - 반정규화랑 유사
- 데이터 무결성을 해칠 수 있다
32. 조인 수행 원리 ★★★ 4문제 나옴
- NL JOIN : 랜덤 엑세스, 대용량 SORT 작업 시 유리
- SORT MERGE : JOIN KEY 기준 정렬, 등가/비등가 조인
- HASH JOIN : 등가 조인 only, 함수처리, 선행테이블이 작음, 별도 저장 공간 필요 (은근히 데이터 잡아먹음)
33. 옵티마이저
- COST BASE 옵티마이저 : 싸고 경제적
- RULE BASE 옵티마이저 : 규칙에 따라 이루어짐
34. 인덱스
- 인덱스 언제 사용되는지?
- 부정형, LIKE 함수, 묵시적 형변환에 안 쓰임
- 사용시 느려지는게 있음 (성능감소)
- DML 들! INSERT, UPDATE, DELETE (인덱스 넣었다 뺐다 하면 책 두깨가 왔다갔다 하니까 목차를 계속 바꿔야함)
35. 실행계획
- 실행 순서에 대한 이야기 ★
- 제일 느린애부터 씀
- 같은 레벨이면 뭉텅이로 처리
- 뭉텅이 사이에 우열은 들여쓰기로 따짐
- 정규화
- PIVOT, UNPIVOT
- MERGE