이 내가 요약하는 방법을 모르는 긴 질문입니다 ...효율적인 방법
나는 그가에서 읽을 필요가 테이블이 재무 데이터에는 약 10 억 개의 세부 데이터가 기록되어 있습니다. 나는이 표의 구조를 바꿀 수 없다. 나는 단지 그것의 소비자 일 뿐이다. 이 테이블에는 트랜잭션 데이터, 트랜잭션을 설명하는 Int 데이터가 포함 된 속성 열이 있습니다 (Attribute1-20은 이름이 지정되지 않았으며 간단히하기 위해 이름이 지정되지 않았습니다). 그리고 Amount 열이 있습니다.
TABLE: FinancialData
COLUMNS:
Id (BigInt IDENTITY)
TransactionId (Int FK)
TransactionDate (DateTime)
Attribute1 (Int)
Attribute2 (Int)
.
.
Attribute20 (Int)
Amount (Decimal)
나는 사용자 정의 타임 라인이 개 데이터베이스 테이블 (한 헤더 테이블과 집계 양의 또 다른 상세 테이블)에이 FinancialData 테이블을 요약 할 필요가있는 프로세스가되도록의 스냅 샷 데이터는 다른 프로세스에서 사용할 수 있습니다. 헤더 테이블에는 사용자 정의 타임 라인 (스냅 샷) 당 하나의 레코드가 포함되며 세부 테이블에는 FinancialData 테이블의 모든 특성에 대한 집계 된 금액 레코드가 포함됩니다.
TABLE: FinancialHeader
COLUMNS:
Id (Int IDENTITY)
BeginTransactionDate (DateTime)
EndTransactionData (DateTime)
TABLE: FinancialDetail
COLUMNS:
Id (Int IDENTITY)
FinancialHeaderId (Int FK)
Attribute1 (Int)
Attribute2 (Int)
.
.
Attribute20 (Int)
Amount (Decimal)
, 프로세스의 예를 제공하지만 서로 다른 것 많은 중복 특성 (와 2010년 1월 1일와 2010년 6월 30일 사이 TransactionDate와 FinancialData 테이블에 2 개 천만 레코드가 말하는 것은 TransactionId 값). 위의 FinancialHeader 및 FinancialDetail 테이블에이 데이터를 요약하려면 2010 년 1 월 1 일의 BeginTransactionDate 및 2010 년 6 월 30 일의 EndTransactionDate를 사용하여 하나의 FinancialHeader 레코드를 만든 다음 여러 개의 FinancialDetail 레코드를 만듭니다. 머리글. FinancialDetail 테이블은 FinancialData에서 2,000 만 레코드를 집계합니다. 기본적으로 Attribute1 - Attribute20의 고유 값을 SUM (Amount)과 함께 그룹화하여 해당 속성의 총량을 추적합니다. 일반적으로 FinancialData 테이블에 2,000 만 개의 레코드가 약 10,000 개의 고유 한 속성 조합을 포함하고 있으며, 그러면 총 금액이있는 FinancialDetail 테이블에 10,000 개의 레코드가 생성됩니다. 따라서 필자의 예에서는 1 개의 FinancialHeader 레코드와 약 10,000 개의 FinancialDetail 레코드가 생성됩니다.
특성 데이터의 고유 한 조합 20 열을 저장하는 것과 관련된 질문 ...이 "스냅 샷"프로세스에 대해 여러 가지 날짜 범위에 대해 사용자가 반복해서 실행할 수 있습니다. 기본적으로 해당 기간 동안 금액을 저장합니다. 따라서 FinancialDetail 테이블은 집계 데이터 임에도 불구하고 많은 양의 데이터를 보유하는 경향이 있습니다. 내가 좋아하지 않는 것은 필자가 만든 FinancialDetail 테이블에 공간을 낭비하는 것으로 생각되는 20 개의 열이 있다는 사실입니다. 필자가 생각한 더 좋은 방법은 FinancialDetail 테이블의 검색 메커니즘으로 사용할 수있는 Id 열을 포함하는 FinancialAttribute라고하는 또 다른 테이블의 행에 특성의 각 고유 한 조합을 저장하는 것입니다.
TABLE: FinancialAttribute
COLUMNS:
Id (Int IDENTITY)
Attribute1 (Int)
Attribute2 (Int)
.
.
Attribute2 (Int)
을 그리고 FinancialDetail 테이블이로 변경 될 것입니다 : 그래서 FinancialAttribute 테이블과 같을 것이다
TABLE: FinancialDetail
COLUMNS:
Id (Int IDENTITY)
FinancialHeaderId (Int FK)
FinancialAttributeId (Int FK)
Amount (Decimal)
이 여러 열/속성에서 집계를 처리 할 수있는 매우 일반적인 패턴인가? 아니면 완전히 잘못된 생각으로 생각하고 있습니까? 금융 정보 테이블의 데이터를 내 로컬 사본에 저장해야합니다. 재무 정보의 이러한 사용자 정의 타임 라인 스냅 샷을 처리하거나보고해야하는 여러 다운 스트림 프로세스가 있기 때문입니다.
매우 체계적이고 상세한 응답을 보내 주셔서 감사합니다 .-) –
쿨, 고마워요. 실제 가치가 있다고 판단되면 실제 영향이 무엇인지 파악하는 것이 재미있을 것입니다. – Matt