23. 물리 DB 모델링
DB 무결성
개념
데이터의 정확성, 일관성, 유효성이 유지되는 것
데이터의 무결성을 유지하는 것은 DBMS의 중요한 기능
데이터에 적용되는 연산에 제한을 두어 데이터의 무결성을 유지
종류
개체 무결성 | Entity Integrity
모든 릴레이션은 기본키로 선택된 컬럼을 가져야 함
기본키는 중복되지 않은 고유한 값을 가져야 함
릴레이션의 기본키는 NULL 값을 허용하지 않음
참조 무결성 | Referential Integrity
외래키 값은 NULL이거나 참조하는 릴레이션의 기본키 값과 동일해야 함
각 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없음
참조 무결성 제약조건
제한 | Restrict- 문제가 되는 연산을 거절
연쇄 | Cascade- 참조되는 릴레이션에서 튜플을 삭제하고 참조하는 릴레이션에서 이 튜플을 참조하는 튜플도 함께 삭제
널값 | Nullify- 참조되는 릴레이션에서 튜플을 삭제하고 참조하는 릴레이션에서 이 튜플을 참조하는 튜플들의 외래키에 NULL 등록
기본값 | Default- NULL을 넣는 대신에 디폴트 값을 등록
도메인 무결성 | Domain Integrity
속성들의 값은 정의된 도메인에 속한 값이어야 함
성별이라는 컬럼에는 남, 여 를 제외한 데이터는 제한되어야 함
고유 무결성 | Unique Integrity
- 릴레이션의 특정 속성에 대해 각 튜플이 갖는 속성 값들이 서로 달라야 함
키 무결성 | Key Integrity
- 하나의 릴레이션에는 적어도 하나의 키가 존재해야 함
릴레이션 무결성 | Relational Integrity
- 삽입, 삭제, 갱신과 같은 연산을 수행하기 전과 후에 대한 상태의 제약
Key
개념
- DB에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 컬럼
종류
후보키 | Candidate Key
릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별할 수 있는 속성들의 부분집합
모든 릴레이션은 반드시 하나 이상의 후보키를 가져야 함
릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 함
기본키 | Primary Key
후보키 중에서 선택한 주키(Main Key)
한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성
NULL 값을 가질 수 없음(개체 무결성)
기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없음(개체 무결성)
대체키 | Alternate Key
후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키
보조키 라고도 함
슈퍼키 | Super Key
한 릴레이션 내에 있는 속성들의 집합으로 구성된 키
릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족하지만, 최소성은 만족시키지 못함
외래키 | Foreign Key
관계를 맺고 있는 릴레이션 R1, R2에서 릴레이션 R1이 참조하고 있는 릴레이션 R2의 기본키와 같은 R1 릴레이션의 속성
참조되는 릴레이션의 기본키와 대응되어 릴레이션 간에 참조 관계를 표현하는데 중요한 도구로 사용
외래키로 지정되면 참조 테이블의 기본키에 없는 값은 입력할 수 없음(참조 무결성 조건)
컬럼 속성
개념
릴레이션에서 정보를 나타내는 최소 단위로, 각 열의 상태나 특성을 나타내는 항목
릴레이션에서 특정한 단순 자료형의 일련의 데이터값과 릴레이션에서의 각 열
컬럼은 열이 어떻게 구성되어야 할지에 대한 구조를 제공
관계형 DB 용어에서 컬럼과 같은 의미로 사용되는 것은 속성(Attribute)
특징
시스템을 구축하려는 업무 프로세스에 필요한 정보로 구성
하나의 속성은 하나의 속성값만을 가짐
- 여러 개의 속성값이 들어가면 별도의 테이블로 분리
분류
기본 속성 : 업무로부터 추출한 모든 속성
설계 속성 : 코드성 데이터, 릴레이션 식별용 일련번호
파생 속성 : 다른 속성에 영향을 받아 발생하는 속성(계산값, 합계, 재고 등)
세부 의미에 따른 분류
단순 속성 : 나이, 성별같이 다른 속성들로 구성될 수 없는 단순한 속성
복합 속성 : 주소와 같이 시, 구, 동 처럼 여러 세부 속성들로 구성될 수 있는 속성
구성방식에 따른 분류
Primary Key Attribute : 릴레이션에서 튜플을 유일하게 구분할 수 있는 속성
Foreign Key Attribute : 다른 릴레이션과의 관계에서 참조하고 있는 속성
일반 속성 : 릴레이션에 포함된 속성 중, PK와 FK가 아닌 속성
Domain
- 속성이 가질 수 있는 값의 범위
속성명 부여 원칙
해당 업무에서 사용하는 이름을 부여
서술식 속성명은 사용하지 않음
약어사용은 가급적 제한
전체 데이터 모델에서 유일성을 확보하는 것이 좋음
반정규화
개념
DB 정규화 이후, 성능향상과 개발 편의성 등 정규화 기법에 위배되는 수행기법
정규화된 개체, 속성, 관계를 시스템의 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법
고려사항
데이터의 중복이 발생하여 데이터 수정 시 무결성이 꺠질 수 있음
읽기 속도는 향상되지만, 삽입 & 삭제 & 수정 속도는 느려짐
저장공간의 효율이 떨어짐
테이블이 크고 복잡해져 유지보수가 어려움
과도한 반정규화는 오히려 성능을 저하시킴
반정규화를 위해서는 사전에 데이터의 일관성과 무결성을 우선으로 할지, DB의 성능과 단순화를 우선으로 할지 결정해야 함
적용 순서
반정규화 대상 조사
자주 사용하는 테이블에 접근하는 프로세스의 수가 많고 항상 일정 범위만을 조회하는 경우
테이블에 대량의 데이터가 있고, 대량의 데이터 범위를 자주 처리하는 경우
통계 정보를 필요로 할 때
지나치게 많은 조인이 걸려 있을 때
다른 방법으로 유도
성능을 고려한 뷰를 생성하고, 뷰를 통해 접근하게 함으로 성능저하 위험 예방
인덱스나 클러스터링을 통한 성능 향상
파티셔닝 고려
어플리케이션의 로직을 변경하여 성능 향상
반정규화 수행
유형
테이블 분할
수평 분할 : 레코드 단위로 분할
수직 분할 : 컬럼 단위로 분할
테이블 중복
통계 테이블 추가 : DW, OLAP 데이터 용
진행 테이블 추가 : 업무 프로세스 상태
컬럼기반 분할
조회 빈도 기반 : 고빈도 컬럼 분리
크기 기반 분할 : 일정 용량 컬럼 분리
컬럼 중복
중복 컬럼 추가 : 자주 조회되는 컬럼 추가
파생 컬럼 추가 : 연산 결과 별도 저장
물리테이터 모델 품질 기준
개요
물리데이터 모델은 시스템 성능에 대해 직접적인 영향을 미치기 때문에 향후에 발생할 수 있는 성능 문제를 사전에 검토
물리데이터 모델 품질 기준의 목적은 성능과 오류 예방의 관점으로 나눌 수 있음
항목
정확성
데이터 모델이 표기법에 따라 정확하게 표현되었는지 검토
업무영역, 요구사항이 정확하게 반영되었는지 검토
완전성
데이터 모델의 구성요소를 정의하는데 있어서 누락을 최소화
업무영역, 요구사항 반영에 있어서 누락을 없앰
준거성
- 제반 준수 요건들이 누락 없이 정확하게 준수되었음을 의미
최신성
- 데이터 모델이 현행 시스템의 최신 상태를 반영하고 있고 이슈사항들이 지체없이 반영되고 있음을 의미
일관성
- 여러 영역에서 공통 사용되는 데이터 요소가 전사 수준에서 한 번만 정의되고, 이를 여러 다른 영역에서 참조하고 활용되면서 모델 표현상의 일관성을 유지하고 있음을 의미
활용성
작성된 모델과 그 설명 내용이 이해관계자에게 의미를 충분하게 전달될 수 있음을 의미
업무 변화 시에 설계 변경이 최소화되도록 유연하게 설계되었음을 의미
데이터 품질 관리
대상
데이터 값 : 데이터 현상, 데이터 구조적 값
데이터 주소 : 각 단계별 데이터 구조
데이터 관리 프로세스 : 데이터 정의, 변경, 평가 프로세스
지표
정확성 : 실세계를 정확히 반영
일관성 : 동일 데이터 간 불일치 미존재
유용성 : 요구되는 데이터 충족
접근성 : 원하는 데이터를 손쉽게 이용
적시성 : 최신성 유지
보안성 : 외부 요인으로부터 데이터 보호
CRUD 분석
개념
데이터 처리 기능인
Create, Read, Update, Delete를 묶어서 표현시스템 구축 시 프로세스와 DB에 저장되는 데이터 사이의 의존관계를 표현하는 표
시스템을 구축하기 위해 해당 업무에 어떤 데이터가 존재하는지 무엇이 영향을 받는지 분석
DB에 영향을 주는 생성, 읽기, 갱신, 삭제 연산으로 프로세스와 테이블 간에 매트릭스를 만들어서 트랜잭션을 분석
필요성
모델링 작업 검증
- 분석 단계의 데이터 모델과 업무 프로세스 모델에 대한 작업 검증
테스트 시 사용
- 테스트 자료로 사용되며, 각 테스트 단위별 데이터의 변화를 확인
인터페이스 현황 파악
- 전체 업무의 인터페이스 파악
SQL 성능 튜닝
개념
SQL 문을 최적화하여 빠른 시간 내에 원하는 결과값을 얻기 위한 작업
주어진 H / W 환경을 통해 처리량과 응답속도를 개선하기 위해 수행
접근 방법
부하의 감소 : 동일한 부하를 보다 효율적인 방법을 수행
부하의 조정 : 부하 정도에 따라 업무를 조정하는 방법
부하의 병렬 수행 : 부하가 많이 걸리는 부분을 병렬로 처리하는 방법
튜닝 영역
DB 설계 튜닝 : DB 설계 단계에서 성능을 고려하여 설계
DB 환경 : 성능을 고려하여 메모리나 블록 크기 등을 지정
SQL 문장 튜닝 : 성능을 고려하여 SQL 문장 작성
Optimizer
사용자가 질의한 SQL 문에 대해 최적의 실행 방법을 결정하는 역할을 수행
실행 계획을 결정
옵티마이저 구분
규칙 기반 옵티마이저 | Rule Based Optimizer
- 규칙(우선순위)를 가지고 실행 계획을 생성
- 인덱스 유무, 연산자, 객체 등을 참조하여 우선순위를 부여
비용 기반 옵티마이저 | Cost Based Optimizer
- SQL 문을 처리하는데 필요한 비용이 가장 적은 실행 계획을 선택하는 방식
- 소요시간이나 자원 사용량을 가지고 실행 계획 생성
- 테이블, 인덱스, 컬럼 등의 다양한 객체 통계정보와 시스템 통계정보 활용
튜닝 절차
- 시스템 현황 분석
- 문제점 탐지 및 원인 분석
- 목표 설정
- 튜닝 시행
- 결과 분석
Row Migration / Row Chaining
Row Migration
데이터가 수정되면서 데이터가 더 커져서 기존 block에 못들어가는 경우
다른 블록에 데이터를 넣고, 기존 블록 위치에는 링크를 남김
Row Chaining
- 컬럼이 너무 길어서 DB BLOCK 사이즈보다 길어진 경우 블록 두 개에 이어서 한 행이 저장