성능데이터모델링

; 데이터베이스 성능 향상을 목적으로 설계단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것

 

성능데이터모델링 수행 절차

1. 데이터모데링을 할 때 정규화를 정확하게 수행

2. 데이터베이스 용량산정을 수행

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

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

5. 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등을 수행

6. 성능관점에서 데이터모델 검증

 

함수종속성 규칙에 따라 2차 정규화로 분리

 

칼럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성으 위배한 제 1차 정규화의 대상

 

반정규화는 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 성능을 향상시키기 위한 기법으로 정보에 대한 재현의 적시성으로 판단한다

 

로우체이닝이 발생할 정도로 한 테이블에 많은 컬럼들이 존재할 경우 조회성능저하가 발생할 수 있음, 트랜잭션이 접근하는 컬럼유형을 분석하여 1:1 테이블을 분리하면 디스크 I/0가 줄어들어 조회 성능을 향상 시킬 수 있음

 

논리적으로 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 액세스 성능도 향상시키고, 데이터 관리 방법도 개선할 수 있도록 테이블에 적용하는 기법을 파티셔닝이라고 한다

 

인덱스가 값의 범위에 따라 일정하게 정렬이 되어 있을 때, 상수값으로 EQUAL 조건으로 조회되는 칼럼이 가장 앞으로 나오고 범위 조회하는 유형의 칼럼이 그 다음에 오도록 하는 것이 인덱스 범위를 좁힐 수 있는 가장 좋은 방법

 

분산데이터베이스 장점

- 지역 자치성, 점증적 시스템 용량 확장

- 신뢰성과 가용성

- 효용성과 융통성

- 빠른 응답 속도와 통신 비용 절감

- 데이터의 가용성과 신뢰성 증가

- 시스템 규모의 적절한 조절

- 각 지역 사용자의 요구 수용 증대

 

분산데이터베이스 단점

- 소프트웨어 개발 비용

- 오류의 잠재성 증대

- 처리 비용의 증대

- 설계, 관리의 복잡성과 비용

- 불규칙한 응답 속도

- 통제의 어려움

- 데이터 무결성에 대한 위협

 

분산데이터베이스 환경에서 데이터베이스 분산설계를 적용하여 효율성을 증대시킬 수 있는 것

- 공통코드, 기준 정보 등 마스터 데이터는 분산데이터베이스에 복제분산을 적용한다

- 거의 실시간 업무적인 특성을 가지고 있을 때 분산데이터베이스를 사용하여 구성할 수 있다

- 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성할 수 있다

 

GSI(global single instance)를 구성할 때는 통합 데이터베이스 구조를 사용해야함

 

 

 

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

정리_fin1  (0) 2023.03.16
정리 2  (0) 2023.03.12
트랜잭션 Transaction, NULL  (0) 2023.03.12
반정규화 De-Normalization  (0) 2023.03.12
정규화 Normalization  (0) 2023.03.12

 

데이터 모델링의 첫 번째 목적은 정보시스템 구축의 대상이 되는 업무 내용을 정확하게 분석하는 것이며, 분석된 모델을 가지고 실제 데이터베이스를 생성하여 개발 및 데이터 관리에 사용하기 위한 것이 두 번째 목적이다

 

데이터 모델링의 유의점은 중복, 비유연성(데이터의 정의를 데이터의 사용 프로세스와 분리), 비일관성(데이터간의 상호 연관관계를 명확하게 정의)

 

개념적 데이터 모델링은 추상화 수준이 높고 업무중심적이고 포괄적인 수준의 모델링 진행, 전사적 데이터 모델링, EA 수립시 많이 이용

논리적 데이터 모델링은 시스템으로 구축하고자 하는 업무에 대해 key 속성, 관계 등을 정확하게 표현, 재사용성이 높음

물리적 데이터 모델링은 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계

 

데이터베이스 스키마 구조 3단계 : 외부스키마, 개념스키마, 내부스키마

개념 스키마 - 모든 사용자 관점을 통합한 조직 전체 관점의 통합적 표현, 모든 응용시스템들이나 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 DB를 기술한 것으로 DB에 저장되는 데이터와 그들 간의 관계를 표현하는 스키마

 

ERD 작성 순서

1. 엔터티를 그린다

2. 엔터티를 적절하게 배치한다

3. 엔터티간 관계를 설정한다

4. 관계명을 기술한다

5. 관계의 참여도를 기술한다

6. 관계의 필수여부를 기술한다

 

ERD 작성시, 가장 중요한 엔터티는 왼쪽 상단에서 조금 아래쪽 중앙에 배치

 

엔터티의 특징

- 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 한다

- 유일한 식별자에 의해 식별이 가능해야 한다

- 영속적으로 존재하는 두 개 이상의 인스턴스의 집합이어야 한다

