데이터 모델링의 이해
데이터 모델링의 이해
1. 데이터 모델링의 이해
- 모델링의 이해
- 모델링의 정의
- 모델링의 특징
- 모델링의 세 가지 관점
- 데이터 모델의 기본 개념의 이해
- 모델링의 정의
- 데이터 모델이 제공하는 기능
- 데이터 모델링의 중요성 및 유의점
- 파급효과(Leverage)
- 복잡한 정보 요구사항의 간결한 표현(Conciseness)
- 데이터 품질(Data Quality)
- 데이터 모델링의 3단계 진행
- 개념적 데이터 모델링(Conceptual Data Modeling)
- 논리적 데이터 모델링(Logical Data Modeling)
- 물리적 데이터 모델링(Physical Data Modeling)
- 프로젝트 생명주기(Life Cycle)에서 데이터 모델링
- 데이터 모델링에서 데이터독립성의 이해
- 데이터독립성의 필요성
- 데이터베이스 3단계 구조
- 데이터독립성 요소
- 두 영역의 데이터독립성
- 사상(Mapping)
- 데이터 모델링의 중요한 세 가지 개념
- 데이터 모델링의 세 가지 요소
- 단수와 집합(복수)의 명명
- 데이터 모델링의 이해관계자
- 이해관계자의 데이터 모델링 중요성 인식
- 데이터 모델링의 이해관계자
- 데이터 모델의 표기법인 ERD의 이해
- 데이터 모델 표기법
- ERD(Entity Relationship Diagram) 표기법을 이용하여 모델링하는 방법
- 좋은 데이터 모델의 요소
- 완전성(Completeness)
- 중복배제(Non-Redundancy)
- 업무규칙(Business Rules)
- 데이터 재사용(Data Reusability)
- 의사소통(Communication)
- 통합성(Integration)
2. 엔터티
- 엔터티의 개념
- 엔터티와 인스턴스에 대한 내용과 표기법
- 엔터티의 특징
- 업무에서 필요로 하는 정보
- 식별이 가능해야 함
- 인스턴스의 집합
- 업무프로세스에 의해 이용
- 속성을 포함
- 관계의 존재
- 엔터티의 분류
- 유무(有無)형에 따른 분류
- 발생시점(發生時點)에 따른 분류
- 엔터티 분류 방법의 예
- 엔터티의 명명
3. 속성(Attribute)
- 속성 (Attribute)의 개념
- 엔터티, 인스턴스와 속성, 속성값에 대한 내용과 표기법
- 엔터티, 인스턴스, 속성, 속성값의 관계
- 속성의 표기법
- 속성의 특징
- 속성의 분류
- 속성의 특성에 따른 분류
- 엔터티 구성방식에 따른 분류
- 도메인(Domain)
- 속성의 명명(Naming)
4. 관계(Relationship)
- 관계의 개념
- 관계의 정의
- 관계의 패어링
- 관계의 분류
- 관계의 표기법
- 관계명(Membership)
- 관계차수(Degree/Cardinality)
- 관계선택사양(Optionality
- 관계의 정의 및 읽는 방법
- 관계 체크사항
- 관계 읽기
5. 식별자(Identifiers)
- 식별자(Identifiers) 개념
- 식별자의 특징
- 식별자 분류 및 표기법
- 식별자 분류
- 식별자 표기법
- 주식별자 도출기준
- 해당 업무에서 자주 이용되는 속성을 주식별자로 지정하도록 함
- 명칭, 내역 등과 같이 이름으로 기술되는 것은 피함
- 속성의 수가 많아지지 않도록 함
- 식별자관계와 비식별자관계에 따른 식별자
- 식별자관계와 비식별자 관계의 결정
- 식별자관계
- 비식별자관계(Non-Identifying Relationship)
- 식별자 관계로만 설정할 경우의 문제점
- 비식별자 관계로만 설정할 경우의 문제점
- 식별자관계와 비식별자관계 모델링
데이터 모델과 성능
1. 성능 데이터 모델링의 개요
- 성능 데이터 모델링의 정의
- 성능 데이터 모델링 수행시점
- 성능 데이터 모델링 고려사항
2. 정규화와 성능
- 정규화를 통한 성능 향상 전략
- 반정규화된 테이블의 성능저하 사례1
- 반정규화된 테이블의 성능저하 사례2
- 반정규화된 테이블의 성능저하 사례3
- 반정규화된 테이블의 성능저하 사례4
- 함수적 종속성(Functional Dependency)에 근거한 정규화 수행 필요
3. 반정규화와 성능
- 반정규화를 통한 성능향상 전략
- 반정규화의 정의
- 반정규화의 적용방법
- 반정규화의 기법
- 테이블 반정규화
- 칼럼 반정규화
- 관계 반정규화
- 정규화가 잘 정의된 데이터 모델에서 성능이 저하될 수 있는 경우
- 정규화가 잘 정의된 데이터 모델에서 성능이 저하된 경우
4. 대량 데이터에 따른 성능
- 대량 데이터발생에 따른 테이블 분할 개요
- 한 테이블에 많은 수의 칼럼을 가지고 있는 경우
- 대량 데이터 저장 및 처리로 인해 성능
- RANGE PARTITION 적용
- LIST PARTITION 적용
- HASH PARTITION 적용
- 테이블에 대한 수평분할/수직분할의 절차
5. 데이터베이스 구조와 성능
- 슈퍼타입/서브타입 모델의 성능고려 방법
- 슈퍼/서브타입 데이터 모델의 개요
- 슈퍼/서브타입 데이터 모델의 변환
- 슈퍼/서브 타입 데이터 모델의 변환기술
- 슈퍼/서브타입 데이터 모델의 변환타입 비교
- 인덱스 특성을 고려한 PK/FK 데이터베이스 성능향상
- PK/FK 칼럼 순서와 성능개요
- PK칼럼의 순서를 조정하지 않으면 성능이 저하 이유
- PK순서를 잘못 지정하여 성능이 저하된 경우 - 간단한 오류
- PK순서를 잘못 지정하여 성능이 저하된 경우 - 복잡한 오류
- 물리적인 테이블에 FK제약이 걸려있지 않을 경우 인덱스 미생성으로 성능저하
6. 분산 데이터베이스와 성능
- 분산 데이터베이스의 개요
- 분산 데이터베이스의 투명성(Transparency)
- 분산 데이터베이스의 적용 방법 및 장단점
- 분산 데이터베이스 적용방법
- 분산 데이터베이스 장단점
- 분산 데이터베이스의 활용 방향성
- 데이터베이스 분산구성의 가치
- 분산 데이터베이스의 적용 기법
- 테이블 위치 분산
- 테이블 분할(Fragmentation) 분산
- 테이블 복제(Replication) 분산
- 테이블 요약(Summarization) 분산
- 분산 데이터베이스를 적용하여 성능이 향상된 사례
SQL 기본 및 활용
SQL 기본
1. 관계형 데이터베이스 개요
- 데이터베이스
- SQL(Structured Query Language)
- TABLE
- ERD(Entity Relationship Diagram)
2. DDL
- 데이터 유형
- CREATE TABLE
- 테이블과 칼럼 정의
- CREATE TABLE
- 제약조건(CONSTRAINT)
- 생성된 테이블 구조 확인
- SELECT 문장을 통한 테이블 생성 사례
- ALTER TABLE
- ADD COLUMN
- DROP COLUMN
- MODIFY COLUMN
- DROP CONSTRAINT
- ADD CONSTRAINT
- RENAME TABLE
- DROP TABLE
- TRUNCATE TABLE
3. DML
- INSERT
- UPDATE
- DELETE
- SELECT
- 산술 연산자와 합성 연산자
4. TCL
- 트랜잭션 개요
- COMMIT
- ROLLBACK
- SAVEPOINT
5. WHERE 절
- WHERE 조건절 개요
- 연산자의 종류
- 비교 연산자
- SQL 연산자
- 논리 연산자
- 부정 연산자
- ROWNUM, TOP 사용
6. 함수(FUNCTION)
- 내장 함수(BUILT-IN FUNCTION) 개요
- 문자형 함수
- 숫자형 함수
- 날짜형 함수
- 변환형 함수
- CASE 표현
- NULL 관련 함수
- NVL/ISNULL 함수
- NULL과 공집합
- NULLIF
- 기타 NULL 관련 함수 (COALESCE)
7. GROUP BY, HAVING 절
- 집계 함수(Aggregate Function)
- GROUP BY 절
- HAVING 절
- CASE 표현을 활용한 월별 데이터 집계
- 집계 함수와 NULL
8. ORDER BY 절
- ORDER BY 정렬
- SELECT 문장 실행 순서
- Top N 쿼리
9. JOIN
- JOIN 개요
- EQUI JOIN
- 선수-팀 EQUI JOIN 사례
- 선수-팀 WHERE 절 검색 조건 사례
- 팀-구장 EQUI JOIN 사례
- Non EQUI JOIN
- 3개 이상 TABLE JOIN
SQL 활용
1. 표준 조인(STANDARD JOIN)
- STANDARD SQL 개요
- 일반 집합 연산자
- 순수 관계 연산자
- FROM 절 JOIN 형태
- INNER JOIN
- NATURAL JOIN
- USING 조건절
- ON 조건절
- WHERE 절과의 혼용
- ON 조건절 + 데이터 검증 조건 추가
- ON 조건절 예제
- 다중 테이블 JOIN
- CROSS JOIN
- OUTER JOIN
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
- INNER vs OUTER vs CROSS JOIN 비
2. 집합 연산자(SET OPERATOR)
3. 계층형 질의와 셀프 조인
- 계층형 질의
- Oracle 계층형 질의
- SQL Server 계층형 질의
- 셀프 조인
4. 서브쿼리
- 단일 행 서브 쿼리
- 다중 행 서브쿼리
- 다중 칼럼 서브쿼리
- 연관 서브쿼리
- 그밖에 위치에서 사용하는 서브쿼리
- SELECT 절에 서브쿼리 사용하기
- FROM 절에서 서브쿼리 사용하기
- HAVING 절에서 서브쿼리 사용하기
- UPDATE문의 SET 절에서 사용하기
- INSERT문의 VALUES절에서 사용하기
- 뷰(View)
5. 그룹 함수
- 데이터 분석 개요
- ROLLUP 함수
- CUBE 함수
- GROUPING SETS 함수
6. 윈도우 함수
- WINDOW FUNCTION 개요
- 그룹 내 순위 함수
- RANK 함수
- DENSE_RANK 함수
- 일반 집계 함수
- SUM 함수
- MAX 함수
- MIN 함수
- AVG 함수
- COUNT 함수
- 그룹 내 행 순서 함수
- FIRST_VALUE 함수
- LAST_VALUE 함수
- LAG 함수
- LEAD 함수
- 그룹 내 비율 함수
- RATIO_TO_REPORT 함수
- PERCENT_RANK 함수
- CUME_DIST 함수
- NTILE 함수
7. DCL(DATA CONTROL LANGUAGE)
- DCL 개요
- 유저와 권한
- 유저 생성과 시스템 권한 부여
- OBJECT에 대한 권한 부여
- Role을 이용한 권한 부여
8. 절차형 SQL
- 절차형 SQL 개요
- PL/SQL 개요
- PL/SQL 특징
- PL/SQL 구조
- PL/SQL 기본 문법(Syntax)
- T-SQL 개요
- T-SQL 특징
- T-SQL 구조
- T-SQL 기본 문법(Syntax)
- Procedure의 생성과 활용
- User Defined Function의 생성과 활용
- Trigger의 생성과 활용
- 프로시저와 트리거의 차이점
SQL 최적화 기본 원리
1. 옵티마이저와 실행계획
- 옵티마이저
- 규칙기반 옵티마이저
- 비용기반 옵티마이저
- 실행계획
- SQL 처리 흐름도
2. 인덱스 기본
- 인덱스 특징과 종류
- 트리 기반 인덱스
- SQL Server의 클러스터형 인덱스
- 전체 테이블 스캔과 인덱스 스캔
- 전체 테이블 스캔
- 인덱스 스캔
- 전체 테이블 스캔과 인덱스 스캔 방식의 비교
3. 조인 수행 원리
- NL Join
- Sort Merge Join
- Hash Join
SQL 고급활용 및 튜닝
1. 아키텍처 기반 튜닝 원리
1. 데이터베이스 아키텍처
- 아키텍처 개관
- Oracle 아키텍처
- SQL Server 아키텍처
- 프로세스
- Server Processes
- Background Processes
- 파일 구조
- 데이터 파일
- 임시 데이터 파일
- 로그 파일
- 메모리 구조
- DB Buffer Cache
- Shared Pool
- Log Buffer
- PGA(Process Global Area)
- 대기 이벤트
- 라이브러리 캐시 부하
- 데이터베이스 Call과 네트워크 부하
- 디스크 I/O 부하
- 버퍼 캐시 경합
- LOCK 관련 대기 이벤트
2. SQL 파싱 부하
- SQL 처리과정
- SQL 파싱(Parsing)
- SQL 최적화(Optimization)
- 캐싱된 SQL 공유
- 실행계획 공유 조건
- 실행계획을 공유하지 못하는 경우
- 바인드 변수 사용하기
- 바인드 변수의 중요성
- 바인드 변수 사용 시 주의사항
- 바인드 변수 부작용을 극복하기 위한 노력
- Static SQL과 Dynamic SQL
- Static SQL
- Dynamic SQL
- 바인드 변수의 중요성 재강조
- 애플리케이션 커서 캐싱
3. 데이터베이스 CALL과 네트워크 부하
- 데이터베이스 Call 종류
- SQL 커서에 대한 작업 요청에 따른 구분
- Call 발생 위치에 따른 구분
- 데이터베이스 Call과 성능
- One SQL 구현의 중요성
- 데이터베이스 Call과 시스템 확장성
- Array Processing 활용
- Fetch Call 최소화
- 부분범위처리 원리
- ArraySize 조정에 의한 Fetch Call 감소 및 블록 I/O 감소 효과
- 페이지 처리 활용
- 분산 쿼리
- 사용자 정의 함수/프로시저의 특징과 성능
- 사용자 정의 함수/프로시저의 특징
- 사용자 정의 함수/프로시저에 의한 성능 저하 해소 방안
4. 데이터베이스 I/O 원리
- 블록 단위 I/O
- 메모리 I/O vs. 디스크I/O
- I/O 효율화 튜닝의 중요성
- 버퍼 캐시 히트율(Buffer Cache Hit Ratio)
- 네트워크, 파일시스템 캐시가 I/O 효율에 미치는 영향
- Sequential I/O vs. Random I/O
- Sequential 액세스에 의한 선택 비중 높이기
- Random 액세스 발생량 줄이기
- Single Block I/O vs. MultiBlock I/O
- I/O 효율화 원리
- 필요한 최소 블록만 읽도록 SQL 작성
- 최적의 옵티마이징 팩터 제공
- 필요하다면, 옵티마이저 힌트를 사용해 최적의 액세스 경로로 유도
2. LOCK과 트랜잭션 동시성 제어
1. LOCK
- Lock 기본
- Lock이란?
- 공유 Lock과 배타적 Lock
- 블로킹과 교착상태
- SQL Server Lock
- Lock 종류
- Lock 레벨과 Escalation
- Lock 호환성
- Oracle Lock
- 로우 Lock
- 테이블 Lock
2. 트랜잭션
- 트랜잭션의 특징
- 트랜잭션 격리성
- 낮은 단계의 격리성 수준에서 발생할 수 있는 현상들
- 트랜잭션 격리성 수준
3. 동시성 제어
- 비관적 동시성 제어 vs. 낙관적 동시성 제어
- 비관적 동시성 제어
- 낙관적 동시성 제어
- 다중버전 동시성 제어
- 일반적인 Locking 메커니즘의 문제점
- 다중버전 동시성 제어
- 문장수준 읽기 일관성
- 트랜잭션 수준 읽기
- Snapshot too old
3. 옵티마이저 원리
1. 옵티마이저
- 옵티마이저 소개
- 옵티마이저란?
- 옵티마이저 종류
- SQL 최적화 과정
- 최적화 목표
- 옵티마이저 행동에 영향을 미치는 요소
- SQL과 연산자 형태
- 옵티마이징 팩터
- DBMS 제약 설정
- 옵티마이저 힌트
- 통계정보
- 옵티마이저 관련 파라미터
- DBMS 버전과 종류
- 옵티마이저의 한계
- 옵티마이징 팩터의 부족
- 통계정보의 부정확성
- 바인드 변수 사용 시 균등분포 가정
- 비현실적인 가정
- 규칙에 의존하는 CBO
- 하드웨어 성능
- 통계정보를 이용한 비용계산 원리
- 선택도
- 카디널리티
- 히스토그램
- 비용
- 옵티마이저
- Oracle 힌트
- SQL Server 힌트
2. 쿼리변환
- 쿼리변환이란?
- 서브쿼리 Unnesting
- 뷰 Merging
- 조건절 Pushing
- 조건절(Predicate) Pushdown
- 조건절(Predicate) Pullup
- 조인 조건(Join Predicate) Pushdown
- 조건절 이행
- 불필요한 조인 제거
- OR 조건을 Union으로 변환
- 기타 쿼리 변환
- 집합 연산을 조인으로 변환
- 조인 칼럼에 IS NOT NULL 조건 추가
- 필터 조건 추가
- 조건절 비교 순서
4. 인덱스와 조인
1. 인덱스 기본 원리
- 인덱스 구조
- 인덱스 기본
- 인덱스 탐색
- 다양한 인덱스 스캔 방식
- Index Range Scan
- Index Full Scan
- Index Unique Scan
- Index Skip Scan
- Index Fast Full Scan
- Index Range Scan Descending
- 인덱스 종류
- B*Tree 인덱스
- 비트맵 인덱스
- 함수기반 인덱스
- 리버스 키 인덱스
- 클러스터 인덱스
- 클러스터형 인덱스/IOT
2. 인덱스 튜닝
- 인덱스 튜닝 기초
- 범위 스캔이 불가능하거나 인덱스 사용이 아예 불가능한 경우
- 인덱스 칼럼의 가공
- 묵시적 형변환
- 테이블 Random 액세스 최소화
- 인덱스 ROWID에 의한 테이블 Random 액세스
- 인덱스 손익분기점
- 테이블 Random 액세스 최소화 튜닝
- 인덱스 스캔범위 최소화
- 인덱스 선행 칼럼이 범위조건일 때의 비효율
- 범위조건을 In-List로 전환
- 범위조건을 2개 이상 사용할 때의 비효율
- 인덱스 설계
- 결합 인덱스 구성을 위한 기본 공식
- 추가적인 고려사항
- 인덱스 설계도 작성
3. 조인 기본 원리
- Nested Loop Join
- 기본 메커니즘
- NL Join 수행 과정 분석
- NL Join의 특징
- Sort Merge Join
- 기본 메커니즘
- Sort Merge Join의 특징
- Hash Join
- 기본 메커니즘
- Build Input이 가용 메모리 공간을 초과할 때 처리 방식
- Build Input 해시 키 값에 중복이 많을 때 발생하는 비효율
- Hash Join 사용기준
- Scalar Subquery
- Scalar Subquery의 캐싱 효과
- 두 개 이상의 값을 리턴하고 싶을 때
4. 고급 조인 기법
- 인라인 뷰 활용
- 배타적 관계의 조인
- 부등호 조인
- Between 조인
- 선분이력이란?
- 선분이력 기본 조회 패턴
- 선분이력 조인
- Between 조인
- ROWID 활용
5. 고급 SQL 튜닝
1. 고급 SQL 활용
- CASE문 활용
- 데이터 복제 기법 활용
- Union All을 활용한 M:M 관계의 조인
- 페이징 처리
- 일반적인 페이징 처리용 SQL
- 뒤쪽 페이지까지 자주 조회할 때
- Union All 활용
- 윈도우 함수 활용
- With 구문 활용
2. 소트 튜닝
- 소트와 성능
- 메모리 소트와 디스크 소트
- 소트를 발생시키는 오퍼레이션
- 소트 튜닝 요약
- 데이터 모델 측면에서의 검토
- 소트가 발생하지 않도록 SQL 작성
- Union을 Union All로 대체
- Distinct를 Exists 서브쿼리로 대체
- 불필요한 Count 연산 제거
- 인덱스를 이용한 소트 연산 대체
- Sort Order By 대체
- Sort Group By 대체
- 인덱스를 활용한 Min, Max 구하기
- 소트 영역을 적게 사용하도록 SQL 작성
- 소트 완료 후 데이터 가공
- Top-N 쿼리
- 소트 영역 크기 조정
3. DML 튜닝
- 인덱스 유지 비용
- Insert 튜닝
- Oracle Insert 튜닝
- SQL Server Insert 튜닝
- Update 튜닝
- Truncate & Insert 방식 사용
- 조인을 내포한 Update 튜닝
4. 파티션 활용
- 파티션 개요
- 파티션 유형
- Range 파티셔닝
- Hash 파티셔닝
- List 파티셔닝
- Composite 파티셔닝
- 파티션 Pruning
- 정적(Static) 파티션 Pruning
- 동적(Dynamic) 파티션 Pruning
- 인덱스 파티셔닝
- Local 파티션 인덱스 vs. Global 파티션 인덱스
- Prefixed 파티션 인덱스 vs. NonPrefixed 파티션 인덱스
- 인덱스 파티셔닝 가이드
5. 배치 프로그램 튜닝
- 배치 프로그램 튜닝 개요
- 배치 프로그램이란
- 배치 환경의 변화
- 성능 개선 목표 설정
- 배치 프로그램 구현 패턴과 튜닝 방안
- 병렬 처리 활용
- Query Coordinator와 병렬 서버 프로세스
- Intra-Operation Parallelism과 Inter-Operation Parallelism
- 테이블 큐
- IN-OUT 오퍼레이션
- 데이터 재분배
- pq_distribute 힌트 활용
- 병렬 처리 시 주의사항
댓글
댓글 쓰기