자격증 - SQLD

수현·2023년 2월 18일
2

IT (CS)

목록 보기
3/12

📂 1. 데이터모델링의 이해

📌 1. 데이터 모델의 이해

1) 모델링

  • 정의 : 다양한 현상을 표기법에 의해 표기하는 것
  • 특징 : 추상화, 단순화, 명확화
  • 3가지 관점 : 데이터 관점, 프로세스 관점, 상관 관점

2) 데이터 모델

  • 정의 : 정보시스템을 구축하기 위한 데이터 관점의 업무분석 기법
  • 기능
    • 시스템 가시화 (시스템 구조와 행동 명세화, 시스템 구축의 구조화된 틀 제공)
    • 문서화 (세부사항은 숨기는 다양한 관점 제공, 상세 수준의 표현방법 제공)
  • 중요성
    • 파급효과
    • 복잡한 정보요구사항의 간결한 표현
    • 데이터 품질
  • 유의점
    • 중복 : 데이터베이스가 여러 장소에 같은 정보를 저장x
    • 비유연성 : 데이터 정의와 데이터 사용프로세스와 분리
    • 비일관성 (ex. 신용상태에 대한 개인 없이 고객의 납부 이력정보 갱신)

3) 데이터모델링의 3단계

  • 개념적 데이터모델링 (계획 단계)
    : 추상화 수준이 높고, 업무 중심적이고 포괄적인 수준의 모델링 진행
  • 논리적 데이터모델링 (분석 단계)
    : 시스템으로 구축하고자 하는 업무에 대해 Key, 속성, 관계를 정확하게 표현, 높은 재사용
  • 물리적 데이터모델링 (설계 단계)
    : 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 것 고려해 설계

4) 데이터 독립성

  • 데이터 모델링에서의 필요성 : 유지보수 비용 증가, 데이터 복잡도 증가, 데이터 중복성 증가, 요구사항대응 저하
  • 종류 : 논리적 독립성, 물리적 독립성
  • 요소 : 외부 스키마 / 개념 스키마 / 내부 스키마
    (데이터베이스 구조 : 외부 단계 / 개념적 단계 / 내부적 단계)
  • 사상 Mapping : 상호 독립적인 개념을 연결시켜주는 다리 (외부적/개념적 사상 + 개념적/물리적 사상)

5) 데이터모델의 3가지 요소

  • 업무가 관여하는 어떤 것 (Things) : 엔터티 타입 - 엔터티 - 인스턴스/어커런스
  • 어떤 것이 가지는 성격 (Attributes) : 속성 - 속성값
  • 업무가 관여하는 어떤 것 간의 관계 (Relationships) : 관계 - 페어링

6) 데이터모델링의 이해관계자

  • 이해관계자의 데이터 모델링 중요성 인식
  • 데이터 모델링의 이해관계자

7) 데이터 모델 표기법 (ERD)

  • 표현 : 엔터티(사각형), 관계(마름모), 속성(타원형)
  • 순서 : 엔터티 그리기 -> 엔터티 배치 -> 엔터티간의 관계설정 -> 관계명 기술 -> 관계의 참여도 기술 -> 관계의 필수여부 기술

8) 좋은 데이터모델의 요소

  • 완전성
  • 중복배제
  • 업무규칙
  • 데이터 재사용
  • 의사소통
  • 통합성

📌 2. 엔터티

1) 개념

  • 정의 : 실체, 객체
  • 엔터티 명명 : 업무목적에 따라 생성되는 자연스러운 이름 부여

2) 특징

  • 업무에서 필요로 하는 정보
  • 식별자에 의해 식별 가능
  • 인스턴스의 집합
  • 업무프로세스에 의해 이용
  • 속성 포함
  • 관계의 존재

3) 분류

  • 유무형 분류 : 유형 엔터티, 개념 엔터티, 사건 엔터티
  • 발생시점 분류 : 기본 엔터티, 중심 엔터티, 행위 엔터티

📌 3. 속성

1) 개념

  • 업무에서 필요로 하는 인스턴스로 관리하고자 하는 데이터
  • 의미상 더이상 분리되지 않는 최소한의 데이터 단위
  • 속성 표기법 : IE표기법, Barker표기법

2) 엔터티, 인스턴스, 속성, 속성값의 관계

  • 엔터티 - 인스턴스 : 한 개의 엔터티는 2개 이상의 인스턴스 집합이어야 한다.
  • 엔터티 - 속성 : 한 개의 엔터티는 2개 이상의 속성을 갖는다.
  • 속성 - 속성값 : 한 개의 속성은 1개의 속성값을 갖는다.

3) 특징

  • 하나의 속성에는 한 개의 값
  • 하나의 속성에 여러 개의 값이 있는 다중값의 경우 별도의 엔터티 이용하여 분리