- 업무 프로세스에 의해 이용되어야 한다

- 엔터티는 반드시 속성이 있어야 한다

- 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다

 

발생시점에 따른 엔터티 분류

- 기본 엔터티 : 다른 엔터티로부터 주식별자를 상속받지 않고 자신의 고유한 주식별자를 가짐

- 중심 엔터티

- 행위 엔터티

 

속성

; 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위

 

엔터티, 인스턴스, 속성, 속성값의 관계

- 한 개의 엔터티는 두 개 이상의 인스턴스의 집합이어야 한다

- 한 개의 엔터티는 두 개 이상의 속성을 갖는다

- 한 개의 속성은 한 개의 속성값을 갖는다

 

속성에 특성에 따른 분류

- 기본속성

- 파생속성 : 데이터를 조회할 때 빠른 성능을 낼 수 있도록 하기 위해 원래 속성의 값을 계산하여 저장할 수 있도록 만든 속성

- 설계속성

 

도메인;

각 속성은 가질 수 있는 값의 범위가 있는데, 이를 도메인이라 하며 엔터티 내에서 속성에 대한 데이터 타입과 크기 그리고 제약사항을 지정하는 것

 

속성의 명칭 부여

- 해당 업무에서 사용하는 이름을 부여한다

- 서술식 속성명은 사용하지 않는다

- 약어 사용은 가급적 제한한다

- 전체 데이터 모델에서 유일성 확보하는 것이 좋다

 

데이터모델링의 관계

- 관계는 존재에 의한 관계와 행위에 의한 관계로 구분될 수 있으나 ERD에서는 관계를 연결할 때, 존재와 행위를 구분하지 않고 단일화된 표기법을 사용한다

- UML에는 클래스다이어그램의 관계 중 연관관계와 의존관계가 있고 이것은 실선과 점선의 표기법으로 다르게 표현된다

 

관계 표기법관계명, 관계차수, 관계선택사양의 3가지 개념으로 표현한다

- 관계명 : 관계의 이름

- 관계차수 : 1:1, 1:M, M:N

- 관계선택사양 : 필수관계, 선택관계

 

두 개의 엔터티 사이에 정의한 관계를 체크하는 사항

- 두 개의 엔터티 사이에 관심 있는 연관규칙이 존재하는가?

- 두 개의 엔터티 사이에 정보의 조합이 발생되는가?

- 업무기술서, 장표에 관계 연결을 가능하게 하는 동사(Verb)가 있는가?

- 업무기술서, 장표에 관계 연결에 대한 규칙이 서술되어 있는가?

 

주식별자를 지정할 때 고려해야 할 사항

- 유일성 : 주식별자에 의해 엔터티 내의 모든 인스턴스들이 유일하게 구분되어야 한다

- 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다

- 불변성 : 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다

- 존재성 : 주식별자가 지정이 되면 반드시 값이 들어와야 한다(Null 안됨)

 

식별자 관계

; 강한 연결관계 표현, 자식 주식별자의 구성에 포함됨, 실선 표현, 반드시 부모 엔터티 종속, 자식 주식별자구성에 부모 주식별자 표함 필요, 상속받은 주식별자속성을 타엔터티에 이전 필요

 

비식별자 관계

; 약한 연결관계 표현, 자식 일반 속성에 포함됨, 점선 표현, 약한 종속 관계, 자식 주식별자구성을 독립적으로 구성, 자식 주식별자구성에 부모 주식별자 부분 필요, 상속받은 주식별자속성을 타 엔터티에 차단 필요, 부모쪽의 관계 참여가 선택관계

 

엔터티별로 데이터의 생명주기를 다르게 관리할 경우, 예를 들어 부모엔터티의 인스턴스가 자식의 엔터티와 관계를 가지고 있었찌만 자식만 남겨두고 먼저 소멸할 경우 비식별자 관계로 연결하는 것이 적절하다

 

식별자의 분류 체계

대표성 여부

- 주식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자

- 보조식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결을 못함

스스로 생성 여부

- 내부식별자 : 엔터티 내부에서 스스로 만들어지는 식별자

- 외부식별자 : 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자

속성의 수

- 단일식별자 : 하나의 속성으로 구성된 식별자

- 복합식별자 : 둘 이상의 속성으로 구성된 식별자

대체여부

- 본질식별자 : 업무에 의해 만들어지는 식별자

- 인조식별자 : 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자

 

 

 

 

 

 

 

 

 

 

 

 

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

정리_fin2  (0) 2023.03.16
정리 2  (0) 2023.03.12
트랜잭션 Transaction, NULL  (0) 2023.03.12
반정규화 De-Normalization  (0) 2023.03.12
정규화 Normalization  (0) 2023.03.12

 

성능 데이터 모델링

