티스토리 뷰

성능 데이터 모델링


- DB 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것
 
- 분석/설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우 성능저하에 따른 재업무 비용을 최소화 할 수 있는 기회를 가지게 됨
 
- 데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 기하급수적으로 증가하게 됨
- 성능 향상을 위해 튜닝을 수행하면 데이터베이스 모델이 변경될 수 있음
 
- 성능 데이터 모델링 고려사항 순서
ⓐ 데이터 모델링을 할 때 정규화를 정확하게 수행
DB 용량산정을 수행(전체 용량, 월간, 연간 증감율)
 - 배치를 통해 입력되는 데이터 용량이 크면 클수록 성능 튜닝을 위한 비용이 증가
ⓒ DB에 발생되는 트랜잭션의 유형(CRUD : Create Read Update Delete)을 파악
용량과 트랜잭션의 유형에 따라 반정규화(합계 및 정산 등)를 수행
이력모델의 조정, PK/FK조정, 슈퍼/서브타입 조정
성능관점에서 데이터 모델을 검증
 - 성능 향상을 위해 튜닝을 수행하면 데이터베이스 모델링이 변경될 수 있음

 

 

정규화(Normalization)


⬛ 정규화
  - 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정
  - 정규화는 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법
  - 정규화를 수행하면 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화할 수 있음
  - 정규화는 제1정규화부터 제5정규화까지 있지만, 실질적으로는 제3정규화 까지만 수행

 

 
  - 정규화된 모델은 테이블이 분해. 테이블이 분해되면 직원 테이블과 부서 테이블 간에 부서코드로 조인(Join)

    을 수행하여 하나의 합집합으로 만들 수도 있다.
  - 정규화를 수행하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거
  - 정보의 삽입/삭제/갱신 이상이 발생하지 않음, 정보의 손실을 막음
 
⬛ 정규화를 하지 않아 발생하는 이상현상
정규화 수행하지 않고, 엔터티에 데이터를 입력할 때 
  - 삭제 이상현상 : 불필요한 데이터를 같이 입력하거나 삭제하면 다른 데이터까지 같이 삭제
  - 갱신 이상현상 : 특정 정보를 업데이트하면 그에 해당하는 정보들이 다 업데이트가 안 됨
  - 삽입 이상현상 : 업무에 맞지 않는 데이터의 정보를 삽입됨

(* 데이터베이스 보안과 관련있는 것은 뷰)
 
⬛ 정규화 절차 [함수의 종속성(Functional Dependency)]

 정규화 절차설명
 제1정규화- 속성의 원자성을 확보 (모든 속성은 반드시 하나의 값을 가짐)
- 기본키를 설정
- 컬럼 단위에서 중복된 경우(일재고-재고일자PK, 월초재고수량, 장기재고1개월수량, 장기재고2개월 수량,...)도 1차 정규화 대상 (이에 대한 분리는 1:M 관계로 두 엔터티 분리)

ex) 아래 그림에서 회원ID가 이름을 함수적으로 종속. 계좌테이블이 Y의 컬럼들을 함수적으로 종속. X테이블은 계좌번호 하나만으로 유일성을 만족하지 못한다고 하면 계좌번호와 회원ID를 기본키로 잡음

 제2정규화- 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)
- 기본키가 하나의 컬럼으로 이루어지면 제2정규화 생략
- 모든 속성은 반드시 기본 키 전부에 종속되어야 함
ex) 아래 그림에서 회원이라는 새로운 테이블 도출되고 회원ID 기본키 됨
 제3정규화- 기본키를 제외한 일반 컬럼 간에 종속성을 제거 (속성 간 종속성을 가지면 안된다)
- 즉, 이행 함수 종속성을 제거
3정규화는 제1정규화와 제2정규화를 수행한 다음에 해야 함
ex) 관리점이 관리점 코드에 종속되는 것을 이행 함수 종속성. 제3정규화를 수행하면 관리점 테이블이 도출되고 관리점 코드가 기본키가 됨
 
 BCNF- 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해
