This is a blog.

Part3 - 데이터 모델과 성능 (1) 본문

DATABASE/데이터베이스 실무

Part3 - 데이터 모델과 성능 (1)

Calcot 2023. 12. 4. 21:06

 

 

 


 

 

데이터 모델과 성능

  • 주요 내용

          - 성능 데이터 모델링 개요

          - Relational Data Model

                ▪ Constraints

          - 정규화와 성능

                ▪ 이상현상

                ▪ 함수종속 및 정규화

          - 반정규화와 성능

                ▪ 테이블 / 칼럼 / 관계 반정규화

                ▪ 인덱스 특성을 고려한 PK/FK 설정

          - 분산 데이터베이스와 성능



 

성능 데이터 모델링 개요

  • 정의

          - 데이터베이스 성능을 고려하여 데이터 모델링을 수행하는 것

                ▪ 정규화, 반정규화, 테이블 통합 및 분할, 조인 구조, PK/FK 설정 등

  • 수행 시점

          - 빠를수록 좋음

                ▪ 분석/설계 단계에서 성능 모델링 수행 -> 재업무 비용 최소화

          - 일반적인 경우

                ▪ 대충 설계 -> 성능 저하 -> 해당 부분만 SQL 튜닝

 

  • 성능 데이터 모델링 진행 순서

          - 정규화를 정확하게 수행

                ▪ 주요 관심사별로 테이블을 분산시킴

          - 데이터베이스 용량산정 수행

                ▪ 각 엔터티에 어느 정도의 트랜잭션이 들어오는지 파악

          - 데이터베이스에 발생되는 트랜잭션의 유형 파악

                ▪ CRUD 매트릭스 활용

          - 용량과 트랜잭션의 유형에 따라 반정규화 수행

                ▪ 테이블, 수정, 관계 변경

          - 이력모델의 조정, 인덱스를 고려한 PK/FK의 순서 조정, 슈퍼타입/서브타입 조정 등 수행

                ▪ 성능 관점에서 데이터 모델 최종 검증



 

관계형 데이터베이스 개요

  • DBMS의 발전

          - 1960년대

                ▪ Flowchart 중심의 개발 방법 사용

                ▪ 파일 구조를 통해 데이터를 저장하고 관리

          - 1970년대

                ▪ 데이터베이스 관리 기법이 처음 출현

                ▪ 계층형(Hierarchical), 망형(Network) 데이터베이스 제품 상용화

          - 1980년대

                ▪ 관계형(Relational) 데이터베이스 상용화

                ▪ Oracle, Sybase, DB2 등의 제품 사용

          - 1990년대

                ▪ Oracle, Sybase, Informix, DB2, Teradata, SQL Server 외 많은 제품 출현

                ▪ 객체 관계형 데이터베이스 발전

 

  • 관계형 데이터베이스

          - 1970년 영국의 수학자인 E.F.Codd 박사의 논문에서 제안

          - 기업의 핵심 데이터는 대부분 관계형 데이터베이스로 저장되어 있음

          - 관계형 데이터베이스는 SQL문장에 의해 관리됨

 

  • 테이블







