4 minute read

해당 내용은 김강민 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. 계층형 쿼리 : 수직 관계의 트리 구조

  1. START WITH 절에 시작 조건 찾기
  2. 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. 데이터 모델링

프로세스 중심 데이터베이스

  • 절차도에 따라 프로그램이 이루어짐, 업무에만 집중해서 정보시스템 만듦
    → 서점에서 광고도 하면 프로세스 다름, 같은 정보 다 따로 씀
    → 안 맞는 경우 생김(데이터 퀄리티 떨어짐)

관계형 데이터베이스

  • 데이터의 관계에 집중, 프로세스 중심 데이터베이스 한계 극복
  • 핵심 정보들을 유기체적으로 연결시켜서 관계를 중심적으로 짜게 됨

객체지향 데이터베이스

  • 객체 하나하나에 집중한 데이터베이스 → 복잡

엔터티

  1. 정의
  • 업무 상 유용한 정보를 저장하고 관리하기 위한 집합적인 것
  • 사람, 장소, 물건, 사건, 개념 등 관심사
  • 과목 엔터티의 인스턴스 : 수학, 영어
  1. 엔터티의 특징
  • 반드시 필요한 정보
  • 유일한 식별자로 식별
  • 인스턴스 2개 이상
  • 속성 2개 이상
  • 다른 엔터티와 관계 1개 이상
  • 프로세스에 이용 되어야 함
  1. 엔터티 분류
  • 유형엔터티(강사), 개념엔터티(보험상품), 사건인터티(주문)
  • 기본/키엔터티(사원), 중심엔터티(주문), 행위엔터티(주문목록)

속성 : “인스턴스들의 집합”

  • 관리하고자 하는 대상(인스턴스)의 특성, 고유한 성질
  • 기본특성(사원이름), 설계특성(부서번호), 파생속성(총결제금액)

도메인 : “속성이 가질 수 있는 값의 범위”

  • 데이터 유형, 크기, 제약조건 등
  • 물리적 데이터 모델링 시 CHECK, PK 등이 도메인이 됨

23. 관계

  1. IE (네모난 모양) / BARKER (둥근셀, *사용)
  2. 공통점 : 까마귀발
  3. 차이점 : 관계선택사항 표기방법
  • IE : 원과 짝대기
  • BARKER : 실선과 점선

24. 식별자

  • 주식별자 특징 : 유최불존
    • 유일성 : 인스턴스를 유일하게 구분할 속성
    • 최소성 : 최소로 식별
    • 불변성 : 한번 만들면 바뀌지 않음
    • 존재성 : NOT NULL
  • 유체불존 다 만족하면 후보키, 이 중 대표가 기본키, 그 외는 대체키 (대체키+기본키 = 후보키)

25. 식별자/비식별자 관계

  • 식별자 : 강한관계, PK 속성수 증가 → SQL 구문이 복잡해짐
  • 비식별자 : 약한관계, 조인 많음 → 느려짐
  • ERD 서술규칙 : 좌상 → 우하단, 관계명 반드시 표기 안해도 됨

26. 성능 데이터 모델링

  1. 아키텍쳐 모델링
  • 데이터베이스 구조를 바꾸는 방법
  • 테이블, 파티션 등 정규화/반정규화..
  • 가장 효과적. 더 성능이 좋음
  1. SQL 명령문 수정
  • 조인 수행 원리 (HASH JOIN 등)
  • Optimizer
  • 실행계획

27. 정규화 ★★★★

  1. 정규화 수행 방법
  • 1차 : 원자성 확보, 속성2개 자르기
  • 2차 : 부분함수 종속성 제거
  • 3차 : 이행함수 종속성 제거
  • BCNF : 후보키를 뜯어내는… 느낌
  1. 이상현상
  • 삭제 이상, 삽입 이상 등등
  1. 정규화 성능 효능
  • SELECT 절에서는 느려질 수 있음 (JOIN 때문에)
  • INSERT UPDATE에서는 증가할 수 있음

28. 반정규화

  1. 특징 : 데이터 무결성을 해칠 수 있음
  2. 절차 :
    → 대상 분석 (대량범위, 범위처리, 통계처리)
    → 다른 방법 고안 (응용 시스템 변경, 클러스터링/인덱스, 뷰 등)
    → 반정규화
  3. 테이블 반정규화
  • 병합(1:1, 1:M, 슈퍼/서브타입)
  • 분할(부분 테이블, 통계 테이블, 중복 테이블 분할)
  1. 속성 반정규화
  • 파생컬럼, 오류, 이력컬럼 추가, 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