- 복수의 후보키가 있고 후보키들이 복합속성이어야 하며 서로 중첩되어야 함
ex) 기본키(학번, 과목번호)가 교수를 함수적으로 종속. 교수가 후보키(최소성, 유일성을 만족)이고 교수가 과목번호를 함수적으로 종속하는 경우 분해. 교수 테이블을 새롭게 만들고 기본키는 교수로 하고 컬럼은 과목번호가 됨
 제4정규화- 여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거
 제5정규화- 조인에 의해서 종속성이 발생되는 경우 분해
- 결합 종속(Join Dependency)일 경우 다수의 테이블로 분리

 

제품번호 + 주문번호 식별자가 되면 엔터티의 유일성을 만족
제 1정규화는 이러한 식별자를 찾는 과정

기본키가 제품번호 + 주문번호이므로 제2정규화 대상
모든 속성(제품명, 재고수량, 수출 여부 등)이 식별자에 종속해야 하며 그렇지 않은 경우에는 분해
1001, 모니터가 중복 되므로 엔터티를 분해하는 것이 필요. 이것이 제2정규화
제품/주문_고객/주문 3개의 엔터티가 도출

 

정규화와 성능


⬛ 정규화의 문제점 예제

  - 정규화는 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높임
  - 정규화는 데이터 조회 (SELECT)시에 조인(Join)을 유발하기 때문에 CPU와 메모리를 많이 사용
  - 조인의 사용

select 사원번호, 부서코드, 부서명, 이름, 전화번호, 주소
   from 직원, 부서
 where 직원.부서코드 = 부서.부서코드;
(ANSI Join)
select 사원번호,  부서코드, 부서명, 이름,전화번호, 주소
 from 직원
 inner join 부서
    on 직원.부서코드= 부서.부서코드:

 - 직원과 부서 테이블에서 부서 코드가 같은 것을 찾는 것을 프로그램화한다면 중첩된 루프(Nested Loop)를 사용해야 함
 - 결과적으로 이중으로 for문을 사용해서 비교하는 기능을 만들어야 조인을 할 수 있다.
 - 이러한 구조는 데이터 양이 증가하면 비교해야 하는 건수도 증가한다.
 - 물론 실제로 위와 같은 비효율이 발생하지는 않음
 - 결론적으로 조인이 부하를 유발하는 것은 분명
 
⬛ 정규화의 문제점 해결 방법
 - 위 문제를 해결하기 위해서 인덱스와 옵티마이저(Optimizer)가 있는 것

