카디널리티 및 참조 무결성

데이터를 결합하는 방법에 관계없이, 데이터 원본을 설정하려면 각 테이블의 데이터 구조와 테이블을 결합할 수 있는 방법을 이해해야 합니다. 고려해야 할 몇 가지 핵심적인 요소가 있습니다. 

  • 세부 수준: 데이터가 얼마나 세부적인지를 나타냅니다. 이것은 "행을 정의하는 것은 무엇입니까?"라는 질문에 대답하는 것으로 생각할 수 있습니다. 세부 수준에 대한 자세한 내용은 분석을 위한 구조 데이터를 참조하십시오.
  • 공유 필드: 테이블 간에 링크를 형성하는 데 사용할 수 있는 필드가 하나 이상 있어야 합니다. 조인의 경우 이러한 필드는 조인 절을 정의합니다. 관련 테이블에서는 관계를 설정합니다.
  • 카디널리티: 공유 필드에 대한 고유 값의 수를 나타냅니다(고유성). 자세한 내용은 다음 섹션을 참조하십시오.
  • 참조 무결성: 한 테이블의 값이 다른 테이블에 일치 항목이 있다는 것이 보장됩니다. 즉, 한 테이블에 다른 테이블에 대응하는 레코드가 없는 레코드가 있을 수 없습니다. 자세한 내용은 아래 항목을 참조하십시오.

카디널리티

단일 열 또는 필드의 카디널리티는 고유 값이 존재하는 방식을 나타냅니다. 낮은 카디널리티는 적은 수의 고유 값만 있다는 의미입니다(예: 눈동자 색에 대한 필드). 높은 카디널리티는 많은 수의 고유 값이 있다는 의미입니다(예: 전화 번호에 대한 필드).

테이블 간의 카디널리티도 이와 유사하지만, 이 경우 한 테이블의 행이 다른 테이블에서 두 개 이상의 행과 연결될 수 있는지 여부를 나타냅니다. (카디널리티는 테이블 중 하나에 누락된 데이터가 있는지 여부를 다루지 않는다는 점을 기억하는 것이 중요합니다. 누락된 데이터의 존재 또는 비존재를 나타내는 것은 참조 무결성입니다. 이러한 개념은 함께 작동하지만 관계의 서로 다른 두 가지 특성입니다.)

옵션은 일대일, 일대다, 다대일 또는 다대다입니다.

일대일

  • 정의: 한 테이블에 있는 공유 필드의 값 하나가 다른 테이블에 있는 공유 필드의 값 하나와만 관련됩니다. 
  • 약어: 1:1

: 각 차량에는 고유한 번호판이 있으며 한 번호판은 개별 차량으로 한정됩니다. 차량과 번호판은 일대일입니다.

차량이 등록되지 않았거나 차량에 번호판 번호가 아직 할당되지 않은 경우에도 이러한 불일치는 참조 무결성에 의해 설명됩니다. 차량은 번호판 하나만 가질 수 있고 번호판은 한 차량에만 할당될 수 있으므로 카디널리티는 일대일로 유지됩니다.

 

일대다 또는 다대일

  • 정의: 한 테이블에 있는 공유 필드의 값 하나가 다른 테이블의 여러 행(테이블에서 값이 반복됨)과 관련될 수 있습니다.
  • 약어: m:1 또는 1:m
  • 테이블의 순서에 따라 다대일 또는 일대다가 결정됩니다(왼쪽 조인 및 오른쪽 조인과 유사).

: 직원 여러 명이 동일한 매니저를 가집니다. 직원과 매니저는 다대일입니다. 매니저와 직원은 일대다입니다.

 

다대다

  • 한 테이블에 있는 공유 필드의 여러 값이 다른 테이블에 있는 여러 행과 관련될 수 있습니다(공유 필드의 값이 두 테이블의 여러 행에서 반복될 수 있음).
  • 약어는 m:m입니다.
  • 데이터 원본에서 다른 설정이 감지되지 않는 경우 이것이 기본 설정입니다.

: 한 배우가 여러 영화에 출연하고 한 영화에는 많은 배우가 있습니다. 배우와 영화는 다대다입니다. 한 거래에서 여러 서적을 구매할 수 있으며 한 서적을 여러 번 구매할 수 있습니다. ISBN과 OrderID(주문 ID)는 다대다입니다.

 

