본문 바로가기

[SQLD] 1과목 간단 요약 :: 데이터 모델링의 이해

SQL 2020. 11. 29.

반응형

과목1 데이터 모델링의 이해

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

1절. 데이터 모델의 이해

1. 데이터 모델링

- 일정한 표기법에 의해 표현

- 데이터베이스를 생성하여 개발 및 데이터관리

- 업무 흐름 설명, 분석

 

- 유의점 : 중복, 비유연성, 비일관성

- 요소 : 어떤 것(Things), 속성(Attributes), 관계(Relationships)

- 특징 : 추상화, 단순화, 정확화

 

- 개념적 모델링 : 추상화 수준이 높고 업무중심적, 포괄적 / 전사적 데이터 모델링, EA수립

- 논리적 모델링 : key, 속성, 관계 등을 정확하게 표현 / 재사용성이 높음

- 물리적 모델링 : 성능, 저장

 

2. 좋은 데이터 모델

- 완전성 : 업무에 필요한 모든 데이터가 모델에 정의

- 중복배제 : 동일한 사실은 한 번만

- 업무규칙 : 규칙 공유

- 데이터 재사용 : 독립적 데이터

- 의사소통 : 업무규칙 자세히 표현

- 통합성 : 동일한 데이터는 한 번만 정의, 참조활용

 

3. 데이터 독립성

- 외부스키마 : 개인

- 개념스키마 : 통합한 전체 DB

- 내부스키마 : 물리적 장치에 저장

- 논리적 독립성 : 개념스키마가 변경되어도 외부스키마 영향 x

- 물리적 독립성 : 내부스키마가 변경되어도 외부/개념스키마 영향 x

 

 

2절. 엔터티

- 집합

- 작업순서 : 엔터티 그림 > 엔터티 배치 > 관계설정 > 관계명 > 관계 참여도 > 관계필수여부

 

1. 특징

- 해당 업무에서 필요 & 관리

- 유일한 식별자에 의해 식별 가능

- 두 개 이상의 인스턴스의 집합

- 업무 프로세스에 이용

- 반드시 속성이 있어야한다.

- 다른 엔터티와 최소 한 개 이상의 관계가 있어야한다. (공통코드, 통계성 엔터티의 경우 관계 생략 가능)

 

2. 분류

1) 유무형에 따른 분류

   - 유형 : 물리적 형태 (ex. 사원, 물품, 강사)

   - 개념 : 개념적 정보 (ex. 조직, 보험상품)

   - 사건 : 업무 수행시 발생 (ex. 주문, 청구, 미납)

2) 발생시점에 따른 분류

   - 기본/키 : 원래 존재하는 정보 / 타 엔티티의 부모 / 고유한 주식별자 가짐

   - 중심 : 기본 엔터티로부터 발생 / 행위 엔터티 생성

   - 행위 : 2개 이상의 부모엔터티로부터 발생 / 자주 바뀌거나 양이 증가

 

3. 엔터티명

- 현업에서 사용하는 용어 사용

- 약어 금지

- 단수명사 사용

- 고유한 이름 사용

- 생성의미대로 부여

 

 

3절. 속성

- 인스턴스에서 관리하고자하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위

- 속성도 집합이다.

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

- 하나의 엔터티는 두 개 이상의 속성을 가진다.

- 한 개의 속성은 한 개의 속성값을 가진다.

- 기본속성, 설계속성(새로 만들거나 변형), 파생속성(원래 속성의 값을 계산)

- 속성명 : 업무에서 사용하는 이름 / 서술식 용어 x / 약어 x / 유일성

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

 

 

4절. 관계

- 관계명, 관계차수, 관계선택성

- 체크사항 : 연관규칙 / 정보의 조합 / 관계연결에 대한 규칙 / 관계연결을 가능하게 하는 동사

- 존재에 의한 관계와 행위에 의한 관계로 구분

- ERD에서는 관계를 연결할 때 단일화된 표기법 사용

- UML에서는 클래스다이어그램의 관계 중 연관관계와 의존관계가 있고 실선과 점선의 표기법으로 다르게 표현된다.

 

 

5절. 식별자

- 엔터티내에서 인스턴스를 구분하는 구분자

- 논리 데이터 모델링 단계에서 사용

 

1. 특징

- 유일성 : 인스턴스를 유일하게 구분

- 최소성 : 주식별자 속성의 수는 유일성을 만족하는 최소의 수