[ Index
: RDBMS에서 검색 속도를 높이기 위한 기술. TABLE의 컬럼을 색인화(따로 파일로 저장)하여 검색 시 해당 TABLE의 레코드를 Full Scan하는게 아니라 색인화 되어있는 INDEX 파일을 검색하여 검색속도를 빠르게 함
* 데이터베이스에서 인덱스를 생성하면 인덱스 키는 정렬되어 있음
* 특정 테이블에 인덱스를 사용해서 접근하면 원하는 값을 빠르게 탐색
* 많은 양의 데이터를 인덱스를 사용해서 스캔하는 경우에 오히려 성능이 떨어질 수 있음
* 인덱스를 생성하지 않고 기본키만 설정하면 자동으로 인덱스/인덱스명이 부여
 (기본키는 자동으로 인덱스 생성. 'CREATE UNIQUE INDEX 인덱스명 ON 테이블명(컬럼명)을 사용해서 인덱스 이름 부여 가능)
* 인덱스의 특징은 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞쪽에 위치한 속성의 값이 비교자로 있어야 좋은 효율을 나타냄. 앞쪽에 위치한 속성의 값이 가급적 ‘=’ 아니면 최소한 범위 ‘BETWEEN’ ‘<>’ 가 들어와야 효율
* 인덱스는 값의 범위에 따라 일정하게 정렬
* 상수값으로 EQUAL 조건(‘=’ 조건)으로 조회되는 컬럼이 가장 앞으로 나오고 범위 조회하는 유형의 컬럼이 그 다음에 오도록 하는 것이 인덱스 액세스 범위를 좁힐 수 있는(인덱스의 이용 효율성이 높이는) 가장 좋은 방법
 

[ 옵티마이저(Optimizer) ]
: 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진. DBMS의 두뇌는 옵티마이저)
2과목에서 설명
 

[옵티마이저-Hash ion 기법]
• 해시 조인은 CPU 연산이 많이 발생되는 조인
• 조인 작업을 수행할 때는 결과 행의 수가 적은 테이블을 선행 테이블로 사용하는 것이 좋다.
• Hash Jon은 조인 칼럼의 인덱스가 존재하지 않을 경우에도 사용할 수 있는 기법이다.
• Hash Join은 해시 함수를 이용하여 조인을 수행하기 때문에 으로 수행하는 조인인 동등조건에서만 사용할 수 있다.
• 해시 함수가 적용될 때 동일한 값은 항상 같은 값으로 해시됨을 보장한다.
• Hash Join 작업을 수행하기 위해서 해시 테이블을 메모리에 생성해야 한다.
• 해시 테이블을 저장할 때 메모리에 적재할 수 있는 영역의 크기보다 커지면 임시 영역(디스크)에 저장한다.
• 선행 테이블을 Build Input이라고 하며 후행 테이블은 Prove Input이라 한다.
 
 - 정규화의 문제점(성능 저하)을 해결하기 위해서 반정규화를 하여 하나의 테이블에 저장한다면 조인을 통한 성능 저하는 해결될 것
 
⬛ 정규화를 사용한 성능 튜닝
  - 조인으로 인하여 성능이 저하되는 문제를 반정규화로 해결할 수 있다.
  - 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 발생

  - 계좌마스터의 칼럼이 계속적으로 증가하면 조인이 최소화되기 때문에 조회를 빠르게 할 수 있을 것
  - 너무 많은 칼럼이 추가되면 한 개 행의 크기가 데이터베이스 관리시스템의 입출력 단위인 블록의 크기(Block Size)를 넘어서게 됨
  -  반정규화의 문제점) 한 개의 행을 읽기 위해서 여러 개의 블록을 읽어야 하는데 그렇게 되면 디스크 입, 출력이 증가하기 때문에 성능이 떨어지게 됨. 
  - 위와 같은 문제가 발생하면 테이블을 분해하는 방법 밖에 없음.
  - 따라서 정규화는 입출력 데이터의 양을 줄여서 성능을 향상시킬 수 있는 것

 
 
 
 

반정규화(De-Normalization)


⬛ 반정규화(De-Normalization)
    - 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법
    - (데이터 조회 시 디스크 I/O량이 많아 성능이 저하되거나 대용량 데이터 Query 실행 시 데이터 입출력 속도가 느린 경우, 경로가 너무 멀어 조인으로 인한 성능 저하 예상된 경우)
      데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법
    - 반정규화는 조회(SELECT)속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.
 
⬛ 반정규화를 수행하는 경우
    -  정규화에 충실하면 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우
    -  다량의 범위를 자주(반복적으로) 처리해야 하는 경우
    -  특정 범위의 데이터만 자주 처리하는 경우
    -  요약/집계 정보가 자주 요구되는 경우 (컬럼의 합계 및 평균 등을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우)
    - 데이터를 조회할 때 디스크 입출력량이 많아서 성능을 저하하는 경우
    - 여러 개의 테이블 조인으로 인한 성능저하가 예상되는 경우
    - 데이터를 중복시켜서 데이터베이스의 성능을 향상시켜야 하는 경우
 