4) 분류

  • 속성의 특성 분류 : 기본 속성(원래 속성), 설계 속성(1:1 치환), 파생 속성 (계산값)
  • 엔터티 구성방식 분류
    • PK 속성 : 엔터티를 식별할 수 있는 속성
    • FK 속성 : 다른 엔터티와의 관계에서 포함된 속성
    • 일반 속성 : 엔터티에 포함되어 있고, PK, FK에 포함되지 않은 속성
    • 의미를 쪼갤 수 있는지에 따라 단순형/복합형 분류

5) 도메인

  • 각 속성이 가질 수 있는 값의 범위
  • 엔터티 내에서 속성에 대한 데이터타입과 크기, 제약사항을 지정하는 것

📌 4. 관계

1) 개념

  • 정의 : 엔터티의 인스턴스 사이의 논리적인 연관성, 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태
  • 관계의 페어링 : 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것 (집합의 관계로 표현)

2) 관계의 표기법

  • 관계명 : 관계의 이름
  • 관계 차수 : 1:1, 1:M, M:N
  • 관계선택사양 : 필수 관계, 선택 관계

3) 분류

  • ERD : 존재에 의한 관계 / 행위에 의한 관계
  • UML : 연관 관계 / 의존 관계

4) 관계 정의 및 읽는 방법

  • 관계 체크사항
  • 관계 읽기

📌 5. 식별자

1) 개념

  • 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티 대표 속성
  • 하나의 엔터티는 반드시 하나의 유일한 식별자 존재

2) 특징

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

3) 분류

  • 주식별자 / 보조식별자
  • 내부식별자 / 외부식별자
  • 단일식별자 / 복합식별자
  • 본질식별자 / 인조식별자

4) 주식별자 도출기준

  • 해당 업무에서 자주 이용되는 속성
  • 명칭, 내역 등 이름으로 기술되는 것 피함
  • 속성의 수가 많아지지 안도록 함

5) 식별자와 비식별자 관계에 따른 식별자

  • 식별자와 비식별자 관계의 결정 : 외부식별자는 Foreign Key 역할
  • 식별자와 비식별자 관계 모델링
    • 비식별자관계 선택 프로세스
    • 식별자와 비식별자 관계비교
    • 식별자와 비식별자 적용한 데이터 모델
  • 식별자 관계 : 자식 엔터티의 주식별자로 부모의 주식별자가 상속되는 경우
    • Null 값이 오면 안되므로 반드시 부모엔터티가 생성되어야 자기자신의 엔터티 생성
    • 문제점 : 주식별자 속성이 지속적으로 증가, 복잡성과 오류 가능성 유발
  • 비식별자 관계 : 부모 엔터티로부터 속성으로 받았지만 자식엔터티의 주식별자로 사용하지 않고, 일반적인 속성으로만 사용하는 경우
    • 문제점 : 쓸데없이 부모엔터티까지 찾아가야하는 경우 발생

📂 2. 데이터 모델과 성능

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

1) 개념

  • 정의 : 데이터모델링을 할 때 어떤 작업유형에 따라 성능 향상 도모해야하는지 목표 설정
  • 수행 시점 : 분석 / 설계 단계 (데이터베이스 처리 성능 향상 방법 고려)
  • 고려사항 : 정규화, 반정규화

📌 2. 정규화와 성능

1) 정규화 통한 성능향상 전략

  • 데이터에 대한 중복성 제거
  • 일반적으로 정규화가 잘 되어있으면, 입력/수정/삭제 성능 향상 (반정규화는 조회 성능 향상)
  • 중복속성에 대한 분리 (로우 단위, 칼럼 단위의 중복도 해당)

2) 함수적 종속성에 근거한 정규화 수행

  • 함수의 종속성 : 데이터들이 어떤 기준값에 의해 종속되는 현상
  • 결정자 (ex. 주민등록번호), 종속자 (ex. 이름, 출생지, 주소)

📌 3. 반정규화와 성능

1) 반정규화 통한 성능향상 전략

  • 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 단순화를 위해 중복, 통합, 분리 수행
  • 조인으로 인한 성능 저하될 때
  • 적용방법 : 반정규화 대상 조사 -> 다른 방법 유도 검토 -> 반정규화 적용

2) 반정규화 기법

  • 테이블 반정규화 : 테이블 병합, 테이블 분할, 테이블 추가
  • 칼럼 반정규화 : 중복 칼럼 추가, 파생 칼럼 추가, 이력 테이블 칼럼 추가, PK에 의한 칼럼 추가, 응용시스템 오작동을 위한 칼럼 추가
  • 관계 반정규화 : 중복 관계 추가

📌 4. 대량데이터에 따른 성능

1) 대량데이터 발생에 따른 테이블 분할

  • 로우 체이닝 (row chaining) : 로우 길이가 너무 길어서 데이터블록 1개에 저장되지 않고 2개 이상 저장
  • 로우 마이그레이션 (row migration) : 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장

2) 대량 데이터 저장 및 처리로 인한 성능

  • Range Partition 적용
  • List Partition 적용
  • Hash Partition 적용

📌 5. 데이터베이스 구조와 성능

