데이터 모델의 개념

 

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

 

  • 데이터 모델 구성 요소
    • 개체 : 데이터베이스에 표현하려는 것.
    • 속성 : 데이터의 가장 작은 논리적 단위
    • 관계 : 개체 간 관계 또는 속성 간 논리적 연결을 의미
  • 데이터 모델 종류
    • 개념적 데이터 모델
      • 현실 세계에 대한 인간의 이해를 돕기 위해 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정
      • 대표적 개념적 데이터 모델은 E-R 모델이 있다.
    • 논리적 데이터 모델
      • 개념적 모델링  과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있는 컴퓨터 세계의 환경에 맞도록 변환하는 과정
      • 품질 검증
        • 개체 품질 검증 항목
        • 속성 품질 검증 항목
        • 관계 품질 검증 항목
        • 식별자 품질 검증 항목
        • 전반적인 품질 검증 항목
    • 물리적 데이터 모델
  • 데이터 모델에 표시할 요소
    • 구조 : 논리적으로 표현된 개체 타입들 간의 관계. 데이터 구조 및 정적 성질을 표현
    • 연산 : 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세. 데이터베이스를 조작하는 기본 도구.
    • 제약 조건 : 데이터베이스에 저장될 수 있는 실제 데이터의 논리적 제약 조건

이상/함수적 종속/정규화

 

이상 : 테이블에서 일부 속성들의 종속으로 인해 데이터 중복이 발생하고, 중복으로 인해 테이블 조작 시 문제가 발생하는 현상

 

  • 삽입 이상 : 테이블에 데이터를 삽입할 때 의도와는 상관 없이 원하지 않은 값들로 인해 삽입할 수 없게 되는 현상
  • 삭제 이상 : 테이블에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 연쇄 삭제가 발생하는 현상
  • 갱신 이상 : 테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성이 생기는현상

함수적 종속 : 데이터의 의미를 표현하는 것. 현실 세계를 표현하는 제약 조건이 되는 동시에 데이터베이스에서 항상 유지되어야 할 조건.

 

ex)

학번 이름 학년 학과
100 김철수 2 컴퓨터공학과
200 박유리 3 전자전기제어학과
300 이민지 3 인공지능학과
400 최우찬 4 건축학과

 

위 테이블에서 학번에 의해 이름, 학년, 학과가 결정되기 때문에

함수적 종속은 다음과 같이 표시한다.

 

학번 → 이름, 학년, 학과

 

이 때, 학번은 결정자(Determinant)라 하고, 이름, 학년, 학과는 종속자(Dependent)라고 한다.

 

  • 완전 함수적 종속
    • 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우
    • 기본키를 전부 알아야 식별 가능한 속성인 경우 완전 함수적 종속
  • 부분 함수적 종속
    • 릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 속성 중 일부만 종속되는 경우
    • 기본키의 일부만으로도 혹은 기본키가 아닌 다른 속성으로도 식별이 가능한 속성인 경우.

참고 https://dodo000.tistory.com/20


정규화 : 테이블의 속성들이 상호 종속적 관계를 갖는 특성을 이용해 테이블을 무손실 분해하는 과정

목적 : 가능한 한 중복을 제거해 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것.

 

  • 제 1정규형
    • 테이블의 모든 속성 값이 원자 값으로만 되어 있는 정규형 즉, 도메인이 원자값(한 칸엔 하나의 값만)인 것이다.
  • 제 2 정규형
    • 기본키가 아닌 모든 속성이 기본키에 대해 완전 함수적 종속을 만족하는 정규형 즉, 부분적 함수 종속을 제거한다.
  • 제 3 정규형
    • 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수적 종속을 만족하지 않는 정규형 즉, 이행적 함수 종속을 제거한다.
  • BCNF
    • 모든 결정자가 후보키인 정규형 즉, 결정자가 후보키가 아닌 것을 제거한다.
  • 제 4 정규형
    • 다치 종속이 존재할 경우 함수적 종속 관계 만족하는 정규형
    • 다치 종속성 관계를 제거한다.
  • 제 5 정규형
    • 모든 조인 종속이 후보키를 통해서만 성립되는 정규형
    • 후보키를 통하지 않은 조인 종속 관게를 제거한다.
    • 세 가지 이상 속성 사잉에 서로 연관성이 존재하면 조인 종속이 존재. 제 5정규형 위반. 다 따로 분해하여 준다. 분해 후 다시 조인하면 원래의 릴레이션으로 돌아갈 수 있는 형태가 된다.
    • 지나치게 이상적인 정규형이다.

 

참고 https://mangastorytelling.tistory.com/entry/04-%EC%A0%95%EA%B7%9C%ED%99%94-Normalization-5


논리 데이터 모델의 물리 데이터 모델로 변환

 

테이블은 데이터를 저장하는 데이터베이스의 가장 기본적인 오브젝트이다.

 

  • 테이블 구성 요소
    • 로우(튜플 / 인스턴스 / 어커런스)
    • 컬럼 : 각 속성 항목에 대한 값을 저장한다.
    • 기본키 : 후보키 중에서 선택한 주 키이다. 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다.
    • 외래키 : 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합.