⬛ 반정규화 절차 : 대상 조사(범위처리빈도수, 범위, 통계성) 및 검토 - 다른 방법 검토(클러스터링, 뷰, 인덱스 튜닝 등) - 반정규화 수행(테이블, 속성, 관계 반정규화)
   - 반정규화 대상조사

    ⓐ 자주 사용되는 테이블에 접근하는 프로세스의 수가 많고 항상 일정한 범위만을 조회하는 경우
    ⓑ 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없는 경우
    ⓒ 통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계테이블을 생성한다.
    ⓓ 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우
 
 - 다른 방법유도 검토
   ⓐ 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 VIEW를 사용
   ⓑ 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정함
   ⓒ 대량의 데이터는 PK의 성격에 따라 부분적인 테이블로 분리. (파티셔닝 기법)
   ⓓ 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상시킬 수 있음

 

(* 클러스터링(Clustering) :  클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때 물리적으로 정렬해서 저장하는 방법으로, 조회 시에 인접 블록을 연속적으로 읽기 때문에 성능이 향상)
 

⬛ 반정규화 기법
[테이블 반정규화]
 
(테이블에 대한 수평/수직분할의 절차)

데이터 모델링을 완성 ▶ DB 용량산정 ▶ 대량 데이터가 처리되는 테이블에 대해 트랜잭션 처리 패턴을 분석 ▶
칼럼 단위로 집중화된 처리가 발생하는지로우 단위로 집중화된 처리가 발생하는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토
 

   테이블 수직분할
        - 하나의 테이블을 두 개 이상의 테이블로 분할. 칼럼을 분할하여 새로운 테이블을 만드는 것

  테이블 수평분할

        - 하나의 테이블에 있는 값을 기준으로 테이블을 분할하는 방법

    파티션(Partition) 기법 - PK에 의해 테이블을 분할
    - 데이터베이스에서 파티션을 사용하여 테이블을 분할    
    - 파티션을 사용하면 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어서 저장
    - Range Partition :  데이터 값의 범위를 기준으로 파티션을 수행, 날짜 및 숫자처럼 연속된 값 기준으로 파티션 만듦
                                    항목을 관리자가 직접 지정. 보관주기에 따라 쉽게 데이터 삭제 불가
    - List Partition :  특정한 값을 지정하여 파티션을 수행
    - Hash Partition : 해시함수를 적용하여 파티션을 수행

(*해시 함수는 임의의 길이를 갖는 메시지를 입력 받아 고정된 길이의 해시 값을 출력하는 함수. 해시 함수는 키를 사용하지 않으므로 같은 입력에 대해서는 항상 같은 출력이 나오게 됨.. 이러한 해시함수를 사용하는 목적은 메시지의 오류나 변조를 탐지할 수 는 무결성을 제공하기 위해 사용됨)

    - Composite Partition :   범위와 해시를 복합적으로 사용하여 파티션을 수행
    - 파티션 테이블의 장점
       • 데이터 조회 시에 액세스(Access) 범위가 줄어들기 때문에 성능이 향상된다.
       • 데이터가 분할 되어 있기 때문에 I/O(Input/Output)의 성능이 향상된다.
       • 각 파티션을 독립적으로 백업 및 복구가 가능하다.
 
   테이블 병합
        - 11 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킴
        1N 관계의 테이블을 병합하여 성능을 향상시킴. 하지만 많은 양의 데이터 중복이 발생
        슈퍼타입과 서브타입 관계가 발생하면 테이블을 통합하여 성능을 향상시킴
 
   테이블추가(중복, 통계, 이력, 부분테이블 추가)

        다른 업무이거나 서버가 다른 경우 동일한 테이블구조를 중복하여 원격조인을 제거하여 성능 향상
        SUM, AVG 등을 미리 수행하여 계산해 둠으로써 조회 시 성능을 향상
        - [이력테이블] 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블에 존재시켜 성능 향상
        - [부분테이블 추가] 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때
          디스크 I/O를 줄이기 위해 해당 칼럼들을 모아놓은 별도의 반정규화된 테이블을 생성

 
    Super typeSub type
        고객 엔터티는 개인고객과 법인고객으로 분류. 이때 고객 엔터티는 슈퍼 타입 /  개인고객과 법인고객은 서브타입  
          즉, 부모와 자식 간의 관계가 나타남
        슈퍼 타입과 서브타입의 관계는 
          (1) 배타적 관계 : 고객이 개인고객이거나 법인고객인 경우를 의미
          (2) 포괄적 관계 : 고객이 개인고객일 수도 있고 법인고객일 수도 있는 것
 
         - 트랜잭션은 항상 전체를 대상으로 일괄 처리하는데 테이블은 서브타입별로 개별 유지하는 것으로 변환하면
           Union 연산에 의해 성능이 저하 될 수 있음
         - 트랜잭션은 항상 서브타입 개별로 처리하는데 테이블은 하나로 통합하여 변환하면
           불필요하게 많은 양의 데이터가 집적되어 있어 성능이 저하 될 수 있음
        - 트랜잭션은 항상 전체를 통합하여 분석 처리하는데 슈퍼-서브타입이 하나의 테이블로 통합되어 있으면
          하나의 테이블에 집적된 데이터만 읽어 처리할 수 있어 다른 형식에 비해 더 성능이 우수
        - 트랜잭션은 항상 슈퍼+서브 타입을 함께 처리하는데 개별로 유지하면 조인에 의해 성능이 저하   