- 불변성 : 자주 변하지 않아야한다.

- 존재성 : 반드시 값이 있어야한다. (not null)

 

2. 식별자의 종류

- 대표성 : (참조관계 연결) / 보조 (대표성x 참조관계 연결 불가)

- 스스로생성 : 내부 (스스로) / 외부 (타 엔티티로부터 받아옴)

- 속성의 수 : 단일 / 복합

- 대체 여부 : 본질 (업무에 의해 만들어짐) / 인조 (인위적으로 만듬)

 

3. 주식별자 도출기준 

- 자주 이용

- 명칭, 내역 등과 같이 이름으로 기술되는 것 x

- 복합으로 구성할 경우 너무 많은 속성 x

 

4. 식별자 관계

1) 주식별자 

   - 부모의 주식별자를 상속하여 자식의 주식별자로 사용

   - 부모로부터 받은 식별자를 자식엔티티의 주식별자로 이용

   - 상속받은 주식별자 속성을 타엔터티에 이전 필요

   - 반드시 부모엔터티 종속

   - 강한 연결관계 / 실선

2) 비식별자

   - 부모 속성을 자식의 일반 속성으로 사용

   - 자식 주식별자구성을 독립적으로 구성

   - 상속받은 주식별자 속성을 타 엔터티에 차단 필요

   - 부모쪽의 관계참여가 선택관계

   - 부모와 자식의 생명주기가 다른 경우

   - 여러개의 엔터티가 하나의 엔터티로 통합되어 표현되었을 때 각각의 엔터티가 별도의 관계를 가진 경우

   - 자식엔터티에 별도의 주식별자를 생성하는 것이 더 유리한 경우

   - SQL문이 길어져 복잡성이 증가되는 것 방지

   - 약한 연결관계 / 점선

 

 

2장. 데이터 모델과 성능

1절. 성능 데이터모델링

- 데이터베이스 성능 향상을 목적으로 설계단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것

- 데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 증가한다.

- 데이터모델은 성능을 튜닝하면서 변경될 수 있다.

- 분석/설계 단계에서 성능을 고려한 데이터모델링을 수행할 경우 성능저하에 따른 Rework 비용을 최소화할 수 있는 기회를 가지게된다.

 

- 순서 : 정규화 > 용량산정 > 트랜잭션 유형 파악 > 반정규화 > 이력모델의 조정, PK/KF 조정, 슈퍼타입/서브타입 조정 > 성능 검증

 

- 용량산정은 전체적인 데이터베이스에 발생되는 트랜잭션의 유형과 양을 분석하는 자료가 되므로 성능데이터 모델링을 할 때 중요한 작업

- 물리적인 데이터 모델링을 할 때 PK/FK 칼럼의 순서조정, FK인덱스 생성등은 성능향상을 위한 모델링 작업에 중요한 요소가 된다.

- 이력데이터는 시간에 따라 반복적으로 발생이 되기 때문에 대량 데이터일 가능성이 높아 특별히 성능을 고려하여 칼럼 등을 추가하도록 설계해야한다.

 

 

2절. 정규화

- 정규화는 선택이 아니라 필수

- 데이터는 속성간의 함수종속성에 근거하여 정규화되어야한다.

- 함수적 종속성 : 데이터들이 어떤 기준 값에 의해 종속

- 1차 정규화 : 반복제거하고 새로운 테이블을 추가하여 기존 테이블과 1:M 관계 형성

- 2차 정규화 : 기본키가 복합 키일 때, 기본키 전체에 의존하지 않고 일부에 의존하는 열 제거

- 3차 정규화 : 기본 키에 의존하지 않고 일반 열에 의존하는 열 제거

- 1차 정규형 : PK에 대해 반복 되는 그룹 존재

- 2차 정규형 : 부분함수종속

- 성능향상 : 정규화 → 입력, 수정, 삭제 / 반정규화 → 조인

 

 

3절. 반정규화

- 성능향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행

- 절차 : 대상조사 > 다른 방법 유도 검토(뷰, 클러스터링, 인덱스 조정) > 반정규화 적용

 

1. 반정규화 대상조사

- 자주 사용되는 테이블에 접근하는 프로세스 수가 많고 항상 일정한 범위만을 조회하는 경우

- 테이블에 대량 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없는 경우

- 통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계테이블을 생성

- 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우

 

2. 다른 방법 유도 검토

- 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 → VIEW

- 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정

- 대량의 데이터는 PK의 성격에 따라 부분적인 테이블로 분리 → 파티셔닝