논리 데이터 모델에서 정의된 엔티티를 물리 데이터 모델의 테이블로 변환

변환 후에는 테이블 목록 정의서(전체 테이블을 목록으로 요약 관리하는 문서)를 작성한다.

 

  • 변환 규칙
    • 엔티티 -> 테이블
    • 속성 -> 컬럼
    • 주 식별자 -> 기본키
    • 외부 식별자 -> 외래키
    • 관계 -> 관계

  • 슈퍼타입 / 서브타입을 테이블로 변환
    • 슈퍼타입 기준 테이블 변환
      • 서브타입을 슈퍼타입에 통합해 하나의 테이블로 만드는 것
      • 장점
        • 데이터 액세스가 상대적으로 용이
        • 뷰를 이용해 각각의 서브타입만을 액세스하거나 수정 가능
        • 서브타입 구분이 없는 임의 집합에 대한 처리 용이
        • 여러 테이블을 조인하지 않아도 돼 수행 속도가 빨라짐
        • SQL 문장 구성이 단순해짐
      • 단점
        • 테이블 컬럼이 증가해 디스크 저장 공간 증가
        • 처리마다 서브타입에 대한 구분이 필요한 경우가 많이 발생
        • 인덱스 크기 증가로 인덱스 효율이 떨어짐
    • 서브타입 기준 테이블 변환
      • 슈퍼타입 속성들을 각각 서브타입에 추가해 서브타입들을 개별적 테이블로 만드는 것
      • 장점
        • 각 서브타입 속성들의 선택 사양이 명확한 경우 유리
        • 처리할 때마다 서브타입 유형을 구분할 필요가 없음
        • 여러 개 테이블로 통합해 테이블당 크기가 감소해 전체 테이블 스캔 시 유리
      • 단점
        • 수행 속도가 감소할 수 있음
        • 복잡한 처리를 하는 SQL의 통합이 어려움
        • 부분 범위에 대한 처리가 곤란
        • 여러 테이블을 통합한 뷰는 조회만 가능
        • 식별자의 유지 관리가 어려움
    • 개별타입 기준 테이블 변환
      • 슈퍼타입과 서브타입들을 각각 개별적인 테이블로 변환하는 것
      • 장점
        • 저장 공간이 상대적으로 작음
        • 슈퍼타입 또는 서브타입 각각 테이블에 속한 정보만 조회하는 경우 문장 작성이 용이
      • 단점
        • 슈퍼타입 또는 서브타입의 정보를 같이 처리하면 항상 조인이 발생해 성능 저하
  • 속성을 컬럼으로 변환
    • 일반 속성 변환
      • 속성과 컬럼의 명칭은 가능한 표준화된 약어를 사용해 일치시키기
      • 가능한 짧게 지정
      • 컬럼 정의 후 한 로우에 해당하는 샘플 데이터를 작성해 컬럼의 정합성 검증
    • Primary UID를 기본키로 변환
      • 다른 엔티티와의 관계로 인해 생긴 Primary UID도 기본키로 만든다.
    • Secondary UID/Alternate Key를 유니크키(해당 속성의 입력값이 유일하다는 제약 조건)로 변환
  • 관계를 외래키로 변환
    • 1:1 관계
      • 개체 A의 기본키를 개체 B의 외래키로 추가하거나 개체 B의 외래키를 개체 A의 기본키로 추가
    • 1:M 관계
      • 개체 A의 기본키를 개체 B의 외래키로 추가하거나 별도의 테이블로 표현
    • N:M 관계
      • 릴레이션 A와 B 기본키 모두 포함한 별도의 릴레이션(교차 릴레이션 / 교차 엔티티)으로 표현.
    • 1:M 순환 관계
      • 개체 A에 개체 A의 기본키를 참조하는 외래키 컬럼 추가. 주로 데이터 계층 구조를 표현하기 위해 사용

반정규화

 

반정규화란 시스템의 성능, 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정. 의도적으로 정규화 원칙을 위배하는 행위

 

  • 테이블 통합
    • 두 개의 테이블이 조인되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움될 경우 수행
  • 테이블 분할
    • 수평 분할
      • 레코드 별로 사용 빈도의 차이가 큰 경우 사용 빈도에 따라 테이블 분할
    • 수직 분할
      • 갱신이 자주 일어나는 속성들을 수직 분할
      • 자주 조회되는 속싱들을 수직 분할
      • 크기가 큰 (2GB 이상) 속성들을 수직 분할
      • 보안을 적용해야 하는 속성들 수직 분할
  • 중복 테이블 추가
    • 집계 테이블 추가 : 트리거를 설정해 사용하는 것
    • 진행 테이블 추가 : 이력 관리 등의 목적으로 추가하는 테이블
    • 특정 부분만을 포함하는 테이블 추가 : 데이터가 많은 테이블의 특정 부분만 사용할 때 그 부분만으로 새로운 테이블 생성
  • 중복 속성 추가
    • 조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가하는 것