변환 방법설명
OneToOne Type
(1:1 타입)
슈퍼타입과 서브타입을 개별 테이블로 도출
테이블의 수가 많아서 조인이 많이 발생하고 관리가 어려움
Plus Type
(슈퍼 + 서브타입)
슈퍼 타입과 서브타입 테이블로 도출
조인이 발생하고 관리가 어려움
Single Type
(All in One 타입)
슈퍼 타입과 서브타입을 하나의 테이블로 도출(항상 같이 조회)
조인성능이 좋고 관리가 편리하지만, 입출력 성능이 나쁘다.

EX) 회원정보 슈퍼타입, 개인회원/법인회원 서브타입. 회원정보 조회할 경우 개인회원과 법인회원을 동시에 조회하는 특성이 있을 때 슈퍼타입과 서브타입을 변환하는 방법은? Single Type

 
[컬럼 반정규화]
  ① 중복칼럼 추가 : 조인에 의해 처리할 때 성능저하를 예방하기 위해 중복된 칼럼을 위치시킴

  ② 파생칼럼 추가 : 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능저하를 예방하기 위해
                              미리 값을 계산하여 칼럼에 보관
  ③ 이력테이블 칼럼추가 : 대량의 이력데이터를 처리할 때 불특정 날 조회나 최근 값을 조회할 때
                      나타날 수 있는 성능저하를 예방하기 위해 이력테이블에 기능성 칼럼(최근값 여부, 시작과 종료일자 등)을 추가
  ④ 응용시스템 오작동을 위한 칼럼 추가 : 업무적으로는 의미가 없지만 사용자의 실수로 원래 값으로
                                                                복구하기 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법
[관계 반정규화]
  ① 중복관계 추가 : 데이터를 처리하기 위해 여러 경로를 거쳐 조인이 가능하지만
                               이 때 발생할 수 있는 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법
 
▶▶▶ 테이블 컬럼의 반정규화는 데이터 무결성에 영향
▶▶▶ 관계의 반정규화 기법 중 중복관계 추가는 데이터 무결성을 깨뜨릴 위험을 갖지 않고서도 데이터처리의 성능을 향상 시킴
 
 
로우 체이닝 
   - 한 테이블에 많은 컬럼들이 존재할 경우 조회성능저하가 발생할 수 있어 트랜잭션이 접근하는 컬럼유형을 분석하여 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 조회 성능을 향상시킬 수 있음
  - 로우의 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
 - 자주 사용되는 칼럼들이나 현시점에서 주로 사용되는 칼럼들을 한데 모으고, 사용빈도가 낮은 칼럼들이나 미래 시점에 사용될 것으로 예상되는 나머지 칼럼들을 한데 모아 별도의 1:1 관계 엔터티로 분리하는 등의 데이터모델 설계 수정을 고려해 보는 것이 좋음
  - 로우 마이그레이션 : 데이터블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식
  - 로우 체이닝과 로우 마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 DB 메모리에서 디스크 I/O가 발생할 때 많은 I/O가 발생하여 성능저하 발생
  - 트랜잭션을 분석하여 적절하게 1:1관계로 분리함으로써 성능향상이 가능하도록 해야함
 
 
 
 
 