데이터베이스의 성능을 향상시키기 위해 설계 단계부터 성능과 관련된 사항들이 모델링에 반영될 수 있다. 성능 데이터 모델링의 방법으로는 정규화, 반정규화, 테이블 통합, 테이블 분할 등이 있다

 

성능 데이터 모델링 순서

1) 데이터 모델에 맞게 정규화를 수행

2) 데이터베이스의 용량 및 트랜잭션 유형을 파악하여 성능 저하를 일으키는 부분이 없는지 검토

3) 용량과 트랜잭션 유형에 맞게 반정규화 수행

4) 성능 향상을 위한 이력 모델의 조정, PK/FK 조정, 슈퍼/서브타입 조정 등을 수행

5) 데이터 모델의 성능 검증

 

트랜잭션

; 데이터를 조작하기 위한 논리적인 직업 단위로, 데이터 모델로 표현할 수 있으며 데이터는 트랜잭션 범위로 묶일 수 있음

하나의 커밋 단위로 묶여야 한다

 

3차 정규화는 이행 함수 종속성을 제거한다

 

이력 테이블 컬럼 추가는 대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가해 놓는 방식

 

공통 속성을 조회하는 빈도수가 개별 속성을 조회하는 빈도수보다 높으면 공통 속성과 개별 속성을 별도로 관리하는 슈퍼-서브 타입의 설계가 적절하다

 

중복관계추가는 반정규화의 기법 중 하나로 데이터 무결성을 깨뜨릴 위험성 없이 데이터 처리 성능을 향상시킬 수 있는 기법

 

 

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

정리_fin2  (0) 2023.03.16
정리_fin1  (0) 2023.03.16
트랜잭션 Transaction, NULL  (0) 2023.03.12
반정규화 De-Normalization  (0) 2023.03.12
정규화 Normalization  (0) 2023.03.12

 

트랜잭션 : 데이터를 조작하기 위한 하나의 논리적인 작업 단위

 

NULL : 존재하지 않음, 즉 값이 없음

 

가로연산 - NULL이 포함되어 있으면 결과값은 NULL이 됨

세로연산 - 다른 인스턴스의 데이터와 연산할 때는 NULL 값을 제외

 

 

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

정리_fin1  (0) 2023.03.16
정리 2  (0) 2023.03.12
반정규화 De-Normalization  (0) 2023.03.12
정규화 Normalization  (0) 2023.03.12
정리1  (0) 2023.03.12

 

반정규화 : 데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정

반정규화는 정규화를 마친 후 성능상 이슈가 있을 때만 고려하는 것이 원칙

 

테이블 반정규화

1) 테이블 병합

: 업무 프로세스 상 JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우 고려

- 1:1 관계 테이블 병합; 비교적 판단하기 수월하고 부작용 적음

- 1:M 관계 테이블 병합; 1쪽에 해당하는 엔터티의 속성 개수가 많으면 병합했을 경우 중복 데이터가 많아지므로 테이블 병합에 적절하지 못함

- 슈퍼 서브 타입 테이블 병합

 

2) 테이블 분할

- 테이블 수직 분할 : 엔터티의 일부 속성을 별도의 엔터티로 분할(1:1 관계 성립); 자주 사용하는 속성이 아니거나 인스턴스가 해당 속성값을 NULL로 갖고 있을 때 고려

- 테이블 수평 분할 : 엔터티의 인스턴스를 특정 기준으로 별도의 엔터티로 분할(파티셔닝), 주로 기준은 기간, 관계가 없는 다수의 테이블이 생성됨

 

 

3) 테이블 추가

- 중복 테이블 추가

- 통계 테이블 추가

- 이력 테이블 추가

- 부분 테이블 추가

-> 단순히 같은 데이터를 여러 테이블에 저장하는 것은 데이터 정합성에 위배되는 상황 발생

 

칼럼 반정규화

- 중복 컬럼 추가

- 파생 컬럼 추가; 계산값을 미리 컬럼으로 추가하여 보관하는 방식, 상품의 재고나 프로모션 적용 할인가

- 이력 테이블 컬럼 추가; 대량의 이력 테이블을 조회할 때, 최신 데이터 여부

 

관계 반정규화(중복관계 추가)

 

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

정리 2  (0) 2023.03.12
트랜잭션 Transaction, NULL  (0) 2023.03.12
정규화 Normalization  (0) 2023.03.12
정리1  (0) 2023.03.12
식별자 Identifiers  (0) 2023.03.12

 

정규화 : 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정

데이터 조회성능은 처리 조건에 따라 향상되는 경우도 있고 저하되는 경우(여러 번의 JOIN을 해야함)도 있지만, 입력, 수정, 삭제 성능은 일반적으로 향상됨, 데이터에 대한 중복성을 제거, 정규화 할수록 엔터티 증가

 

제 1정규형

- 속성값이 하나가 되도록 엔터티를 분리