Relational Model Constraints

  • 도메인 제약 (Domain Constraints)

          - 속성(Attribute)에 대한 제약

  • 키 제약 (Key Constraints)

          - 릴레이션(Relation)에 대한 제약

  • 개체 무결성 제약 (Entity Integrity Constraints)

          - 기본키(Primary Key)에 대한 제약

  • 참조 무결성 제약 (Referential Integrity Constraints) ★

          - 외래키(Foreign Key)에 대한 제약

  • 도메인 제약 (Domain Constraints)

          - 속성 값은 원자성(Atomicity)을 가지며, 도메인에서 정의된 값이어야 함

          - Composite Attribute와 Multivalued Attribute는 허용되지 않음

                ▪ cf ) 주소 = 시군구 + 상세주소

          - Null 값은 허용됨 (Not Null이 아닌 경우)

 

  • 키 제약 (Key Constraints)

          - 릴레이션의 모든 튜플(Tuples)은 서로 식별 가능해야 함

          - Q ) 다음 중 키 제약을 위반하고 있는 릴레이션은?

          - Cf ) Super Key, Candidate Key, Primary Key

 

  • 개체 무결성 제약 (Entity Integrity Constratins)

          - 기본키 (PK - Primary Key )는 NOT NULL & UNIQUE 이어야 함

          - Q ) 다음 중 개체 무결성 제약에 위배되지 않는 튜플은?

 

  • 참조 무결성 제약 (Referential Integrity Constraints)

          - 외래키 (FK – Foreign Key)

                ▪ 릴레이션 R1이 릴레이션 R2를 참조하는 경우, R2의 기본키는 R1에서 외래키로 사용됨

                ▪ FK는 자기 자신이 속한 릴레이션을 참조할 수도 있음

          - 릴레이션 R1이 릴레이션 R2를 참조하는 경우, R1의 FK는…

                ▪ (1) Null이거나

                ▪ (2) Null이 아닌 경우 R2에 실제로 존재하는 값으로 구성되어야 함

          - Q ) 다음 중 참조 무결성을 위배하는 튜플은?



 

Constraint Violations

  • Q ) 다음 연산들은 어떤 문제를 야기하는가?

          - 새 직원 <’유관순’, ‘555’, NULL, 4> 삽입

                           → 개체 무결성에 위배되어서 Insert를 수행할 수 없음.

          - 새 직원 <’이방원’, ‘123’, ‘456’, 5> 삽입

                           → 참조 무결성에 위배되어 삽입할 수 없음.

          - SSN=’666’인 직원 삭제

                           → 참조 무결성에 위배.



 

정규화와 성능

  • 이상현상 (Anomaly)

          - 삭제 이상 (delete anomaly)

                ▪  ’1102’ 학생이 ‘A01’을 수강한 기록을 삭제할 때

          - 삽입 이상 (insert anomaly)

                ▪ (1104, 유관순, 010-4444-5555)인 학생을 추가하고자 할 때

          - 갱신 이상 (update anomaly)

                ▪  ‘1101’ 학생의 연락처가 변경된 경우

 

  • 정규화

          - 목적 : 삽입 / 삭제 / 갱신 이상현상 방지

          - 함수적 종속성(FD, Functional Dependency)에 기반

          - 종류

                ▪ 1NF : 모든 값이 원자값을 가짐

                ▪ 2NF : 부분함수종속 제거

                ▪ 3NF : 이행함수종속 제거

                           → 식별자가 아닌 속성(주식별자의 일부 또는 일반속성)이 결정자 역할을 하는 함수 종속 제거 -> 3NF

          - 2차 정규화를 통해 2NF를 생성하는 예

                ▪ 부분함수종속 제거

          - 3차 정규화를 통해 3NF를 생성하는 예

                ▪ 이행함수종속 제거

 

  • 정규화

          - 효과

                ▪ 데이터 중복 감소 → 성능 향상 

                ▪ 데이터가 관심사별로 묶임 → 성능 향상

                ▪ 조회 질의에서 조인이 많이 발생 -> 성능 저하

                           → 정규화를 통해 일반적으로 성능이 향상되나, 조회의 경우 처리 조건에 따라 성능이 향상되거나 저하됨



 

정규화와 성능

  • 정규화를 통한 성능 개선 예

          - 특정 학생의 학년 변경시

                ▪ 정규화 전 : 해당 학생이 수강 테이블에 나타나는 수만큼 변경

                ▪ 정규화 후 : 해당 학생의 학년 한 건만 변경

          - 3학년 학생의 학번, 이름 조회시

                ▪ 정규화 전 : 수강 이력이 누적된 수만큼 인스턴스 조회

                ▪ 정규화 후 : 학생 수만큼 인스턴스 조회 (성능 향상)

          - 학번, 학생명, 과목명, 평점 조회시

                ▪ 정규화 전 : 하나의 테이블에서 모두 조회

                ▪ 정규화 후 : 조언 필요 (약간의 성능 저하)



 

