코딩하는 문과생
[SQL] 데이터 모델링 본문
1. 데이터 모델링
: 현실세계를 추상화, 고객의 비즈니스를 이해해 규칙을 정의하는 행동
- 특징: 추상화, 단순화, 명확성
- 단계
- 개념적 모델링: 업무 전체에 대한 데이터 모델링을 하는 단계 (업무관점, Entity와 Attribute도출, ERD작성)
- 논리적 모델링: 식별자 도출하고 릴레이션 정의하는 단계 (정규화 진행, 특정 데이터베이스 모델에 종속), 재사용성이 가장 뛰어나다.
- 물리적 모델링: 데이터베이스 실제 구축단계
* 좋은 모델링의 요건?
: 중복배제, 업무규칙, 완전성
- 관점
- 데이터
- 프로세스
- 데이터와 프로세스: 데이터와 프로세스 간 관계, CRUD 분석
- ERD작성
: 엔티티 간 관계를 정의하는 방법
- 엔터티를 도출하고 그린다
- 엔터티를 배치한다.
- 엔터티간 관계를 설정한다.
- 관계명을 서술한다.
- 관계 참여도를 표현한다.
- 관계의 필수여부를 표현한다.
* 중요한 엔터티를 가급적 왼쪽 상단에 배치한다.
- 고려사항
- 데이터모델의 독립성(데이터중복, 비유연성, 비일관성 발생X)
- 고객 요구사항의 표현
- 데이터품질 확보
2. 3층 스키마
- 3층 스키마의 독립성: 논리적 독립성(개념스키마가 변경되어도 외부 스키마에 영향이 없다), 물리적 독립성(내부스키마가 변경되어도 개념스키마에 영향이 없다)
- 외부스키마: 응용 프로그램이 접근하는 데이터 베이스(사용자관점, 업무상 관련, 관련 데이터베이스의 View)
- 개념스키마: 전체 데이터베이스 내의 규칙과 구조를 표현(설계자관점, 사용자 전체 집단의 데이터베이스 구조)
- 내부스키마: 물리적 저장구조(개발자관점, 데이터 저장구조, 레코드 구조 등을 의미)
3. 엔터티
: 관리해야 하는 데이터 집합
- 특징: 유일한 식별자, 2개이상의 인스턴스, 반드시 속성 포함, 타 엔터티와 한개 이상의 관계, 업무에서 관리해야하는 집합
- 종류: 유형/개념/사건(유형무형에 따른 종류), 기본/중심/행위(발생시점에 따른 종류)
4. 속성
: 엔터티가 가지는 항목, 주식별자에 함수적으로 종속
- 종류: 단일/복합/다중값(분해 여부에 따른 종류), 기본/설계/파생(특성에 따른 종류)
*도메인: 속성이 가질 수 있는 값의 범위
5. 관계
: 엔터티간 관련성
- 종류: 존재관계(고객과 관리점), 행위관계(계좌와 일자별주문이력)
- 관계차수: 두 엔터티 간에 관계에 참여하는 수(1:1, 1:N, M:N)
* M:N은 관계형DB에서 카테시안 곱이 발생하므로 1:N, N:1로 해소해야한다.
* 필수관계는 |, 선택관계는 O로 표현한다.
- 식별관계와 비식별관계
- 식별관계: 고객T(강한개체)의 기본키 회원ID를 계좌T(약한개체)의 기본키의 하나로 공유하는 것. 강한개체의 기본키가 변경되면 약한개체의 값도 변경된다. 실선으로 표현
- 비식별관계: 부서T의 기본키인 부서코드를 사원T의 일반칼럼으로 공유하는 것, 점선으로 표현
6. 엔터티 식별자
- 주식별자: 유일성과 최소성을 만족
- 키의 종류: 기본키, 후보키(유일성과 최소성 만족), 슈퍼키(최소성을 만족하지 않는다), 대체키
- 식별자 종류: 주/보조(대표성 여부), 내부/외부(생성여부에 따른 종류), 단일/복합(속성 수에 따른 종류), 본질/인조(대체여부)
* 본질식별자: 업무식별자라고도 한다.
* 인조식별자: 최대한 범용적인 값을 사용해서 만든 식별자, 유일한 값을 만들기 위한 것, 대체불가
7. 정규화
: 데이터를 분해하는 과정(데이터의 일관성, 데이터 중복 제거, 유연성확보), 데이터 모델의 독립성 확보, 이상현상을 제거하기 위해 사용
- 1정규화: 속성의 원자성을 확보, 기본키 설정
- 2정규화: 부분함수 종속을 제거(기본키 2개이상인 경우만 발생)
- 3정규화: 이행함수 종속을 제거(기본키 제외한 칼럼간 종속이 있는 경우)
- BNCF: 일반컬럼이 후보키를 결정하는 경우(복수의 후보키, 후보키들이 복합속성, 서로 중첩)
- 문제점: CPU와 메모리를 많이 사용한다, 조인이 부하를 유발한다(중첩된 루프 사용)
: 따라서 반정규화를 진행한다.(성능향상을 위해)
- 반정규화 시 너무 많은 컬럼이 추가되면 DB입출력 단위인 블록크기를 넘어서게 된다.(DISK IO 증가)
- 조회속도는 향상되지만, 유연성은 낮아진다.
- 반정규화 수행하는 경우: 다량의 범위를 자주 처리, 특정 범위 데이터만 자주 처리, 요약/집계 정보가 자주요구
* 반정규화 절차: 반정규화 대상 확인 -> 다른 방법 결정 -> 반정규화 실행
* 반정규화는 클러스터링 뷰, 인덱스 튜닝, 응용프로그램, 파티션(여러개의 데이터 파일에 분산저장, Range/List/Hash/Composite) 등을 검토한 이후에 진행한다.
- 반정규화 기법: 계산된 칼럼 추가, 테이블 수직분할(칼럼으로 분할), 테이블 수평분할(로우단위로 분할), 테이블 병합(슈퍼타입과 서브타입을 통합, OneToOne: 사원/정규직/임시직, Plus: 사원정규직/사원임시직, Single: 사원)
* 반정규화 수행 후 입력을 한다: 성능향상과 관련이 없다. 반정규화는 조회 시 성능향상을 위한 것이다.
8. 분산 데이터베이스
: 물리적으로는 떨어져 있지만 단일 데이터베이스, 투명성을 제공해야한다.
- 종류: 분할투명성, 위치투명성, 지역사상투명성, 중복투명성(데이터 일관성), 장애투명성(데이터 무결성), 병행투명성(동시성)
- 설계방식
- 상향식: 지역스키마->전역스키마
- 하향식: 전역스키마->지역스키마
- 장단점
- 장점: 신뢰성과 가용성이 높다, 빠른 응답이 가능, 용량 확정이 쉽다
- 단점: 관리와 통제가 어렵다. 무결성 관리가 어렵다. 설계가 복잡하다.
9. Row Chaining & Row Migration
- Row Chaining: 행 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 행이 저장되어 있는 형태
- Row Migration: 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에 저장하지 못하고, 다른 블록의 빈 공간을 찾아 저장하는 방식
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] SQL 최적화 (0) | 2020.11.22 |
---|---|
[SQL] SQL 기본과 활용 (0) | 2020.11.22 |
[SQL] DB 백업과 아카이브 모드 (0) | 2020.06.23 |
[SQL] 인덱스만 잘타도 조회속도가 빨라진다. (0) | 2020.06.20 |
[SQL] 조건이 날짜인 경우, 조회속도 올리는 법 (2) | 2020.06.20 |