2011-05-13 4 views
1

가정 :오라클 pseduo - 사실 '보기

  1. 나는 사실과 외래 키 ('차원 '과'키 - 값 '형)로 구성된 테이블의 번호를 가지고있다. 예를 들면, 실전 :

ID - 기본 키

치수

  • LOCATION_ID
  • PATIENT_ID

키 값

  • TYPE_ID
  • STATUS_ID
  • PATIENT_CLASS_ID
  • DISPOSITION_ID
  • ...

사실

  • ADMISSION_DATE
  • DISCHARGE_DATE 나는 데이터웨어 하우스를 만들 수있는 옵션이 없습니다

    1. ... 내가

를보고 데이터 구조를 단순화하고 싶은

  • 내 접근 방식은 의사 차원 뷰 (DEPARTMENT 및 LOCATION 테이블을 기반으로 한 'D_LOCATION')와 가상 테이블 뷰 (ENCOUNTER 테이블을 기반으로 한 'F_ENCOUNTER')를 만드는 것입니다. 가상 사실보기에서 키 테이블 (예 : STATUS, PATIENT_CLASS)을 사실 테이블에 가입시켜 이름 필드 (예 : STATUS.NAME, PATIENT_CLASS.NAME)를 포함합니다.

    질문 :

    • 쿼리 F_ENCOUNTER (즉,하지 key-value.name 모든 필드)에서 모든 필드의 하위 집합을 선택하는 경우, 일부를 제외 똑똑 오라클 10g 최적화입니다 키 - 값 테이블 조인 (즉, 쿼리에 포함되지 않은 테이블)?
    • 이 아키텍처를 최적화하기 위해 할 수있는 일이 있습니까 (인덱스 제외)
    • 다른 접근 방법이 있습니까?(중요한 순서대로)

    ** 편집 ** 목표 :

    • 쿼리 복잡성을 줄일; 쿼리 일관성을 높이십시오. 감소 보고서 개발 시간
    • 최적화 쿼리 처리
    • 최소화 관리자의 부담

    답변

    1

    한 최적화 제안은 키 - 값 쌍 테이블을 사용하지 않는 것입니다

  • 감소 저장. 차원 표의 개념은 각 레코드가 정규화 된 표에 가입 할 필요없이 해당 개념에 대한 모든 정보를 포함해야한다는 것입니다. 즉 스타 스키마를 스노우 플레이크 스키마로 변환하는 것입니다.

    값은 차원 테이블 레코드에서 반복 될 수 있지만보고 쿼리에서 조인 수가 적다는 장점이 있습니다. 이러한 방식으로 테이블을 비정규 화하는 것은 직관적이지는 않지만 성능이 가장 중요한 곳에서는 대개 최적의 솔루션입니다.

  • +0

    동료는 이것을 '쓰레기'차원이라고합니다. 카디널리티가 낮은 필드의 경우 예약되었습니다. 그것은 확실히 의미가 있습니다. 불행하게도이 클라이언트는 데이터웨어 하우스에 대한 욕구가 없습니다. 이 방법으로 데이터를 비정규 화 한 다음 매일 (매일) 구체화하는 뷰를 만들 수 있다고 가정합니다. 그것을 F_ENCOUNTER_JUNK라고 부르세요. – craig

    +0

    아니요, 정크 치수는 자체 테이블이 필요없는 여러 가지 아이디어를 결합하는 데 사용됩니다 (자체적으로 키 - 값 테이블이 될 수 있음). 일반적으로 STANDARD_VALUES와 같이 일반적으로 이름이 지정됩니다. 환자 및 위치와 같은 측정 기준은 합법적 인 측정 기준입니다. – Datajam

    0
    • 조인은 반환되는 행 수에 영향을 줄 수 있기 때문에 뷰에서 수행 된 조인은 제외한다고 생각하지 않습니다. (내부 조인이 모든 행과 일치하지 않는 경우 전체 결과가 비어있게됩니다.)
    • 최적화의 목표는 무엇입니까? 쿼리 속도? 쿼리 단순성? 스토리지 효율성? 더 나은 쿼리 성능을 위해 스토리지 효율성을 희생 할 수 있다면 키 - 값 참조를 PATIENT_CLASS_ID 대신 TYPE_ID, PATIENT_CLASS_NAME 대신 TYPE_NAME 대신 바꿉니다.
    • [편집 :] 원래 아키텍처를 수정할 수없는 경우 구체화 된보기를 사용해보십시오. 기본적으로 조인을 사전 계산하고 결과 집합을 저장하므로 추가 저장 공간과 새로운 데이터가 아닌 비용으로 신속한 쿼리 시간을 제공합니다. 적절한 새로 고침 정책을 지정하여 후자를 제어 할 수 있습니다. 자세한 내용은 http://en.wikipedia.org/wiki/Materialized_viewhttp://download.oracle.com/docs/cd/B10500_01/server.920/a96520/mv.htm을 참조하십시오.
    +0

    두 번째 사항을 이해할 수 없습니다. 보기에서 키 - 값 참조를 값 자체로 대체하는 방법은 무엇입니까? 아니면 테이블을 제안하고 있습니까? – craig

    +0

    뜻은 ENCOUNTER에 TYPE_NAME, PATIENT_CLASS_NAME 등과 같은 열이 포함될 수 있도록 ENCOUNTER 테이블의 키 - 값 ID를 실제 값으로 대체하는 것입니다. 테이블의 저장 요구량은 증가하지만 키 - 값 테이블에 조인합니다. – Alanyst

    +0

    문제의 테이블이 공급 업체의 표준 테이블 중 하나이기 때문에 DBA가이를 기꺼이 수행하지는 않을 것입니다. 사용자 지정 리포지토리를 만들 수 있지만 ETL 부담을 늘리지 않으려 고합니다. – craig