- 유사한 속성이 반복되지 않도록 엔터티를 분리

 

제 2정규형

- 주식별자에 대한 부분종속이 없도록 엔터티를 분리

 

제 3정규형

- 다른 일반속성에 종속되지 않도록 엔터티를 분리

 

 

 

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

트랜잭션 Transaction, NULL  (0) 2023.03.12
반정규화 De-Normalization  (0) 2023.03.12
정리1  (0) 2023.03.12
식별자 Identifiers  (0) 2023.03.12
관계 Relationship  (0) 2023.03.12

 

데이터 모델링을 할 때 지양해야 할 점

- 중복 : 같은 데이터가 여러 엔터티에 중복으로 저장되는 현상을 지양해야함

- 비유연성 : 데이터 모델의 설계에 따라 어플리케이션의 사소한 변경에도 데이터 모델이 수시로 변경되어야 하는 상황이 생길 수 있음, 이런 상황은 시스템을 유지보수하는 데에 어려움을 가중시키므로 데이터 모델과 프로세스를 분리하여 유연성을 높이는 것이 바람직함

- 비일관성 : 데이터의 중복이 없는 경우에도 발생 가능, 데이터간의 연관 관계에 대해 명확하게 정의해야함

 

ERD에서는 존재에 의한 관계와 행위에 의한 관계를 구분하지 않고 표현하며, 클래스 다이어그램에서는 이것을 구분하여 연관 관계와 의존 관계로 표현

 

식별자 관계 : 강한 관계, 부모 엔터티의 식별자가 자식 엔터티의 주식별자, 부모 엔터티가 있어야 생성 가능, 실선으로 표현

비식별자 관계 : 약한 관계, 부모 엔터티의 식별자가 자식 엔터티의 일반속성, 부모 엔터티 없는 자식 엔터티 생성 가능, 점선으로 표현

 

대리식별자(인조식별자) : 주식별자의 속성이 두 개 이상인 경우, 그 속성들을 하나로 묶어서 사용하는 식별자

 

 

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

반정규화 De-Normalization  (0) 2023.03.12
정규화 Normalization  (0) 2023.03.12
식별자 Identifiers  (0) 2023.03.12
관계 Relationship  (0) 2023.03.12
속성 Attribute  (0) 2023.03.12

 

식별자 : 각각의 인스턴스를 구분 가능하게 만들어주는 것

 

주식별자; 하나의 속성이 주 식별자가 될 수도 있고 여러 개의 속성이 주 식별자가 될 수도 있음

- 유일성 : 각 인스턴스에 유니크함을 부여하여 식별이 가능하도록 한다

- 최소성 : 유일성을 보장하는 최소 개수의 속성이어야 한다

- 불변성 : 속성값이 되도록 변하지 않아야 한다

- 존재성 : 속성값이 NULL일 수 없다

 

분류

1) 대표성 여부

- 주식별자 : 유일성, 최소성, 불변성, 존재성을 가진 대표 식별자, 다른 엔터티와 참조 관계로 연결

- 보조식별자 : 인스턴스를 식별할 수는 있지만 대표 식별자가 아님, 다른 엔터티와 참조 관계로 연결되지 않음

2) 스스로 생성되었는지 여부

- 내부식별자 : 엔터티 내부에서 스스로 생성된 식별자

- 외부식별자 : 다른 엔터티에서 온 식별자, 다른 엔터티와의 연결고리 역할

3) 단일 속성의 여부

- 단일식별자 : 하나의 속성으로 구성된 식별자

- 복합식별자 : 두 개 이상의 속성으로 구성된 식별자

4) 대체 여부

- 원조식별자 : 업무 프로세스에 존재하는 식별자, 가공되지 않은 원래의 식별자

- 대리식별자 : 주식별자의 속성이 두 개 이상인 경우 그 속성들을 하나로 묶어서 사용하는 식별자, ex) 주문번호 = 주문일자 + 순번

 

식별자 관계 identification relationship

- 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 되는 관계

- 주식별자는 반드시 존재해야하므로 부모 엔터티가 있어야 생성가능

- 단일식별자인지 복합식별자인지에 따라 1:1이거나 1:M으로 결정됨

 

비식별자 관계 non-identification relationship

- 부모 엔터티의 식별자가 주식별자가 아닌 일반속성이 되는 관계

- 일반 속성값은 NULL이 될 수 있으므로 부모 엔터티가 없는 자식 엔터티 생성이 가능

- 자식 엔터티가 존재하는 상태에서 부모 엔터티 삭제 가능

 

 

 

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

정규화 Normalization  (0) 2023.03.12
정리1  (0) 2023.03.12
관계 Relationship  (0) 2023.03.12
속성 Attribute  (0) 2023.03.12
엔터티(Entity)  (0) 2023.03.12

+ Recent posts