반정규화와 성능

  • 반정규화의 정의

          - 반정규화(=역정규화=Denormalization)

          - 정규화된 엔터티, 속성, 관계에 대해 성능 향상을 목적으로 중복, 통합, 분리를 수행하는 데이터 모델링 기법

                ▪ Cf ) 비정규화 : 정규화를 아예 수행하지 않음

 

  • 특징

          - 테이블, 칼럼, 관계의 반정규화를 종합적으로 고려해야 함

                ▪ 일반적으로 속성(칼럼)의 중복을 시도함

          - 과도한 반정규화 -> 데이터 무결성을 침해하게 됨

 

  • 반정규화의 사전 절차

          - 다른 방법 유도

                ▪ 뷰(View) 생성 : 뷰 자체가 성능 향상을 가져오지는 않음, 신중하게 설계된 뷰를 재사용할 때 성능 향상

                ▪ 클러스터링 : 자주 사용되는 테이블의 데이터를 디스크의 같은 블록에 저장

                ▪ 인덱스의 조정 : 인덱스 추가, 삭제 및 순서 조정

                ▪ 응용 애플리케이션 : 데이터 처리를 위한 로직 변경

 

  • 반정규화 기법

          - 칼럼 반정규화

                ▪ 중복칼럼 추가

                ▪ 파생칼럼 추가

                ▪ 이력테이블칼럼 추가

                ▪ PK의 의미적 분리를 위한 칼럼 추가

                ▪ 데이터 복구를 위한 칼럼 추가

          - 테이블 반정규화

                ▪ 테이블 병화 – 관계 병합, 슈퍼/서브타입 병합

                ▪ 테이블 분할 – 수직 분할, 수평 분할

                ▪ 테이블 추가 – 중복 테이블 추가, 통계 테이블 추가, 이력 테이블 추가, 부분 테이블 추가

          - 관계 반정규화

                ▪ 중복관계 추가

 

  • 반정규화 기법 – 칼럼 반정규화
반정규화 기법 내용
중복칼럼 추가 조인 횟수를 감소시키기 위해, 다른 테이블의 칼럼을 중복으로 저장함
파생칼럼 추가 값의 계산으로 인한 시간 지연을 줄이기 위해, 예상되는 값을 미리 계산하여 중복으로 저장함 (Derived Attribute)
이력테이블칼럼 추가 대량 이력 데이터 처리의 성능 향상을 위해 종류 여부, 최근값 여부 등의 칼럼을 추가로 저장함
PK의 의미적 분리를 위한 칼럼 추가 PK가 복합 의미를 갖는 경우 구성 요소 값의 조회 성능 향상을 위해 일반 속성을 추가함 (예 : 차량번호가 ‘지역’+’일련번호’로 구성된 경우 ‘지역’ 일반속성 추가)
데이터 복구를 위한 칼럼 추가 사용자의 실수 또는 응용프로그램 오류로 인해 데이터가 잘못 처리된 경우, 원래 값으로의 복구를 위해 이전 데이터를 임시적으로 중복 저장

 

  • 중복칼럼 추가

          - 해당 테이블에서 자주 사용하는 칼럼을 중복시킴

                ▪ 예 : 각 사원의 이름과 소속지점명을 조회하는 질의가 많은 경우

 

 

  • 파생칼럼 추가

          - 질의가 예상되는 값을 미리 계산하여 저장함

          - 칼럼에 의한 파생

          - 로우에 의한 파생

                ▪ 특정 로우가 변경되면 모든 로우 값 다시 계산 -> 가급적 사용하지 않아야 함

 

  • 이력테이블칼럼 추가

          -  이력테이블에 최근값, 종료여부 등의 칼럼을 중복으로 추가

                ▪ 예 : 직원이 가장 최근 등록한 차량을 조회하는 경우

 

Comments