코딩하는 문과생

[SQL] 데이터 모델링 본문

프로그래밍/SQL

[SQL] 데이터 모델링

코딩하는 문과생 2020. 11. 22. 14:19

1. 데이터 모델링

: 현실세계를 추상화, 고객의 비즈니스를 이해해 규칙을 정의하는 행동

 

- 특징: 추상화, 단순화, 명확성

 

- 단계

  • 개념적 모델링: 업무 전체에 대한 데이터 모델링을 하는 단계 (업무관점, Entity와 Attribute도출, ERD작성)
  • 논리적 모델링: 식별자 도출하고 릴레이션 정의하는 단계 (정규화 진행, 특정 데이터베이스 모델에 종속), 재사용성이 가장 뛰어나다.
  • 물리적 모델링: 데이터베이스 실제 구축단계

   * 좋은 모델링의 요건?

   : 중복배제, 업무규칙, 완전성

 

- 관점

  • 데이터
  • 프로세스
  • 데이터와 프로세스:  데이터와 프로세스 간 관계, CRUD 분석

 

- ERD작성

: 엔티티 간 관계를 정의하는 방법

  1. 엔터티를 도출하고 그린다
  2. 엔터티를 배치한다.
  3. 엔터티간 관계를 설정한다.
  4. 관계명을 서술한다.
  5. 관계 참여도를 표현한다.
  6. 관계의 필수여부를 표현한다.

   * 중요한 엔터티를 가급적 왼쪽 상단에 배치한다.

 

- 고려사항

  • 데이터모델의 독립성(데이터중복, 비유연성, 비일관성 발생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: 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에 저장하지 못하고, 다른 블록의 빈 공간을 찾아 저장하는 방식