728x90
- 모델링은 단지 시스템 구현만을 위해 수행하는 타스크가 아니며, 시스템 구현을 포함한 업무분석 및 업무형상화를 하는 목적도 있다.
- 데이터 모델링을 하는 주요한 이유는 일정한 표기법에 의해 표현함으로써 정보시스템 구축의 대상이 되는 업무 내용을 정확하게 분석하는 것이 첫 번째 목적이다. 두 번째는 분석된 모델을 가지고 실제 데이터베이스를 생성하여 개발 및 데이터관리에 사용하기 위한 것이 두 번째 목적이다.
- 데이터모델링을 할 때 유의사항 : 중복성, 비유연성, 비일관성
- 개념적 데이터 모델링 - 추상화 수준이 높고 업무 중심적이며 포괄적인 수준의 모델링
물리적 데이터 모델링 - 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등의 물리적인 성격을 고려한 데이터 모델링 - 개념스키마 - 통합관점의 스키마구조를 표현한 것
- 가장 중요한 엔터티를 왼쪽 상단에 배치하고, 이것을 중심으로 다른 엔터티를 나열하면서 전개하면 사람의 눈이 따라가기에 편리한 데이터 모델을 작성할 수 있다.
- 엔터티의 특징
- 영속적으로 존재하는 두 개 이상의 인스턴스의 집합이어야 한다.
- 엔터티는 반드시 속성이 있어야 한다.
- 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다. (공통코드, 통계성 엔터티의 경우 관계를 생략할 수 있다.) - 기본엔터티(키 엔터티)
- 독립적으로 생성이 가능하고 타 엔터티의 부모 역할을 하게 된다. (사원, 부서, 상품, 자재, 고객 등) - 엔터티를 명명하는 일반적인 기준
- 가능하면 현업업무에서 사용하는 용어를 사용
- 가능하면 약어를 사용하지 않음
- 단수명사를 사용
- 모든 엔터티를 통틀어서 유일하게 이름 부여
- 엔터티 생성의미대로 이름을 부여 - 속성 : 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위
- 하나의 인스턴스에서 각각의 속성은 한 개의 속성값을 가져야 한다.
- 파생 속성(derived attribute) : 데이터를 조회할 때 빠른 성능을 할 수 있도록 하기 위해 원래 속성의 값을 계산하여 저장할 수 있도록 만든 속성
- 도메인(domain) : 각 엔터티(테이블)의 속성에 대해서 어떤 유형의 값이 들어가는지를 정의하는 개념
- 데이터모델링에서는 존재적 관계와 행위에 의한 관걔를 구분하는 표기법이 없으며, UML에서는 연관관계와 의존관계에 대해 다른 표기법을 가지고 표현하게 되어 있다.
- 관계 표기법은 관계명, 관계차수, 선택성(선택사양)의 3가지 개념으로 표현한다.
- 동사는 관계를 서술하는 업무기술서의 가장 중요한 사항이다.
- 두 개의 엔터티 사이에서 관계를 정의할 때 체크해야 할 항목
- 두 개의 엔터티 사이에 관심있는 연관규칙이 존재하는가?
- 두 개의 엔터티 사이에 정보의 조합이 발생되는가?
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
- 업무기술서, 장표에 관계연결을 가능하게 하는 동사가 있는가? - 부모엔터티의 주식별자를 자식엔터티에서 받아 손자엔터티까지 계속 흘려 보내기 위해서는 식별자관계를 고려해야 한다.
- 부모엔터티의 인스턴스가 자식 엔터티와 같이 소멸되는 경우는 식별자관계로 정의하는 것이 더 적합하다.
- 반정규화(역정규화)
1) 데이터모델링을 할 때 정규화를 정확하게 수행한다.
2) 데이터베이스 용량산정을 수행한다.
3) 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
4) 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
5) 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.
6) 성능관점에서 데이터모델을 검증한다. - 함수종속성의 규칙 - 2차 정규화
- 칼럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성을 위배 - 1차 정규화
- 다량 데이터 탐색의 경우 인덱스가 아닌 파티션 및 데이터 클러스터링 등의 다양한 물리 저장 기법을 활용하여 성능 개선을 유도할 수 있음.
- 이전 또는 이후 위치의 레코드에 대한 탐색은 window function으로 접근 가능
- 부분테이블 추가 - 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때, 해당 칼럼들을 별도로 모아 놓는 반 정규화 기법
- 한 테이블에 많은 칼럼들이 존재할 경우 데이터가 불리적으로 저장되는 디스크 상에 넓게 분포할 가능성이 커지게 되어 디스크 I/O가 대량으로 발생하여 성능이 저하될 수 있다. 따라서 트랜잭션이 접근하는 칼럼유형을 분석해서 자주 접근하는 칼럼들과 상대적으로 접근 빈도가 낮은 칼럼들을 구분하여 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 성능을 향상시킬 수 있다.
- 트랜잭션은 항상 전체를 통합하여 분석 처리하는데 슈퍼-서브타입이 하나의 테이블로 통합되어 있으면 하나의 테이블에 집적된 데이터만 읽어 처리할 수 있기 때문에 다른 형식에 비해 더 성능이 우수하다.
- EQUAL 조건으로 조회되는 칼럼이 가장 앞으로 나오고, 범위조회 하는 유형의 칼럼이 그 다음에 오도록 하는 것이 인덱스 엑세스 범위를 좁힐 수 있는 가장 좋은 방법이다.
- 엔터티 간에 관계를 정의하여 관련 엔터티 상호간에 업무적인 연관성이 있음을 표현한 경우에는 FK Constraints를 생성했는지 여부와 상관없이 조인 성능을 향상시키기 위한 인덱스를 생성해주는 것이 좋다.
- Global Single Instance(GSI)는 통합된 한 개의 인스턴스, 통합 데이터베이스 구조를 의미하므로 분산데이터베이스와는 대치되는 개념이다.
728x90
'△ > SQLD' 카테고리의 다른 글
조인 방식(NL, SORT MERGE, HASH JOIN) (0) | 2023.07.14 |
---|---|
인덱스 (0) | 2023.07.14 |
옵티마이저 (1) | 2023.06.09 |
PL/SQL (0) | 2023.06.05 |
윈도우 함수와 문제풀이3 - 권한 (0) | 2023.06.05 |
댓글