James.Jung 2019. 6. 6. 19:11

1. 데이터 모델링의 이해

  A. 데이터 모델링의 이해

    1) 데이터 모델의 이해

 

      a. 모델링의 특징

        - 추상화

        - 단순화

        - 명확화

 

      b. 모델링의 세 가지 관점 

        - 데이터 관점

        - 프로세스 관점

        - 데이터와 프로세스의 상관 관점

 

      c. 데이터 모델링의 중요성

        - 파급효과 (Leverage)

        - 간결한 표현 (Conciseness)

        - 데이터 품질 (Data quality)

 

      d. 데이터 모델링의 3단계

        - 개념적 데이터 모델링 : 추상화 수준 높음, 전사적 데이터 모델링, EA 수립 시 많이 이용

        - 논리적 데이터 모델링 : 재사용성 높음

        - 물리적 데이터 모델링 : 성능, 저장 등 물리적인 성격을 고려

 

      e. 데이터 독립성 요소

        - 외부스키마 (External schema) : 사용자 관점

        - 개념스키마 (Conceptual schema) : 통합 관점

        - 내부스키마 (Internal schema) : 물리적 저장 구조

 

      f. 데이터 모델링 세 요소

        - 업무가 관여하는 어떤 것 (Things)

        - 어떤 것이 가지는 성격 (Attributes)

        - 업무가 관여하는 어떤 것 간의 관계 (Relationships)

 

    2) 엔터티 (Entity)

 

      a. 유무형에 따른 분류

        - 유형엔터티

        - 개념엔터티

        - 사건엔터티

 

      b. 발생시점에 따른 분류

        - 기본/키엔터티

        - 중심엔터티

        - 행위엔터티

 

    3) 속성 (Attribute)

 

      a. 엔터티, 인스턴스, 속성, 속성값의 관계

        - 한 개의 엔터티는 두 개 이상의 인스턴스의 집합이어야 한다.

        - 한 개의 엔터티는 두 개 이상의 속성을 갖는다.

        - 한 개의 속성은 한 개의 속성값을 갖는다.

 

      b. 속성의 분류

        - 기본 속성

        - 설계 속성

        - 파생 속성

 

      c. 도메인 : 각 속성이 가질 수 있는 값의 범위

 

    4) 관계 (Relationship)

 

      a. 관계의 표기법

        - 관계명 (Membership) : 관계의 이름

        - 관계차수 (Degree/Cardinality) : 1:1, 1:M, M:N

        - 관계선택사양 (Optionality) : 필수관계, 선택관계

 

    5) 식별자 

 

      a. 식별자의 특징

        - 유일성 : 주식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분

        - 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함

        - 불변성 : 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함

        - 존재성 : 주식별자가 지정되면 반드시 데이터 값이 존재

 

      b. 식별자 분류

        - 대표성 여부 : 주식별자, 보조식별자

        - 스스로 생성여부 : 내부식별자, 외부식별자

        - 속성의 수 : 단일식별자, 복합식별자

        - 대체여부 : 본질식별자, 인조식별자

 

  B. 데이터 모델과 성능

    1) 성능 데이터 모델링의 개요

 

      a. 성능 데이터 모델링 고려사항

        - 데이터 모델링을 할 때 정규화를 정확하게 수행한다.

        - 데이터베이스 용량산정을 수행한다.

        - 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.

        - 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.

        - 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.

        - 성능관점에서 데이터 모델을 검증한다. 

 

    2) 정규화와 성능

 

    3) 반정규화와 성능

 

      a. 테이블 반정규화

        - 테이블 병합 : 1:1, 1:M, 슈퍼/서브타입

        - 테이블 분할 : 수직분할, 수평분할

        - 테이블 추가 : 중복, 통계, 이력, 부분 테이블 추가

 

      b. 칼럼 반정규화

        - 중복칼럼 추가

        - 파생칼럼 추가

        - 이력테이블 칼럼 추가

        - PK에 의한 칼럼 추가

        - 응용시스템 오작동을 위한 칼럼 추가

      

      c. 관계 반정규화

        - 중복관계 추가

 

    4) 대량 데이터에 따른 성능

 

      a. Partition

        - Range partition

        - List partition

        - Hash partition

 

    5) 데이터베이스 구조와 성능

 

      a. 슈퍼타입/서브타입 모델의 성능고려 방법

 

      b. 인덱스 특성을 고려한 PK/FK 데이터베이스 성능향상

 

      c. 물리적인 테이블에 FK 제약이 걸려있지 않을 경우 인덱스 미생성으로 성능저하

 

    6) 분산 데이터베이스와 성능

 

      a. 분산 데이터베이스의 투명성

        - 분할 투명성

        - 위치 투명성

        - 지역사상 투명성

        - 중복 투명성

        - 장애 투명성

        - 병행 투명성

 

      b. 분산 데이터베이스 적용 기법

        - 테이블 위치 분산

        - 테이블 분할 분산 (수직/수평)

        - 테이블 복제 분산 (부분/광역)

        - 테이블 요약 분산 (분석/통합)

 