- 응용 애플리케이션 로직을 구사하는 방법을 변경하여 성능 향상

 

3. 반정규화 기법

1) 테이블 반정규화

   - 테이블 병합

   - 테이블 분할 : 칼럼단위 → 1:1로 분리 / 로우단위 → 로우단위로 테이블을 쪼갬

   - 테이블 추가

     ㄴ 동일한 테이블구조를 중복하여 원격조인을 제거

     ㄴ 미리 계산된 통계 테이블 추가

     ㄴ 이력테이블 중에서 마스터 테이블에 존재하는 레코드 중복하여 이력테이블에 존재시킴

     ㄴ 부분테이블 추가 : 자주 이용하는 칼럼들을 모아놓은 별도의 반정규화된 테이블 생성

2) 칼럼 반정규화

   - 조인을 위한 중복칼럼 추가

   - 미리 값을 계산하여 파생칼럼 추가

   - PK에 의한 칼럼 추가

   - 이력테이블에 기능성칼럼(최근값 여부, 시작과 종료일자 등)을 추가

   - 응용시스템 오작동을 위한 칼럼 추가 : 이전 데이터를 임시적으로 중복하여 보관

3) 관계 반정규화

   - 여러 경로를 거쳐 조인이 가능하지만 성능 저하를 예방하기 위해 추가적인 관계를 맺는 방법

 

 

제4절 대량 데이터에 따른 성능

- 로우 체이닝 : 로우의 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장

- 로우 마이그레이션 : 데이터블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장

 

1. 파티셔닝

- 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 액세스 성능도 향상키기고 데이터 관리방법도 개선할 수 있도록 테이블에 적용하는 기법

1) RANGE PARTITION : 날짜/숫자로 분리가 가능하고 영역별로 트랜잭션이 분리되는 경우

2) LIST PARTITION : 핵심적인 코드값으로 PK가 구성되어 있고 대량의 데이터가 있는 테이블의 경우

3) HASH PARTITION : 지정된 HASH 조건에 따라 해시 알고리즘이 적용되어 테이블이 분리

 

2. 테이블에 대한 수평/수직분할의 절차

- 데이터 모델링 완성 > DB 용량산정 > 트랜잭션 처리 패턴 분석 > 집중화된 단위로 테이블 분리 검토(열 or 행)

 

 

제5절 데이터베이스 구조와 성능

- 슈퍼/서브 타입 모델 : 업무를 구성하는 데이터의 특징을 공통과 차이점을 고려하여 표현

- OneToOne Type : 개별 ~ 개별

- Plus Type : 슈퍼타입+서브타입 ~ 슈퍼타입+서브타입

- Single Type, All in One Type : 전체 ~ 하나

 

- 트랜잭션은 항상 전체를 통합하여 분석 처리하는데 슈퍼-서브타입이 하나의 테이블로 통합되어 있으면 하나의 테이블에 집적된 데이터만 읽어 처리할 수 있기 때문에 다른 형식에 비해 더 성능이 우수하다.

 

- 여러 개의 속성이 하나의 인덱스로 구성되어있을 때, '=', 'BETWEEN',  '<>' 순서로 효율적

 

 

제6절 분산 데이터베이스와 성능

- 분산 DB : 논리적으로 동일한 시스템에 속하지만 컴퓨터 네트워크를 통해 물리적으로 분산되어 있는 데이터집합

- 투명성 : 분할(단편화) / 위치 / 지역사상 / 중복 / 장애 / 병행

 

1. 분산 DB 적용기법

1) 테이블 위치

   - 본사, 지사단위로 분할

2) 테이블 분할

   - 테이블을 쪼개어 분산

    - 수평(로우), 수직(컬럼) 

3) 테이블 복제

   - 동일한 테이블을 다른 지역이나 서버에서 동시에 생성하여 관리

   - 부분, 광역

4) 테이블 요약

   - 지역 간에 또는 서버 간에 데이터가 비슷하지만 동시에 생성하여 관리

   - 분석(동일한 내용 이용), 통합(다른 내용 이용)

 

2. 분산 DB 설계를 고려하는 경우

- 성능이 중요한 사이트

- 공통코드, 기준정보, 마스터 데이터의 성능향상

- 실시간 동기화가 요구되지 않는 경우

- 특정 서버에 부하가 집중되어 부하 분산

- 백업 사이트 구성

 

 

 

728x90

Comments