성능 옵션 설정에서 카디널리티를 지정할 수 있습니다. 자세한 내용은 성능 옵션을 사용하여 관계 쿼리 최적화를 참조하십시오.

참조 무결성

참조 무결성이라는 관련 개념이 있습니다. 이것은 한 테이블에 있는 행이 공유 필드의 값에 따라 결정된 대로 항상 다른 테이블에 일치하는 행이 있다는 의미입니다. 데이터베이스에 번호판이 없는 차량이나 차량이 없는 번호판에 대한 레코드가 없는 경우 해당 관계는 참조 무결성을 갖습니다.

Tableau에서 참조 무결성은 관계의 양쪽에서 구성됩니다. 성능 옵션 설정에서 일부 레코드 일치는 참조 무결성이 없음(또는 존재하는지 알 수 없음)을 의미합니다. 모든 레코드 일치는 참조 무결성이 있음을 의미합니다. 기본 설정은 참조 무결성을 가정하지 않는 것입니다(일부 레코드 일치).

자세한 내용은 성능 옵션을 사용하여 관계 쿼리 최적화를 참조하십시오.

테스트

각 다이어그램의 카디널리티 및 참조 무결성을 정의할 수 있습니까? 이것의 의미를 말로 설명하십시오. 

예:

 

왼쪽 테이블을 서적으로 설정하고 오른쪽 테이블을 AuthorID에 연결된 저자로 설정한 경우 다이어그램을 말로 표현하십시오. 

  • 한 서적에 여러 명의 저자가 있을 수 있음 - 보라색 레코드는 왼쪽의 서적 테이블에 있는 한 행이 오른쪽에 있는 저자 테이블의 여러 레코드에 대응함을 보여줍니다.
  • 두 권 이상의 서적을 가진 저자가 없음 - 오른쪽에 있는 각 저자 레코드는 왼쪽에 있는 서적 레코드 하나에만 연결됩니다.
  • 저자가 없는 서적이 없음 - 왼쪽에 있는 레코드 중에 오른쪽에 해당하는 레코드가 없는 레코드가 없습니다.
  • 일부 저자는 책이 없을 수 있음 - 오른쪽에 있는 회색 저자 레코드는 왼쪽에 해당하는 서적 레코드가 없습니다.

아래에서 각 섹션을 클릭하여 펼치십시오.

지식 점검

해결 방법

중요한 이유는 무엇입니까?

카디널리티 또는 참조 무결성 설정을 올바르게 구성하면 쿼리 최적화를 통해 성능을 향상시킬 수 있습니다. 그러나 잘못된 구성은 데이터 손실 또는 중복으로 인해 집계 문제를 일으킬 수 있습니다. 기본 성능 옵션 설정은 카디널리티의 경우 , 참조 무결성의 경우 일부 레코드 일치입니다. 데이터의 올바른 특성을 확신하는 경우에만 이러한 설정을 조정해야 합니다.

Tableau가 각 설정을 처리하는 방법에 대한 자세한 내용은 카디널리티 및 참조 무결성 설정의 의미를 참조하십시오.

Tableau의 예

카디널리티가 부적절하게 구성되면 어떤 일이 발생하는지 살펴보겠습니다.

참고: 다음 예제에서는 Bookshop 데이터 집합의 테이블 하위 집합을 사용합니다. 과정을 따라하려면 통합 문서를 다운로드하거나 원시 데이터를 다운로드하여 데이터 원본을 직접 만들 수 있습니다. 사용되는 테이블은 Bookshop.xlsxBooks(서적), Info(정보)Edition(판형)(일부 필드만 유지)과 BookshopLibraries.xlsxLibraryProfile(도서관 프로필)Catalog(카탈로그)입니다.

Book(서적) 및 Info(정보) 테이블은 일대일 관계를 갖습니다. Info(정보) 테이블은 본질적으로 Book(서적) 테이블에 대한 추가 열입니다. 따라서 두 테이블이 연관될 수 있지만 두 테이블을 조인하여 모든 열이 있는 새 논리적 테이블을 만드는 것이 좋습니다. 일반적으로 단일 서적에 대해 서로 다른 형식의 여러 판형이 있을 수 있으므로 Edition(판형)은 이 결합된 테이블과 다대일 관계를 갖습니다. (아래 다이어그램은 Book(서적)+Info(정보) 테이블에서 Edition(판형)으로의 관계를 보여주므로 일대다입니다.)

