정보처리기사

[정처기 실기] 3장 - 데이터 입,출력 구현

jooona 2021. 4. 14. 12:31
반응형

데이터 모델의 개념

데이터 모델은 현실 세계의 정보들을 컴퓨터에 표현하기 위해서 단순화, 추상화하여 체계적으로 표현한 개념적 모형이다.

 

구성요소

  • 개체: 데이터베이스에 표현하려는 것. 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체.
  • 속성: 데이터의 가장 작은 논리적 단위. 파일 구조상의 데이터 항목 또는 데이터 필드에 해당.
  • 관계: 개체 간의 관계 또는 속성 간의 논리적인 연결을 의미.

개념적 데이터 모델: 현실 세계에 대한 인간의 이해를 돕기 위해 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정. (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):  사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 테이블로부터 유도된, 이름을 가지는 가상 테이블.

  • 저장장치 내에 물리적으로 존재하지 않음
  • 데이터의 논리적 독립성 제공
  • 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해짐
  • 기본 테이블의 기본키를 포함한 속성 집합으로 뷰를 구성해야지만 삽입, 삭제, 갱신 연산이 가능하다
  • [단점] 독립적인 인덱스를 가질 수 없다
  • [단점] 뷰의 정의를 변경할 수 없다
  • [단점] 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 따른다

 

클러스터 설계

클러스터: 데이터 저장 시 데이터 액세스 효율을 향상시키기 위해 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 물리적 저장 방법.

  • 데이터 조회 속도는 향상. 데이터 입력, 수정, 삭제에 대한 성능은 저하.
  • 데이터의 분포도가 넓을수록 유리. (인덱스와 반대) --> 저장 공간을 절약
  • 파티셔닝 된 테이블에는 클러스터링 불가
  • 분포도가 넓은 테이블, 대량의 범위를 자주 조회하는 테이블, 입력/수정/삭제가 자주 발생하지 않는 테이블에 유리

 

파티션 설계

파티션: 대용량의 테이블이나 인덱스를 작은 논리적 단위인 파티션으로 나누는 것.

  • 데이터 접근 시 액세스 범위를 줄여 쿼리 성능 향상
  • 파티션 별로 데이터가 분산되어 저장되므로 디스크의 성능이 향상
  • 파티션별로 백업 및 복구를 수행하므로 속도가 빠름
  • 시스템 장애 시 데이터 손상 정도를 최소화
  • 데이터 가용성이 향상 // [장점]
  • 하나의 테이블을 세분화하여 관리하므로 세심한 관리가 요구
  • 테이블 간 조인에 대한 비용이 증가
  • 용량이 작은 테이블에 파티셔닝을 수행하면 오히려 성능이 저하. // [단점]

범위 분할: 지정된 열의 값을 기준으로 분할

해시 분할: 해시 함수를 적용한 결과 값에 따라 데이터를 분할

조합 분할: 범위 분할로 분할한 다음 해시 함수를 적용하여 다시 분할

 

 

* 이 글은 시나공 정보처리기사 실기 책을 토대로 작성되었습니다.

반응형