데이터 모델의 개념
데이터 모델은 현실 세계의 정보들을 컴퓨터에 표현하기 위해서 단순화, 추상화하여 체계적으로 표현한 개념적 모형이다.
구성요소
- 개체: 데이터베이스에 표현하려는 것. 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체.
- 속성: 데이터의 가장 작은 논리적 단위. 파일 구조상의 데이터 항목 또는 데이터 필드에 해당.
- 관계: 개체 간의 관계 또는 속성 간의 논리적인 연결을 의미.
개념적 데이터 모델: 현실 세계에 대한 인간의 이해를 돕기 위해 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정. (E-R 모델)
논리적 데이터 모델: 개념적 모델링 과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있는 컴퓨터 세계의 환경에 맞도록 변환하는 과정.
데이터 모델에 표시할 요소
- 구조(Structure): 논리적으로 표현된 개체 타입들 간의 관계. 데이터 구조 및 정적 성질을 표현.
- 연산(Operation): 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세. 데이터베이스를 조작하는 기본 도구.
- 제약 조건(Constraint): 데이터베이스에 저장될 수 있는 실제 데이터의 논리적인 제약 조건.
이상 / 함수적 종속 / 정규화
이상(Anomaly): 테이블에서 일부 속성들의 종속으로 인해 데이터의 중복이 발생하고, 이 중복으로 인해 테이블의 조작 시 문제가 발생하는 현상. 삽입 이상, 삭제 이상, 갱신 이상이 있음.
함수적 종속(Functional Dependency): 결정자 X에 의해 종속자 Y가 결정됨.
정규화(Normalization): 테이블의 속성들이 상호 종속적인 관계를 갖는 특성을 이용하여 테이블을 무손실 분해하는 과정.
- 제 1 정규형: 테이블의 모든 속성의 도메인이 원자 값 만으로 되어있는 정규형.
- 제 2 정규형: 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족. (부분 함수 종속을 제거)
- 제 3 정규형: 이행적 함수적 종속을 제거한 정규형.
- BCNF: 모든 결정자가 후보키인 정규형.
- 제 4 정규형: 다치 종속 제거.
- 제 5 정규형: 조인 종속.
논리 데이터 모델의 물리 데이터 모델로 변환
테이블: 데이터를 저장하는 데이터베이스의 가장 기본적인 오브젝트.
논리 데이터 모델에서 정의된 엔티티를 물리 데이터 모델의 테이블로 변환
- 엔티티 --> 테이블
- 속성 --> 컬럼
- 주 식별자 --> 기본키
- 외부 식별자 --> 외래키
- 관계 --> 관계
<슈퍼타입/서브타입을 테이블로 변환>
슈퍼타입 기준 테이블 변환: 서브타입을 슈퍼타입에 통합하여 하나의 테이블로 만듦.
- 서브타입에 속성이나 관계가 적을 경우에 적용.
- 데이터의 액세스가 상대적으로 용이.
- 서브타입 구분이 없는 임의 집합에 대한 처리가 용이.
- 여러 테이블을 조인하지 않아도 되므로 수행 속도가 빨라짐.
- SQL 문장 구성이 단순해짐// [장점]
- 테이블의 컬럼이 증가하기 때문에 디스크 저장 공간이 증가.
- 처리마다 서브타입에 대한 구분이 필요한 경우가 많이 발생.
- 인덱스의 크기 증가로 인덱스의 효율이 감소. // [단점]
서브타입 기준 테이블 변환: 슈퍼타입 속성들을 각각의 서브타입에 추가하여 서브타입들을 개별적인 테이블로 만듦.
- 각 서브타입 속성들의 선택 사양이 명확한 경우에 유리.
- 처리할 때마다 서브타입 유형을 구분할 필요가 없음.
- 여러 테이블로 통합하므로 테이블의 크기가 감소하여 전체 테이블 스캔 시 유리. // [장점]
- 수행 속도가 감소할 수 있음.
- 복잡한 처리를 하는 SQL의 통합이 어려움. // [단점]
개별타입 기준 테이블 변환: 슈퍼타입과 서브타입들을 각각의 개별적인 테이블로 변환.
- 슈퍼타입과 서브타입 테이블들 사이에는 각각 1:1 관계가 형성.
- 저장 공간이 상대적으로 작음.
- 조인이 많이 발생하여 성능이 저하.
반정규화(Denormalization)
반정규화: 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로, 의도적으로 정규화 원칙을 위배하는 행위.
- 테이블 통합: 두 개의 테이블이 조인되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움이 되는 경우 수행.
- 테이블 분할: 테이블을 수직 또는 수평으로 분할
- 수평 분할: 레코드를 기준으로 테이블을 분할. 레코드 별로 사용 빈도의 차이가 큰 경우 사용 빈도를 기준으로 테이블을 분할.
- 수직 분할: 하나의 테이블에 속성이 너무 많을 경우 속성을 기준으로 테이블을 분할.
- 중복 테이블 추가: 여러 테이블에서 데이터를 추출해서 사용해야 하거나 다른 서버에 저장된 테이블을 이용해야 하는 경우.
- 정규화로 인해 수행 속도가 느려지는 경우
- 많은 범위의 데이터를 자주 처리해야 하는 경우
- 특정 범위의 데이터만 자주 처리해야 하는 경우
- 처리 범위를 줄이지 않고는 수행 속도를 개선할 수 없는 경우
- 중복 속성 추가: 조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가.
- 조인이 자주 발생하는 속성
- 접근 경로가 복잡한 속성
- 액세스의 조건으로 자주 사용되는 속성
- 기본키의 형태가 적절하지 않거나 여러 개의 속성으로 구성
인덱스 설계
인덱스: 데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조
- 인덱스는 데이터가 저장된 물리적 구조와 밀접한 관계
- 인덱스는 레코드가 저장된 물리적 구조에 접근하는 방법을 제공
- 인덱스를 통해서 파일의 레코드에 대한 액세스를 빠르게 수행 가능
- 인덱스가 없으면 특정 값을 찾기 위해 모든 데이터 페이지를 확인하는 TABLE SCAN이 발생
- 레코드 삽입과 삭제가 수시로 일어나는 경우에는 인덱스의 개수를 최소로 유지하는 것이 효율적
- 기본키를 위한 인덱스 --> 기본 인덱스, 기본 인덱스가 아닌 인덱스들 --> 보조 인덱스
- 레코드의 물리적 순서가 인덱스의 엔트리 순서와 일치하게 유지되도록 구성되는 인덱스를 클러스터드(Clustered) 인덱스라고 한다.
- 분포도가 좁은 테이블에 유리
트리 기반 인덱스 --> B 트리 인덱스, B+ 트리 인덱스
비트맵 인덱스: 인덱스 컬럼의 데이터를 bit 값인 0또는 1로 변환하여 인덱스 키로 사용
- 분포도가 좋은 컬럼에 적합. (분포도가 좋다 == 분포도가 낮다)
- Bit로 구성되므로 효율적인 논리 연산이 가능. 저장 공간이 작다.
도메인 인덱스: 개발자가 필요한 인덱스를 직접 만들어 사용
함수 기반 인덱스: 컬럼에 특정 함수나 수식을 적용하여 산출된 값을 사용.
뷰 설계
뷰(View): 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 테이블로부터 유도된, 이름을 가지는 가상 테이블.
- 저장장치 내에 물리적으로 존재하지 않음
- 데이터의 논리적 독립성 제공
- 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해짐
- 기본 테이블의 기본키를 포함한 속성 집합으로 뷰를 구성해야지만 삽입, 삭제, 갱신 연산이 가능하다
- [단점] 독립적인 인덱스를 가질 수 없다
- [단점] 뷰의 정의를 변경할 수 없다
- [단점] 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 따른다
클러스터 설계
클러스터: 데이터 저장 시 데이터 액세스 효율을 향상시키기 위해 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 물리적 저장 방법.
- 데이터 조회 속도는 향상. 데이터 입력, 수정, 삭제에 대한 성능은 저하.
- 데이터의 분포도가 넓을수록 유리. (인덱스와 반대) --> 저장 공간을 절약
- 파티셔닝 된 테이블에는 클러스터링 불가
- 분포도가 넓은 테이블, 대량의 범위를 자주 조회하는 테이블, 입력/수정/삭제가 자주 발생하지 않는 테이블에 유리
파티션 설계
파티션: 대용량의 테이블이나 인덱스를 작은 논리적 단위인 파티션으로 나누는 것.
- 데이터 접근 시 액세스 범위를 줄여 쿼리 성능 향상
- 파티션 별로 데이터가 분산되어 저장되므로 디스크의 성능이 향상
- 파티션별로 백업 및 복구를 수행하므로 속도가 빠름
- 시스템 장애 시 데이터 손상 정도를 최소화
- 데이터 가용성이 향상 // [장점]
- 하나의 테이블을 세분화하여 관리하므로 세심한 관리가 요구
- 테이블 간 조인에 대한 비용이 증가
- 용량이 작은 테이블에 파티셔닝을 수행하면 오히려 성능이 저하. // [단점]
범위 분할: 지정된 열의 값을 기준으로 분할
해시 분할: 해시 함수를 적용한 결과 값에 따라 데이터를 분할
조합 분할: 범위 분할로 분할한 다음 해시 함수를 적용하여 다시 분할
* 이 글은 시나공 정보처리기사 실기 책을 토대로 작성되었습니다.
'정보처리기사' 카테고리의 다른 글
[정처기 실기] 7장 - 애플리케이션 테스트 관리 (0) | 2021.04.14 |
---|---|
[정처기 실기] 6장 - 화면 설계 (0) | 2021.04.14 |
[정처기 실기] 5장 - 서버 프로그램 구현 (0) | 2021.04.14 |
[정처기 실기] 4장 - 통합 구현 (0) | 2021.04.14 |
[정처기 실기] 2장 - 요구사항 확인 (1) | 2021.04.14 |