Edition(판형)은 ISBN에 대해 일대다 관계로 Catalog(카탈로그)와 연관됩니다. Catalog(카탈로그) 및 LibraryProfile(도서관 프로필) 테이블은 Library ID(도서관 ID)에 대해 다대다로 연관됩니다. 중요한 사항은 LibraryProfiles(도서관 프로필) 테이블에는 도서관별로 Librarian(사서), Library Assistant(사서 도우미), Library Technician(도서관 기술자) 등과 같은 직원 유형에 해당하는 여러 행이 있다는 것입니다. 이러한 테이블의 구조에 대한 자세한 내용은 Bookshop 데이터 집합을 참조하십시오.

올바른 설정

Catalog(카탈로그)-LibraryProfile(도서관 프로필) 관계가 올바르게 설정되면 여러 서적에 대한 각 도서관의 직원 수를 보여주는 간단한 비주얼리제이션을 만들 수 있습니다. 이것은 어리석은 비주얼리제이션이지만 요점을 설명하는 데 유용합니다. Idle Hour Library에는 서적에 관계없이 130명의 직원이 있습니다. 직원 유형에는 세 가지 값이 있으므로 각 총계는 세 개의 레코드(괄호 안의 숫자)로 구성됩니다.

도서관 및 제목별 직원 수. (괄호 안의 숫자는 각 마크의 레코드 수를 나타냅니다.)

잘못된 설정: 일대일

관계가 일대일로 잘못 설정되면 비주얼리제이션에서 Catalog(카탈로그)의 각 제목은 LibraryProfile(도서관 프로필) 테이블의 한 레코드와만 유효한 쌍을 이룹니다(괄호 안의 레코드 수로 표시됨).

도서관 및 제목별 직원 수. (괄호 안의 숫자는 각 마크의 레코드 수를 나타냅니다.)

위에서 각 도서관이 최소의 직원 수만 표시하는 것을 알 수 있습니다. (아래 비주얼리제이션에서 굵게 표시된 숫자를 참조하십시오. 가장 낮은 직원 수는 Staff Count(직원 수) 비주얼리제이션에 반영된 숫자입니다.)

유형 및 도서관별 직원 분류.

관계가 비주얼리제이션을 위한 상황에 따른 조인이 되는 방법에 대한 자세한 내용은 Tableau 블로그에서 Tableau의 새 데이터 모델링 소개(영문)(링크가 새 창에서 열림)를 참조하십시오.

잘못된 설정: 조인

이러한 종류의 문제를 해결하는 방법이 있지만(일반적으로 세부 수준 식을 사용함), 카디널리티가 서로 다르거나 '다(many)'인 테이블을 조인하면 중복이 발생할 수 있습니다. 여기에서 직원 수는 형식이 하나뿐인 제목의 경우 정확하지만 Editions(판형) 테이블에 두 가지 형식이 있는 서적의 경우 직원 수가 두 배로 전달됩니다(괄호 안의 레코드 수가 올바른 3이 아닌 6임).

도서관 및 제목별 직원 수. (괄호 안의 숫자는 각 마크의 레코드 수를 나타냅니다.)

잘못된 설정: 참조 무결성을 잘못 가정함

참조 무결성(모든 레코드 일치)이 없는데 Tableau에 참조 무결성이 있다고 알리면 값이 삭제될 수 있습니다. 여기에서 이 두 비주얼리제이션은 비슷하지만 오른쪽의 비주얼리제이션은 참조 무결성을 가정하도록 구성된 데이터 원본에서 가져온 것입니다. 해당 비주얼리제이션은 Null이 손실됩니다. 이러한 상황이 문제가 없는 경우도 있지만 Null이 무엇을 나타내는지 이해하는 것이 중요합니다. 여기에서 비주얼리제이션이 각 도서관의 판형 수를 표시하는 경우 Null은 Edition(판형) 테이블에 있지만 도서관에서 보유하고 있지 않은 두 판형을 나타냅니다. 이것이 심각한 실수가 될 수 있으며 참조 무결성을 잘못 가정하면 간과될 수 있는 것 중 하나입니다.

통합 문서와 해당 데이터 원본을 탐색하여 잘못 결합된 테이블에서 발생할 수 있는 다른 문제를 확인합니다.

성능 영향

