0

현재 데이터 마트 디자인 작업 중입니다. 많은 테이블을 가지고 있습니다 외래 키. 외래 키 차원 필드에 NULL을 허용할지 또는 -1 값을 NULL 값으로 표시할지 생각 중입니다.데이터 마트의 외래 키 열에 NULL이있는 경우 성능에 영향이 있습니까

Kimball은 NULL 값의 기본 행을 유지할 것을 제안합니다. http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques/fact-table-null/

내지도는 NULLNULL으로 유지하도록 제안합니다.

NULL을 외래 키 필드로 유지하는 데 성능 영향이 있습니까?

답변

2

Kimball이 맞습니다 (보통 그가 그렇듯이). NULL을 사용할 기본값을 사용하십시오.

왜? 차원에 대한 조인이 "실수로"행을 필터링하지는 않습니다. 서로 다른 쿼리의 결과를 조정하려고하면 많은 시간이 걸립니다. 조인이 성공하는지 확인하는 것은 이러한 불일치를 줄이는 한 가지 방법입니다.

조언을 따르지 않으려면 NULL을 사용하여 저장하십시오. -1과 같은 값은 데이터베이스가 외래 키 제약 조건을 적용 할 수 없기 때문에 특히 좋지 않습니다.

+0

의견에 동의합니다. 우리는 NULL의 경우 -1을 사용할 것입니다. –

1

고든이 다루지 않은 NULL을 사용하지 않는 또 다른 이유는 NULL이 무엇을 의미하는지 명확하지 않습니다.

때때로 ETL 또는 소스 시스템에서 문제가 발생하여 NULL로 연결되기 때문에 데이터 마트 또는 데이터웨어 하우스에 NULL이 있습니다. 그 열은 특정 행에 적용되지 않기 때문에 다른 시간은 NULL이됩니다. 또는 누적 된 스냅 샷 테이블과 같은 경우에는보고중인 프로세스가 아직 해당 열이 채워지는 지점에 도달하지 않았으므로 해당 열이 아직 채워지지 않았으므로.

하나의 기본값이 아닌 여러개를 설정하고 싶습니다. 예를 들어 누락 된 값에 사용할 수있는 "알 수 없음"을 나타내는 행과 값이 적용되지 않는 경우에 "해당 없음"을 나타내는 행을 갖도록 모든 차원을 설정할 수 있습니다. 나는 모든 테이블에서이 행에 대해 동일한 키를 사용할 수 있으므로 키에 대해 음수 (-1은 알 수 없음, -2는 N/A 등)로 설정하는 경향이 있습니다. 그러나 Kimball과 Gordon이 말했듯이 실제로는 차원에서 행을 만들어야합니다.

이렇게하면 데이터 품질 검사를 실행하여 문제가 발생한 경우를 쉽게 찾을 수 있습니다. 모든보고 또는 분석 도구에 의미있는 값을 표시 할 수 있으므로 원할 경우 완전히 채워지지 않은 행을 필터링하여 데이터 관리자가 해당 도구를 통해 문제가있는 데이터를 찾을 수 있습니다. 또는 사람들이 차원 중 하나가 적용되지 않는 행을 구체적으로 찾고 싶을 수도 있습니다.

데이터가 "잘못된"순서로로드되는 경우 (즉, 팩트 테이블이 채워지지만 관련 차원 멤버가 아직 차원을 추가하지 않은 경우)이 옵션을 사용하여 행을 확인합니다 ETL에서 업데이트가 필요하고 문제가 해결되는 것을 자동화하며, 업데이트가 필요하지 않은 행을 반복적으로 업데이트하지 않고도 항상 NULL을 갖기 때문에 그들은 그 널 (NULL) 또는 -1s이 문제가 있음을 나타냅니다 여부 unpicking 많은 시간을 낭비 할 필요가 없을 때

그리고 다른 사람이 데이터 마트의 지원을 통해 소요되는 선을

, 그들은 정말 감사 할 것입니다.