분산데이터베이스


⬛ 분산 데이터베이스
  - 데이터베이스 시스템 구축 시에 한 대의 물리적 시스템에 데이터베이스 관리 시스템(DMBS)을 설치하고 여러 명
    의 사용자가 데이터베이스 관리 시스템에 접속하여 데이터베이스를 사용하는 구조를 중앙 집중형 데이터베이스
  - 물리적으로 떨어진 데이터베이스에 네트워크로 연결하여 단일 데이터베이스 이미지를 보여주고 분산된 작
    업 처리를 수행하는 데이터베이스를 분산 데이터베이스 
  - 분산 데이터베이스를 사용하는 고객은 시스템이 네트워크로 분산되어 있는지의 여부를 인식하지 못하면서, 자신
    만의 데이터베이스를 사용하는 것처럼 사용할 수 있다. 이처럼 데이터베이스는 투명성을 제공해야 함
  - 투명성은 분산 데이터베이스에서 중요한 요소이며 투명성의 종류에는 분할, 위치, 지역사상, 중복, 장애 및 병행
    투명성이 있음
  - 사상이라는 것은 매핑과 유사한 개념이라고 생각하면 됨. 특정 스키마가 바뀌더라도 매핑을 다시 함으로써 다른
    계층의 스키마의 내용은 변하지 않아도 되는 것
 

⬛ 분산 데이터베이스의 투명성 종류

 투명성설명
1분할 투명성고객은 하나의 논리적 릴레이션(테이블)이 여러 단편으로 분할되어
각 단편의 사본이 여러 시스템에 저장되어 있음을 인식할 필요가 있음
2위치 투명성- 고객이 사용하려는 데이터의 저장 장소를 명시할 필요가 없음
- 고객은 데이터가 어느 위치에 있더라도 동일한 명령을 사용하여 데이터에 접근할 수 있어야 함
3지역 사상 투명성지역 DBMS와 물적 데이터베이스 사이의 사상(Mapping)이 보장됨에 따라
각 지역 시스템 이름과 무관한 이름이 사용 가능
4중복 투명성데이터베이스 객체가 여러 시스템에 중복되어 존재함에도 고객과는 무관하게
데이터의 일관성이 유지됨
5장애 투명성데이터베이스가 분산되어 있는 각 지역의 시스템이나 통신망에 이상이 발생해도
데이터의 무결성은 보장됨
6병행 투명성여러 고객의 응용 프로그램이 동시에 분산 데이터베이스에 대한 트랜잭션을 수행하는
경우에도 결과에 이상이 없음

⬛ 분산 데이터베이스 설계 방식

  ① 상향식 설계 방식 : 지역 스키마 작성 후 향후 전역 스키마를 작성하여 분산 데이터베이스를 구축
  ② 하향식 설계 방식 : 전역 스키마(기업 전체의 전사 데이터 모델을 수렴) 작성 후 해당지역 사상 스키마를 작성하여 분산 데이터베이스를 구축

- 분산 데이터베이스를 구축하거나 운영할 때 동일한 데이터베이스 관리시스템으로 분산 데이터베이스를 구축하는 것은 크게 어렵지 않다. 하지만 기업에 여러 종류의 데이터베이스 관리 시스템이 있으면 이기종 데이터베이스 관리 시스템으로 연동 해야 한다. 이기종 데이터베이스시스템으로 연동하기 위해서는 데이터베이스 미들웨어(ODBC, JDBC)를 사용해야한다.

 
 분산 데이터베이스의 장단점

장점단점
- 데이터베이스 신뢰성과 가용성이 높음
- 분산 데이터베이스가 병렬 처리를 수행하기 때문에
  빠른 응답이 속도와 통신비용 절감
