[1] List Partitioning > 2
[2] 3 > 4
[3]
[4] 1 > 3
1. 매각기일은 일자별 매각이 시행되는 장소, 시간이므로 일자별매각물건 엔터티의 매각시간, 매각장소는 매각일자에만 종속됨 -> 2차 정규화의 대상
2. 매각기일 엔터티는 일자별매각물건의 PK 중 일부로부터 독립했기 때문에 매각기일과 일자별매각물건은 1:M 관계
[5] 4 > 3
[6] 2 > 4
[7] 3 > 1
컬럼 단위에서 중복된 경우도 1차 정규화의 대상이다. 이에 대한 분리는 1:M의 관계로 두 개의 엔터티에서 분리된다.
[8] 3 > 1
1. 다량 데이터 탐색의 경우 인덱스가 아닌 파티션 및 데이터 클러스터링의 다양한 물리 저장 기법을 통해 성능을 개선할 수 있다. 하지만 결과셋을 추출하기 위해 다량의 데이터를 탐색하는 처리가 반복적으로 빈번하게 발생한다면 반정규화를 고려하는 것이 좋다.
2. 이전또는 이후 위치의 레코드에 대한 탐색은 window function으로 접근 가능하다.
3. 집계 테이블 이외에도 다양한 유형(다수 테이블의 키 연결 테이블 등)에 대해 반정규화 테이블 적용이 필요할 수 있다.
[9] 2 > 4
중복칼럼 추가: 조인에 의한 성능 저하를 예방할 때 중복된 칼럼을 추가한다
중복테이블 추가: 다른 업무거나 서버가 다를 때 동일한 테이블구조를 중복하여 원격조인을 제거하고 성능을 향상한다
부분테이블 추가: 한 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 I/O량을 줄이기 위해 해당 칼럼들을 모아놓은 별도의 반정규화된 테이블을 추가한다
[10] 클러스터링 인덱스 > 파티셔닝
클러스터링: 인덱스 정보를 저장할 때 물리적으로 정렬해 저장하는 방법으로 조회 시 인접 블록을 연속적으로 읽기 때문에 성능이 향상된다
[11] 2 > 3
한 테이블에 칼럼이 많을 때 데이터가 물리적으로 저장되는 디스크 상에 넓게 분표할 가능성이 커서 디스크 I/O가 대량 발생할 수 있고 성능이 저하될 수 있다. 따라서 트랜잭션이 접근하는 칼럼 유형을 분석해서 자주 접근하는 칼럼, 접근 빈도가 낮은 칼럼을 구분해 1:1로 테이블을 분리하면 성능을 향상시킬 수 있다.
테이블 내 칼럼의 위치를 조정하는 것은 로우의 길이를 어느 정도 감소시킬 수 있으나 NULL 상태였던 칼럼에 나중에 데이터가 채워질 경우 더 많은 로우 체이닝이 발생할 수 있다. 또 데이터가 채워지지 않은 NULL 상태인 칼럼이 많다는 것은 너무 많은 엔터티를 무리하게 통합했거나 과도하게 속성을 확장한 경우에 주로 나타나기 때문에 사용 빈도에 따라 테이블을 별도의 1:1 관계 엔터티로 분리하는 등 데이터모델 설계 수정을 고려하는 것이 좋다.
[12] 2 > 3
1번 선지: 해당 제품이 여러 주문에 포함될 수 있기 때문에 특정 주문번호만의 단가 합계금액을 가질 수 없다.
2번 선지: 한 주문에 포함된 제품번호마다 동일한 합계 금액을 반복적으로 저장해야 해서 일관성 문제가 발생한다.
4번 선지: 반정규화와 무관하다.
[13] 1, 3 > 2, 4
엔터티 사이 관계를 정의하여 연관성이 있음을 표시한 경우에는 이 데이터들이 업무적으로 밀접하게 연관되어 조인이 자주 발생한다는 뜻이기 때문에 DBMS가 FK Constraints를 생성했는지 여부(논리적 관계에 따라 일관성을 보장하기 위한 단순 지원 기능으로 이해하면 됨)와 상관 없이 조인 성능 향상을 위해 인덱스를 생성하는 것이 좋다.
[14] 2 > 4
GSI는 통합 데이터베이스 구조다. 공통 코드, 기준 정보 등과 같은 마스터 데이터를 한 곳에 두고 운영하는 경우 원격지에서 접근이 빈번할 수록 실시간 업무처리에 대해 좋은 성능을 얻기 어렵다. 따라서 분산 환경에 복제분산을 하는 방법으로 분산 DB를 구성할 수 있고 백업 사이트 구성에 대해서도 적용할 수 있다.