2. SQL 기본 및 활용

  A. SQL 기본

    1) 관계형 데이터베이스 기본

 

    2) DDL (DATA DEFINITION LANGUAGE) - CREATE / ALTER / DROP / RENAME

 

      a. 제약조건 (Constraint)

        - Primary key : Unique key + Not NULL

        - Unique key : NULL 입력 가능

        - Not NULL : NULL 입력 금지

        - Check : True or False, 입력할 수 있는 값의 범위 등을 제한

        - Foreign key : 참조 무결성 제약 옵션

 

    3) DML (DATA MANIPULATION LANGUAGE) - SELECT / INSERT / UPDATE / DELETE

 

    4) TCL (TRANSACTION CONTROL LANGUAGE) - COMMIT / ROLLBACK

 

      a. 트랜잭션의 특징

        - 원자성 (Atomicity) : All or nothing
        - 일관성 (Consistency) 

        - 고립성 (Isolation)

        - 지속성 (Durability)

 

    5) WHERE 절

 

      a. 연산자의 종류

        - 비교연산자 : =, >, >=, <, <=

        - SQL 연산자 : Between a And b, IN, Like, Is null

        - 논리 연산자 : AND, OR, NOT

        - 부정비교 연산자 : !=, ^=, <>, NOT 칼럼명 =, NOT 칼럼명 >

 

      b. 연산자 우선 순위 : 괄호 -> Not 연산자 -> 비교 연산자, SQL 연산자 -> AND -> OR

 

    6) 함수 (FUNCTION)

 

      a. 단일행 함수

        - 문자형 함수 : LOWER, UPPER, LEN, LTRIM, RTRIM

        - 숫자형 함수 : ABS, MOD, ROUND 

        - 날짜형 함수 : SYSDATE

        - 변환형 함수 : TO_NUMBER, TO_DATE, TO_CHAR

        - NULL 관련 함수 : NVL, ISNULL, NULLIF, COALESCE

 

    7) GROUP BY, HAVING 절

 

      a. 집계함수

        - COUNT

        - SUM

        - AVG 

 

    8) ORDER BY 절

 

      a. SELECT 문장 실행 순서

        - 발췌 대상 테이블을 참조한다 (FROM)

        - 발췌 대상 데이터가 아닌 것은 제거한다 (WHERE)

        - 행들을 소그룹화 한다 (GROUP BY)

        - 그룹핑된 값의 조건에 맞는 것만을 출력한다 (HAVING)

        - 데이터 값을 출력/계산한다 (SELECT)

        - 데이터를 정렬한다 (ORDER BY)

 

    9) 조인 (JOIN)

 

  B. SQL 활용

    1) 표준 조인 (STANDARD JOIN)

 

      a. 일반 집합 연산자

        - Union

        - Intersection

        - Difference

        - Product

 

      b. 순수 관계 연산자

        - Select

        - Project

        - (Natural) Join

        - Divide

 

      c. FROM 절 JOIN 형태

        - INNER JOIN : 동일한 값이 있는 행만 반환

        - NATURAL JOIN : 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행

        - USING 조건절 : FROM절의 USING 조건절을 이용, 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN 수행

        - ON 조건절 : 칼럼명이 다르더라도 JOIN 조건을 사용 가능

        - CROSS JOIN : CARTESIAN PRODUCT

        - OUTER JOIN : LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN

 

    2) 집합 연산자 (SET OPERATOR)

 

      a. 집합 연산자 종류

        - UNION

        - UNION ALL

        - INTERSECT

        - EXCEPT

 

    3) 계층형 질의와 셀프 조인

 

      a. 계층형 질의

 

      b. 셀프 조인 

        - 동일 테이블 사이의 조인

 

    4) 서브쿼리 

 

      a. 서브쿼리 사용 시 주의점

        - 서브쿼리를 괄호를 감싸서 사용

        - 단일행 또는 복수행 비교 연산자와 함께 사용 가능

        - 서브쿼리에는 ORDER BY를 사용하지 못함, ORDER BY는 메인쿼리 마지막 문장에 위치

 

      b. 동작하는 방식에 따른 서브쿼리 분류

        - Uncorrelated (비연관) 서브쿼리

        - Correlated (연관) 서브쿼리 

 

      c. 반환되는 데이터의 형태에 따른 서브쿼리 분류

        - 단일행 서브쿼리

        - 다중행 서브쿼리 : IN, ALL, ANY, EXISTS

        - 다중칼럼 서브쿼리

 

      d. 서브쿼리가 사용 가능한 곳

        - SELECT 절

        - FROM 절

        - WHERE 절

        - HAVING 절

        - ORDER BY 절 

        - INSERT 문의 VALUES 절

        - UPDATE 문의 SET 절

 

    5) 그룹 함수 (GROUP FUNCTION)

 

      a. ROLLUP 함수

        - Subtotal을 생성하기 위해 사용

 

      b. CUBE 함수

        - Grouping columns이 가질 수 있는 모든 경우의  수에 대하여 Subtotal 생성

 

      c. GROUPING SETS 함수

        - 

 

    6) 윈도우 함수 (WINDOW FUNCTION)

 

      a. WINDOW FUNCTION 종류

        - 그룹 내 순위 관련 함수 : RANK, DENSE_RANK, ROW_NUMBER

        - 그룹 내 집계 함수 : SUM, MAX, AVG, COUNT

        - 그룹 내 순서 함수 : FIRST_VALUE, LAST_VALUE, LAG, LEAD

        - 그룹 내 비율 함수 : CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT

        - 통계 분석 관련 함수 : CORR, COVAR_POP, STDDEV, VARIANCE

 

    7) DCL (DATA CONTROL LANGUAGE)

 

    8) 절차형 SQL

 

      a. PL/SQL 특징

        - PL/SQL의 Block 구조로 되어있어 각 기능별로 모듈화가 가능하다.

        - 변수, 상수 등을 선언하여 SQL 문장 간 값을 교환한다.

        - IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 한다.

        - DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용할 수 있다.

        - PL/SQL은 Oracle에 내장되어 있으므로 Oracle과 PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다.

        - PL/SQL은 응용 프로그램의 성능을 향상시킨다.

        - PL/SQL은 여러 SQL 문장을 Block으로 묶고 한 번에 Block 전부를 서버로 보내기 때문에 통신량을 줄일 수 있다.

 

      b. PL/SQL 구조

        - DECLARE

        - BEGIN ~ END

        - EXCEPTION

        - END

 

  C. SQL 최적화 기본 원리

    1) 옵티마이저와 실행계획

      

      a. 옵티마이저

        - 규칙기반 옵티마이저 (RBO)

        - 비용기반 옵티마이저 (CBO)

 

      b. 실행계획

        

      c. SQL 처리 흐름도

 

    2) 인덱스 기본

 

      a. 인덱스 종류

        - 트리 기반 인덱스

        - 클러스터형 인덱스

 

      b. 전체 테이블 스캔과 인덱스 스캔

        - 전체 테이블 스캔

        - 인덱스 스캔

 

    3) 조인 수행 원리

 

      a. NL Join : 반복문과 유산한 방식으로 조인 수행

 

      b. Sort Merge Join : NL Join에서 부담이 되던 넓은 범위의 데이터를 처리할 때 이용되던 조인 기법

 

      c. Hash Join : NL Join의 랜덤 액세스 문제점과 Sort Merge Join의 문제점인 정렬 작업의 부담의 대안