1) 슈퍼타입 / 서브타입 모델 성능 고려 방법

  • “Extended ER모델”, 업무를 구성하는 데이터의 특징을 고려하여 표현
  • 공통은 슈퍼타입으로 모델링, 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성은 별도의 서브엔터티 구분
  • 슈퍼/서브타입 데이터 모델의 변환타입 비교
    • OneToOne Type
    • Plus Type
    • Single Type

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

  • PK/FK 칼럼 순서의 중요성을 인지하지 못한 채로 데이터모델링 되어있는 그 상태로 DDL을 생성하여 데이터베이스 데이터처리 성능에 문제 유발
  • 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞족에 위치한 속성의 값이 비교자로 있어야 인덱스가 좋은 효율 나타냄 (앞 쪽에 위치한 속성값이 =아니면, 최소한 범위 BETWEEN이 들어와야함)
  • PK칼럼ㅇ의 순서를 조정하지 않으면 성능 저하 이유 : PK의 순서를 인덱스 특징에 맞게 고려하지 않고 바로 그대로 생성하면, 테이블에 접근하는 트랜잭션의 특징에 효율적이지 않은 인덱스가 생성되어 있으므로, 인덱스의 범위를 넓게 이용하거나 Full Scan을 유발하게 되어 성능이 저하됨

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

  • 물리적인 테이블에 FK 제약 걸었을 때는 반드시 FK 인덱스를 생성하도록 하고, FK 제약이 걸지 않았을 경우에는 FK 인덱스를 생성하는 것을 기본정책으로 하지만, 발생하는 트랜잭션에 의해 거의 활용되지 않았을 때에만 FK 인덱스를 지우는 방법이 적절함

📌 6. 분산데이터베이스와 성능

1) 데이터 분산 설계

  • 성능이 중요한 사이트에 적용하기
  • 공통코드, 기준정보, 마스터 데이터 등에 대해 분산환경을 구성하면 성능이 좋아짐
  • 실시간 동기화가 요구되지 않을 때 좋음 (거의 실시간의 업무적인 특징을 가지고 있을 때도 분산환경 구성할 수 있음)
  • 특정 서버에 부하가 집중이 될 때 부하를 분산할 때도 좋음
  • 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성

2) 분산데이터베이스 개념

  • 정의 : 데이터베이스를 연결하는 빠른 네트워크 환경을 이용하여 데이터베이스를 여러 지역 노드로 위치시켜 사용성/성능 등을 극대화시킨 데이터베이스
  • 투명성 : 분할, 위치, 지역 사상, 중복, 장애, 병행

3) 적용 기법

  • 테이블 위치 분산
  • 테이블 분할 분산 : 수평 분할, 수직 분할
  • 테이블 복제 분산 : 부분 복제, 광역 복제
  • 테이블 요약 분산 : 분석 요약, 통합 요약

📂 3. SQL 기본

📌 1. 관계형 데이터베이스 개요

  • 데이터베이스 정의 : 특정 기업이나 조직 또는 개인이 필요에 의해 데이터를 일정한 형태로 저장

  • SQL 정의 : 관계형 데이터베이스에서 데이터 정의, 데이터 조작, 데이터 제어를 하기위한 언어

    • 데이터 조작어(DML) : SELECT, INSERT, UPDATE, DELETE (NOT AUTO COMMIT)
      (데이터베이스에 들어 있는 데이터 조회, 검색, 데이터에 변형을 가함)
    • 데이터 정의어(DDL) : CREATE, ALTER, DROP, RENAME (AUTO COMMIT)
      (테이블 같은 데이터 구조를 정의, 구조를 생성하거나 변경하거나 삭제)
    • 데이터 제어어(DCL) : GRANT, REVOKE
      (데이터베이스에 접근하고 객체를 사용하도록 권한을 주고 회수)
    • 트랜잭션 제어어(TCL) : COMMIT, ROLLBACK
      (논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션)별로 제어)
  • TABLE : 테이블은 하나 이상의 칼럼 가져야함 (관계형 데이터베이스에서는 모든 데이터를 칼럼과 행의 2차원 구조로 나타냄)

  • ERD : 관계의 의미를 직관적으로 표현하는 수단 (엔터티 / 관계 / 속성)

📌 2. DDL

📌 3. DML

📌 4. TCL

📌 5. WHERE 절

📌 6. 함수

📌 7. GROUP BY, HAVING 절

📌 8. ORDER BY

📌 9. 조인

📂 4. SQL 활용

📌 1. 표준 조인

📌 2. 집합 연산자

📌 3. 계층형 질의와 셀프 조인

📌 4. 서브 쿼리

📌 5. 그룹 함수

📌 6. 윈도우 함수

📌 7. DCL

📌 8. 절차형 SQL

📂 5. SQL 최적화 기본원리

📌 1. 옵티마이저와 실행계획

📌 2. 인덱스 기본

📌 3. 조인 수행 원리

profile
Notion으로 이동 (https://24tngus.notion.site/3a6883f0f47041fe8045ef330a147da3?v=973a0b5ec78a4462bac8010e3b4cd5c0&pvs=4)

0개의 댓글