---
schema_version: "1"
id: 95314fc216a5755e4b0acaff17d15cae9ea2527523532cdba2eebd0f7e21bb21
title: 基數和參考完整性
collection: tableau
version: current
locale: zh-tw
portal_url: https://docs.salesforce.com/tableau/current/zh-tw/public/desktop/cardinality_and_ri.md
canonical_url: https://help.tableau.com/current/public/desktop/zh-tw/cardinality_and_ri.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 7c16715c50c905805b1733264088bacca23d86470d6ca3103641703a767f593b
description: Understand cardinality and referential integrity and how they affect Tableau data source performance.
---
[跳至主要內容](#main-content)

# 基數和參考完整性

無論如何合併資料，設定資料來源都需要瞭解每個資料表的資料結構以及可以如何合併這些資料表。應考慮的幾個關鍵因素如下： 

- **詳細資料層級**：資料的詳細程度 - 其資料粒度。可以將其視為回答問題「何謂列？」。有關資料粒度的詳情，請參閱[為分析構建資料](https://help.tableau.com/current/public/desktop/zh-tw/data_structure_for_analysis.htm#what-is-a-row)
- **共用欄位**：必須至少有一個欄位可用於構成資料表之間的連結。對於聯結，這些欄位可定義_聯結子句_。在相關資料表中，它們可以建立_關係_。
- **基數**：共用欄位有多少個唯一值（唯一性）。有關詳情，請參閱下個章節。
- **參考完整性**：保證一個資料表中的值在另一個資料表中具有符合項。換句話說，一個資料表中不可能有在另一個資料表中沒有相應記錄的記錄。有關詳情，請參閱下文。

## 基數

單一欄或欄位中的_基數_是指其值的唯一程度。低基數表示只有幾個唯一值（例如在眼睛顏色的欄位中）。高基數表示有很多唯一值（例如在電話號碼的欄位中）。

資料表之間的基數相似性是指一個資料表中的列是否_可以_與另一個資料表中的多個列進行連結。（請務必牢記，基數不會解決某個資料表中是否缺少資料的問題，而參考完整性可顯示缺少資料的問題。雖然這些概念可以協同工作，但是它們是關係的兩個不同屬性。）

選項包括一對一、一對多、多對一或多對多。

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 75%;"><col style="width: 25%;"></colgroup><tbody><tr><td><p><b>一對一</b></p><ul><li><i>定義</i>：某個資料表中共用欄位的每個值<b>至多</b>與另一個資料表中共用欄位的一個值相關。&nbsp;</li><li><i>縮寫：</i>1:1</li></ul><p><i>例如</i>：每輛汽車都有自己的車牌，並且車牌是特定於每輛車的。汽車對車牌是一對一的關係。</p><p>請注意，即使汽車未註冊或車牌號尚未指派給汽車，也可透過參考完整性來描述該差異。一輛汽車只能有一個車牌，而一個車牌只能指派給一輛汽車，因此基數保持為一對一。</p></td><td><p>&nbsp;</p><img src="https://help.tableau.com/current/public/desktop/zh-tw/Img/1-1.png" alt="具有三個彩色橫條的水平橫條圖。"></td></tr><tr><td><p><b>一對多</b>或<b>多對一</b></p><ul><li><i>定義</i>：一個資料表中共用欄位的每個值都可以與另一個資料表中的多個列相關（該值在另一個資料表中重複）。</li><li><i>縮寫</i>：m:1 或 1:m</li><li>資料表的順序確定其是多對一還是一對多（類似於左右聯結）。</li></ul><p><i>範例</i>：許多員工有同一位經理。員工對經理是多對一的關係。經理對員工是一對多的關係。</p></td><td><p>&nbsp;</p><img src="https://help.tableau.com/current/public/desktop/zh-tw/Img/1-M.png" alt="流程圖，其中有六個相互連接的粉彩色方塊。"><p><img src="https://help.tableau.com/current/public/desktop/zh-tw/Img/M-1.png" alt="一對多關係的範例。"></p></td></tr><tr><td><p><b>多對多</b></p><ul><li>一個資料表中共用欄位的多個值可以與另一個資料表中的多個列相關（共用欄位的值可以在任一資料表中的多個列中重複）。</li><li>縮寫為 m:m。</li><li>如果在資料來源中未偵測到其他設定，則此設定為預設設定。</li></ul><p><i>範例</i>：許多電影中都有演員，而電影中有許多演員。演員對電影是多對多的關係。可以在同一筆交易中購買多本書，也可以多次購買一本書。ISBN 對訂單 ID 是多對多的關係。</p></td><td><p>&nbsp;</p><img src="https://help.tableau.com/current/public/desktop/zh-tw/Img/M-M.png" alt="多對多關係的範例。"></td></tr></tbody></table>

可以在「效能選項」設定中指定基數。有關詳情，請參閱[使用效能選項最佳化關係查詢](https://help.tableau.com/current/public/desktop/zh-tw/datasource_relationships_perfoptions.htm)。

## 參考完整性

有一個相關的概念稱為參考完整性，其表示一個資料表中的列在另一個資料表中始終具有相符的列，這由它們的共用欄位值決定。若資料庫中沒有對無車牌汽車或無汽車車牌的記錄，則該關係具有參考完整性。

在 Tableau 中，可在關係的每一側設定參考完整性。在「效能選項」設定中，某些記錄相符表示沒有（或您不知道是否存在）參考完整性。所有記錄相符表示存在參考完整性。預設設定是不假設存在參考完整性（某些記錄相符）。

有關詳情，請參閱[使用效能選項最佳化關係查詢](https://help.tableau.com/current/public/desktop/zh-tw/datasource_relationships_perfoptions.htm)。

## 自我測試

您是否可以定義每張圖表的基數和參考完整性？如何用語言表述？ 

範例：

 ![](/tableau/current/zh-tw/public/desktop/zh-tw/Img/cardinality_RI_example.png)

若我們將左側資料表設定為「書籍」，右側資料表設定為與作者 ID 連結的「作者」，請用語言表述該表： 

- **一本書可以有多個作者**（紫色記錄顯示左側書籍資料表中的一列對應右側作者資料表中的多個記錄）。
- **沒有任何作者擁有一本以上的書**（右側每筆作者記錄僅對應左側一筆書籍記錄）。
- **沒有任何書沒有作者**（左側沒有記錄無法對應右側的記錄）。
- **有些作者可能沒有書籍**（右側的灰色作者記錄在左側沒有對應的記錄。）

_按一下下面的每個部分將其展開。_

檢查您的知識

![](/tableau/current/zh-tw/public/desktop/zh-tw/Img/cardinality_RI_tryit.png)

解決方案

![](/tableau/current/zh-tw/public/desktop/zh-tw/Img/cardinality_RI_solution.png)

## 為何重要？

正確設定基數或參考完整性設定可以最佳化查詢，從而提高效能。但是，錯誤的設定可能會由於資料丟失或重複而導致彙總問題。對於基數，預設的效能選項設定為「多個」，而對於參考完整性，則為「某些記錄相符」。只有在您確定資料的正確特性時，才可以對這些預設選項進行調整。

有關 Tableau 如何處理每個設定的詳情，請參閱[基數和參考完整性設定的含義](https://help.tableau.com/current/public/desktop/zh-tw/datasource_relationships_perfoptions.htm#OptionalSettings)。

### Tableau 中的範例

讓我們探索一下，若基數設定不正確，會發生何種情況。

**附註**：以下範例會使用 [書店資料集](https://help.tableau.com/current/public/desktop/zh-tw/bookshop_data.htm)中的部分資料表。可以[下載工作簿](https://help.tableau.com/samples/en-us/bookshop/cardinality_RI.twbx)進行後續操作，也可以下載原始資料來自己建立資料來源。使用的資料表是 _Bookshop.xlsx_ 的 **Books（書籍）**、**Info（資訊）** 和 **Edition（版本）**（僅保留一些欄位）以及 _BookshopLibraries.xlsx_ 的 **LibraryProfile（圖書館簡介）** 和 **Catalog（目錄）**。

Books（書籍）和 Info（資訊）資料表具有一對一的關係 - Info（資訊）本質上是 Books（書籍）資料表的額外欄。因此，雖然這些資料表可以進行關聯，但將它們聯結起來以建立具有所有欄的新邏輯資料表是有意義的。Edition（版本）與此合併資料表具有多對一的關係，因為一本書可以有多個版本，通常使用不同的格式。（請注意，下圖顯示了從 Books（書籍）+ Info（資訊）資料表到 Edition（版本）的關係，因此是一對多的關係。）

Edition（版本）與 Catalog（目錄）相關，在 ISBN 上是一對多的關係。Catalog（目錄）與 LibraryProfile（圖書館簡介）在 Library ID（圖書館 ID ）上是多對多的關係。關鍵點是，LibraryProfile（圖書館簡介）資料表對每個圖書館有多個列，對每種職員類型（圖書館員、圖書館助理、圖書館技術人員）各有一列。有關這些資料表結構的詳情，請參閱[書店資料集](https://help.tableau.com/current/public/desktop/zh-tw/bookshop_data.htm)。

![](/tableau/current/zh-tw/public/desktop/zh-tw/Img/bookshop_schema_manytomany.jpeg)

#### 正確的設定

正確設定 Catalog（目錄）-LibraryProfile（圖書館簡介）關係後，我們可以製作一個簡單的視覺效果，顯示每個圖書館可為幾本書提供的工作人員數量。雖然這個視覺效果很愚蠢，但是對說明問題卻很有用。無論我們在談論哪本書，閒置圖書館都有 130 名工作人員。工作人員類型有三個值，因此每個總計由三筆記錄（括號中的數字）組成。

![](/tableau/current/zh-tw/public/desktop/zh-tw/Img/mm_right.png)

**工作人員按圖書館和書名計數。（括號中的數字表示每個標記中的記錄數。）**

#### 錯誤的設定：一對一

若將關係錯誤地設定為一對一，則在視覺效果中，Catalog（目錄）中的每個書名僅與 LibraryProfile（圖書館簡介）資料表中的一筆記錄配對（如括號中的記錄計數所示）。

![](/tableau/current/zh-tw/public/desktop/zh-tw/Img/mm_wrong11.png)

**工作人員按圖書館和書名計數。（括號中的數字表示每個標記中的記錄數。）**

在上面，我們可以看到每個圖書館只顯示最少工作人員數。（請參閱下方視覺效果中的粗體數字。最少工作人員數會反映在工作人員計數視覺效果中。）

![](/tableau/current/zh-tw/public/desktop/zh-tw/Img/staffcounts.png)

**工作人員按類型和圖書館細分。**

有關如何將關係變為視覺效果內容聯結的詳情，請參閱 Tableau 部落格上的[在 Tableau 中導入新的資料建模](https://www.tableau.com/about/blog/2020/5/relationships-part-1-meet-new-tableau-data-model)。

#### 錯誤的設定：聯結

雖然有多種方法可以解決此類問題（詳細資料層級運算式是常見的一種），但聯結資料粒度不同或基數為「多個」的資料表可能導致重複。在此處，工作人員計數對於只有一種格式的書名而言是準確的，但是若書籍在 Edition（版本）資料表中具有兩種格式，則會將重複計數傳遞到工作人員計數（請注意，括號中的記錄計數為 6，而不是正確的 3）。

![](/tableau/current/zh-tw/public/desktop/zh-tw/Img/mm_wrong_join.png)

**工作人員按圖書館和書名計數。（括號中的數字表示每個標記中的記錄數。）**

#### 錯誤的設定：錯誤地假設存在參考完整性

若不存在參考完整性，則告知 Tableau 存在參考完整性（所有記錄相符）可能會導致值丟失。在此處，這兩個視覺效果相似，但右側的視覺效果來自設定為假設存在參考完整性的資料來源。該視覺效果已丟失 null。雖然在某些情況下這不會產生問題，但瞭解這些 null 代表的內容至關重要。在此處，視覺效果已顯示每個圖書館中的版本數，而 null 表示版本資料表中存在兩個版本，但這兩個版本卻未被任何圖書館收錄。這可能是一項重要的疏忽，而且是錯誤地假設存在參考完整性時會忽略的疏忽。

![](/tableau/current/zh-tw/public/desktop/zh-tw/Img/ri_comparison.png)

[探索工作簿](https://help.tableau.com/samples/en-us/bookshop/cardinality_RI.twbx)及其資料來源，以查看由於資料表格合併不當可能引起的其他問題。

## 效能影響

若對這些設定進行錯誤的設定會導致資料丟失或重複，為什麼 Tableau 會允許對其進行變更？在許多情況下，您可以並且應該保留預設設定：關聯資料表而不是聯結資料表，將基數保留為多對多，並且不假設存在參考完整性。特別是若您不確定應該如何進行設定時。

但是，基數和參考完整性是「效能選項」，因為預設設定可能會對效能產生影響。若您確定資料的結構，則設定正確的設定可以減少查詢，從而提高速度。

### 細節

**附註**：本節會使用其他的資料合併技術進行類比，目的在於僅提供概念框架。這不是有關 Tableau 如何在關係中使用效能設定的技術說明。

**基數**

關係的基數會影響彙總的發生時間。這可以從混合資料的角度來思考。資料混合後，仍然能夠對兩個資料來源進行獨立的查詢。並且不管其中的任一資料來源如何，每個資料來源都會根據檢視的詳細資料層級需要進行彙總。而對於關係，基數設定會影響彙總是在聯結之前還是之後進行。

在上方的範例中，「多個」設定表示每個圖書館的工作人員數會在將該資料與書籍資訊合併之前進行彙總，從而確保每本書都有正確的工作人員數。若將基數錯誤地設定為「一個」，則工作人員數不會在其與書籍資料合併之前進行彙總，從而導致值不正確。

請注意，這不僅會顯示不正確的值，而且所有值都會指派給工作人員類型「圖書館員」，雖然實際上這些值來自所有三種工作人員類型。錯誤地設定此設定可能會導致不可預測的錯誤值。只有在檢視中使用設定錯誤關係另一側的另一個資料表中的欄位時，才會對結果進行篩選。

![](/tableau/current/zh-tw/public/desktop/zh-tw/Img/1-1aggregation.png)

但是，若值是唯一的，則 Tableau 可以在最佳化查詢的情況下自由地移除聯結前的彙總。

**參考完整性**

雖然參考完整性指的是關係的設定，但可以從聯結類型的角度來思考。完整外部聯結將保留所有記錄，無論另一個資料表中是否存在相符項，但是會降低效能。若您不確定記錄是否會丟失，則外部聯結會更安全。當可能不存在參考完整性（某些記錄相符）時，會以這種方式處理資料表。

內部聯結將僅保留在兩個資料表中都具有相符項的記錄，並丟棄未出現在每個資料表中的記錄。若您知道內部聯結不會清除必要的資料，則效率更高。若「效能選項」設定為「所有記錄相符」，則假設存在參考完整性，並且在執行聯結時不必考慮不相符的值。

錯誤的參考完整性設定可能會對合併的資料產生類似篩選器的作用，從而移除不相符的值。有關保留不相符記錄之功能的詳情，請參閱 Tableau 部落格上的[在多個關聯資料表中提問](https://www.tableau.com/about/blog/2020/6/relationships-part-3-asking-questions-across-multiple-related-tables)。有關聯結類型的詳情，請參閱[聯結資料](https://help.tableau.com/current/public/desktop/zh-tw/joining_tables.htm)。

## 保留預設設定

若您的分析具有可接受的效能，我們強烈建議保留預設的效能選項設定「多對多」，並且不要假設存在參考完整性。關係的作用來自於它們可根據分析中使用的資料表提供準確的且內容適當的結果。變更這些設定會消除[關係的語意靈活性](https://www.tableau.com/about/blog/2020/5/relationships-part-1-meet-new-tableau-data-model)。