이러한 설정을 잘못 구성하면 데이터가 누락되거나 중복될 수 있는데 Tableau에서 데이터를 변경할 수 있도록 허용하는 이유는 무엇인가요? 대부분의 경우 기본 설정을 그대로 둘 수 있으며 그대로 두어야 합니다. 조인 대신 테이블을 연결하고 카디널리티를 다대다로 유지하고 참조 무결성을 가정하지 않습니다. 특히 설정이 무엇인지 잘 모르는 경우가 문제입니다.

그러나 카디널리티 및 참조 무결성은 기본값에 대한 성능 영향이 있을 수 있으므로 성능 옵션으로 제공됩니다. 데이터 구조에 대해 확신하는 경우 올바른 설정을 구성하면 쿼리 실행을 줄여 속도를 높일 수 있습니다.

작동 원리

참고: 이 섹션에서는 다른 데이터 조합 기술을 비유하여 사용하는 방식으로 개념적 프레임워크만 제공합니다. 따라서 Tableau에서 관계에 대한 성능 설정을 사용하는 방법에 대한 기술적인 설명이 아닙니다.

카디널리티

관계의 카디널리티는 집계가 발생할 때 영향을 줍니다. 이것을 혼합의 관점에서 생각할 수 있습니다. 데이터 혼합은 두 데이터 원본을 독립적으로 쿼리합니다. 각 데이터 원본은 다른 데이터 원본에 관계없이 뷰에 대해 원하는 세부 수준으로 필요에 따라 집계됩니다. 관계의 경우 카디널리티 설정은 집계가 조인 전 또는 후에 발생하는지 여부에 영향을 줍니다.

위의 예에서 다(Many) 설정은 해당 데이터를 서적 정보와 결합하기 전에 각 도서관의 직원 수가 집계되어 모든 서적이 올바른 숫자를 갖도록 한다는 의미입니다. 카디널리티가 일(One)로 잘못 설정되면 직원 수가 서적 데이터와 결합되기 전에 집계되지 않기 때문에 잘못된 값이 발생합니다.

잘못된 값이 표시될 뿐만 아니라, 세 가지 직원 유형 모두에서 가져왔다는 사실에도 불구하고 모든 값이 직원 유형 Librarians(사서)에 할당됩니다. 이 설정을 잘못 구성하면 예측할 수 없는 잘못된 값이 발생할 수 있습니다. 이 결과 필터링은 잘못 설정된 관계의 상대편에 있는 또 다른 테이블의 필드가 뷰에서 사용되는 경우에만 발생합니다.

그러나 값이 고유한 경우 Tableau는 쿼리가 최적화된다면 사전 조인 집계를 자유롭게 제거할 수 있습니다.

참조 무결성

참조 무결성은 관계에 대한 설정을 나타내지만 조인 유형의 측면에서도 생각할 수 있습니다. 완전 외부 조인은 다른 테이블에 일치 항목이 있는지 여부와 관계없이 모든 레코드를 유지하지만 성능이 저하됩니다. 레코드가 손실될지 확실하지 않은 경우 외부 조인이 더 안전합니다. 이것은 참조 무결성이 없을 때(일부 레코드 일치) 테이블이 처리되는 방식입니다.

내부 조인은 두 테이블 모두에 일치 항목이 있는 레코드만 유지하고 각 테이블에 나타나지 않는 레코드는 삭제합니다. 내부 조인이 필요한 데이터를 제거하지 않는다는 것을 알고 있다면 더 효율적입니다. 성능 옵션이 모든 레코드 일치로 설정된 경우 참조 무결성이 가정되고 일치하지 않는 값을 고려하지 않고 조인이 수행됩니다.

잘못된 참조 무결성 설정은 결합된 데이터에 필터와 같은 영향을 주어 일치하지 않는 값을 제거할 수 있습니다. 일치하지 않는 레코드를 유지하는 기능에 대한 자세한 내용은 Tableau 블로그에서 여러 관련 테이블에서 질문하기(영문)를 참조하십시오. 조인 유형에 대한 자세한 내용은 데이터 조인을 참조하십시오.

기본값 유지

분석 성능이 수용 가능하면 기본 성능 옵션 설정인 다대다를 그대로 두고 참조 무결성을 가정하지 않는 것이 좋습니다. 관계의 힘은 분석에 사용되는 테이블을 기반으로 정확하고 상황에 맞는 적절한 결과를 제공하는 능력에서 비롯됩니다. 이러한 설정을 변경하면 관계의 의미적 유연성(영문)이 사라집니다.

피드백을 제공해 주셔서 감사합니다!귀하의 피드백이 제출되었습니다. 감사합니다!