[SQLD] 1과목 간단 요약 :: 데이터 모델링의 이해
과목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 설계를 고려하는 경우
- 성능이 중요한 사이트
- 공통코드, 기준정보, 마스터 데이터의 성능향상
- 실시간 동기화가 요구되지 않는 경우
- 특정 서버에 부하가 집중되어 부하 분산
- 백업 사이트 구성
'SQL' 카테고리의 다른 글
[MSSQL] Draw The Triangle 1 :: 별 그리기 / 역삼각형 그리기 (0) | 2021.05.15 |
---|---|
[MySQL] 윈도우함수(Window Function) (3) | 2021.02.25 |
[HIVE] 일 년 중 몇 번째 주 :: weekofyear (0) | 2020.11.10 |
[HIVE] 날짜 입력 :: from_unixtime / unix_timestamp (0) | 2020.11.10 |
[SQL] JOIN 한 눈에 보기 :: LEFT, RIGHT, INNER, OUTER (0) | 2020.10.07 |
Comments