- 분산 데이터베이스를 추가하여 시스템 용량 확장이 쉬움
지역 자치성, 점증적 시스템 용량 확장
신뢰성과 가용성
효용성과 융통성
시스템 규모의 적절한 조절
각 지역 사용자의 요구 수용 증대
- 데이터베이스가 여러 네트워크를 통해서분리되어 있어
  관리와 통제가 어려움
- 보안관리가 어려움
- 데이터 무결성 관리가 어려움
- 데이터베이스 설계가 복잡
소프트웨어 개발 비용 및 처리 비용의 증대
오류의 잠재성 증대
불규칙한 응답 속도
- 데이터 무결성에 대한 위협

 
분산 데이터베이스 적용 기법
  ① 테이블 위치 분산 : 설계된 테이블을 본사와 지사단위로 분산
 
  ② 테이블 분할 분산 : 각각의 테이블을 쪼개어 분산
- 수평분할 : 로우 단위로 분리
- 수직분할 : 칼럼 단위로 분리
 
 ③ 테이블 복제 분산 : 동일한 테이블을 다른 지역이나 서버에서 동시에 생성하여 관리하는 유형
- 부분복제 : 마스터 DB에서 테이블의 일부의 내용만 다른 지역이나 서버에 위치
- 광역복제 : 마스터 DB 테이블의 내용을 각 지역이나 서버에 존재
 
 ④ 테이블 요약 분산 : 지역 간에 또는 서버 간에 데이터가 비슷하지만 서로 다른 유형으로 존재하는 경우
- 분석요약 : 동일한 테이블 구조를 가지고 있으면서 분산되어 있는 동일한 내용의 데이터를 이용하여 통합된 데이터를 산출하는 방식
- 통합요약 : 분산되어 있는 다른 내용의 데이터를 이용하여 통합된 데이터를 산출하는 방식
 
 분산 데이터베이스 설계를 고려해야 하는 경우
  ① 성능이 중요한 사이트
  ② 공통코드, 기준정보, 마스터 데이터의 성능향상 위해 분산데이터베이스에 복제분산 적용
     (공통코드, 기준정보 등과 같은 마스터 데이터를 한 곳에 두고 운영하는 경우 원격지에서의 접근이 빈번할수록
     실시간 업무처리에 대해 좋은 성능을 얻기가 어려울 수 있기 때문에 분산 환경에 복제분산을 하는 방법으로
     분산데이터베이스를 구성)
  ③ 실시간 동기화가 요구되지 않는 경우, 거의 실시간(Near Real Time) 업무적인 특성을 가지는 경우
  ④ 특정 서버에 부하가 집중되어 부하를 분산
  ⑤ 백업 사이트 구성할 경우 분산기능 적용
 
(Global Single Instance(GST) : 통합된 한 개의 인스턴스 즉, 통합 데이터베이스 구조)
 
 
*  엔터티 간에 논리적 관계가 있을 경우 즉, 엔터티 간에 관계(Relationship)을 정의하여 관련 엔터티 상호간에 업무적인 연관성이 있음을 표현한 경우에는, 이 데이터들이 업무적으로 밀접하게 연결되어 상호간에 조인이 자주 발생한다는 것을 의미하는 것이기 때문에, 데이터베이스 상에서 DBMS가 제공 하는 FK Constraints를 생성했는지 여부와 상관없이 조인 성능을 향상시키기 위한 인덱스를 생성해주 는 것이 좋다. 
* 데이터베이스에 생성하는 FK Constraints는 데이터 모델 상에 표현된 논리적 관계에 따라 관련 인스턴스 간에 일관성을 보장하기 위해 설계된 제약조건을 구현할 수 있도록 DBMS가 제공해주는 하나의 '지원 기능'으로 이해될 수 있음
* 데이터모델에서는 관계를 연결하고 데이터베이스에 FK Constraints 생성을 생략하는 경우에도 데이터의 조인관계가 필요하므로 FK에 대한 인덱스를 생성할 필요가 있음