인덱스 / 뷰 / 클러스터 / 파티션 설계

 

  • 인덱스
    • 데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조
    • 레코드 물리적 순서가 인덱스의 엔트리 순서와 일치하게 유지되도록 구성되는 인덱스를 클러스터드 인덱스라 한다.
    • 분포도가 좁은 테이블에 유리
    • 종류
      • 트리 기반 인덱스 : 인덱스를 저장하는 블록들이 트리 구조를 이루고 있는 것
        • B 트리 인덱스 : 루트 노드에서 하위 노드로 키 값의 크기를 비교해가며 단말 노드에서 찾고자 하는 데이터를 검색
        • B+ 트리 인덱스
          • B 트리 변형. 단말 노드가 아닌 노드로 구성된 인덱스 세트와 단말 노드로만 구성된 순차 세트로 구분.
          • 인덱스 세트에 있는 노드들은 단말 노드에 있는 키 값을 찾아갈 수 있는 경로로 제공, 순차 세트에 있는 단말 노드가 해당 데이터 레코드의 주소를 가리킴.
      • 비트맵 인덱스 : 인덱스 컬럼의 데이터를 Bit 값인 0 또는 1로 변환해 인덱스키로 사용하는 방법
      • 함수 기반 인덱스 : 컬럼에 특정 함수나 수식을 적용해 산출된 값을 사용하는 것. B+ 트리 인덱스나 비트맵 인덱스를 생성해 사용.
      • 비트맵 조인 인덱스 : 다수 조인된 객체로 구성된 인덱스. 비트맵 인덱스와 물리적 구조 동일
      • 도메인 인덱스 : 개발자가 필요한 인덱스를 직접 만들어 사용하는 것.
    • 인덱스 설계
      1. 인덱스 대상 테이블이나 컬럼 등 선정
      2. 인덱스 효율성을 검토해 인덱스 최적화 수행
      3. 인덱스 정의서 작성
    • 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 이름을 갖는 가상 테이블.
    • 물리적으로 구현되어 있지 않다.
    • 장점
      • 논리적 데이터 독립성 제공
      • 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구 지원
      • 사용자의 데이터 관리를 간단하게 해줌
      • 접근 제어를 통한 자동 보안 제공
    • 단점
      • 독립적인 인덱스를 가질 수 없음
      • 뷰의 정의를 변경할 수 없음
      • 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약
    • 뷰 설계
      1. 대상 테이블 선정
      2. 대상 컬럼 선정
      3. 정의서 작성
  • 클러스터
    • 데이터 저장 시 데이터 액세스 효율을 향상시키기 위해 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 물리적 저장 방법
    • 데이터 조회 속도는 향상시키나 연산에 대한 성능은 저하
    • 분포도가 넓은 테이블에 유리
    • 처리 범위가 넓을 경우 단일 테이블 클러스터링, 조인이 많을 경우 다중 테이블 클러스터링
  • 파티션
    • 대용량 테이블이나 인덱스를 작은 논리적 단위인 파티션으로 나누는 것
    • 장점
      • 데이터 접근 시 액세스 범위를 줄여 쿼리 성능 향상
      • 파티션별 데이터가 분산되어 저장돼 디스크 성능 향상
      • 파티션별 백업 및 복구를 수행해 속도가 빠름
      • 시스테 맞ㅇ애 시 데이터 손상 정도를 최소화
      • 데이터 가용성 향상
      • 파티션 단위로 입*출력 분산
    • 단점
      • 세심한 관리 요구
      • 테이블간 조인에 대한 비용 증가
      • 용량이 작은 테이블에 파티셔닝을 수행하면 오히려 성능 저하
    • 종류
      • 범위 분할 : 지정한 열의 값을 기준으로 분할
      • 해시 분할 : 해시 함수를 적용한 겨로가 값에 따라 데이터 분할
      • 조합 분할 : 범위 분할로 분할한 후 해시 홤수를 적용해 다시 분할
    • 인덱스 파티션
      • 파티션된 데이터를 관리하기 위해 인덱스를 나눈 것
      • 종류
        • 파티션된 테이블 종속 여부에 따라
          • Local Partitioned Index : 테이블 파티션과 인덱스 파티션이 1:1 대응
          • Global Partitioned Index : 테이블 파티션과 인덱스 파티션이 독립적으로 구성
        • 인덱스 파티션키 컬럼의 위치에 따라
          • Prefixed Partitioned Index : 인덱스 파티션키와 첫 번째 컬럼이 같다.
          • Non-Prefixed Partitioned Index : 다르다.

'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글

6장 화면 설계  (0) 2021.07.02
5장 서버 프로그램 구현  (0) 2021.06.29
4장 통합 구현  (0) 2021.06.27
2장 요구사항 확인  (0) 2021.06.26
1장 프로그래밍 언어 활용  (0) 2021.06.14

+ Recent posts