資料庫表格關聯性

了解資料庫中的表格如何彼此關聯。

關聯性是包含相關資訊的表格之間有意義的關聯 — 關聯性使資料庫變得實用。如果資料庫中的表格之間沒有任何關聯,您還不如使用分散的試算表檔案,而不是資料庫系統。

如同我們在資料庫簡短概觀中所涵蓋的內容,資料庫是表格的集合,而這些表格具有欄位(也稱為資料行)。每個表格都包含一個稱為實體(或主要)索引鍵的欄位,用於識別該表格中的資料列。藉由告知您的資料庫,一個表格中的索引鍵值對應於另一個表格中的索引鍵值,您可以在這些表格之間建立關聯性;這些關聯性讓您能夠跨資料庫中的不同表格執行強大的查詢。當一個表格的實體索引鍵連結到第二個表格時,它在第二個表格中稱為外部索引鍵。

識別表格之間您需要的連線是資料模型化和結構描述設計流程的一部分 — 也就是說,找出您的資料如何組合在一起,以及您應該如何精確配置表格及其欄位的流程。此流程通常涉及建立表格及其關聯性的視覺化表示,稱為實體關聯圖 (ERD),其中不同的標記法指定關聯性的種類。您的表格之間的這些關聯性可以是

思考您的表格應如何彼此關聯,也有助於確保資料完整性、資料準確性,並將多餘資料保持在最低限度。

一對一關聯性

一對一關聯性中,一個表格中的記錄只能對應到另一個表格中的一個記錄(或在某些情況下,沒有記錄)。一對一關聯性並非最常見,因為在許多情況下,您可以將對應資訊儲存在同一個表格中。您是否將該資訊分割成多個表格取決於您的整體資料模型和設計方法;如果您盡可能保持表格的狹隘焦點(就像在正規化資料庫中一樣),那麼您可能會發現一對一關聯性很有用。

一對一關聯性範例

假設您正在組織公司的員工資訊,並且您也想要追蹤每位員工的電腦。由於每位員工只獲得一台電腦,而且這些電腦不在員工之間共用,因此您可以將欄位新增到您的 Employee 表格中,以保存每台電腦的品牌、年份和作業系統等資訊。但是,從語意角度來看,這可能會變得混亂 — 電腦資訊真的屬於關於員工的表格嗎?這由您決定,但另一個選項是建立一個 Computers 表格,其與 Employee 表格具有一對一關聯性,如下圖所示

A one-to-one relationship between an Employee and a Computers table. PK indicates a primary key, and FK indicates a foreign key.

在此案例中,我們 Employee 表格中的實體索引鍵作為 Computers 表格的外部索引鍵。您可能會有尚未指派給員工的電腦,而此模型可確保您仍然可以為 Computer 表格中的電腦保留記錄。如果員工離職,您只需要更新一個欄位,就可以輕鬆地將電腦連結到新員工。

用於在 ERD 中連接表格的線條的精確格式設定(稱為烏鴉腳標記法)有所不同;有時您會看到表示一對一關聯性的純線條,有時這些線條會有交叉影線。

一對一關聯性也可用於安全目的,例如,如果您想要將敏感的客戶資訊儲存在單獨的表格中,您可以將其與主要 Customers 表格連結,並使用外部索引鍵。

一對多關聯性

一對多關聯性是資料庫中表格之間最常見的關聯性類型。在一對多(有時稱為多對一)關聯性中,一個表格中的記錄對應到另一個表格中的零個、一個或多個記錄。

一對多關聯性範例

例如,思考客戶及其訂單的表格,就像 Metabase 的範例資料庫一樣,其中 People 表格中的一個記錄可以連結到 Orders 表格中的多個記錄。在此案例中,一位客戶可以下多個訂單,而這些多個訂單記錄都將連結回 People 表格中的單一記錄。該連線透過 User_ID 欄位進行編碼,該欄位是 People 表格中的主要索引鍵,也是 Orders 表格中的外部索引鍵。下圖顯示這兩個表格如何彼此關聯

A one-to-many relationship between the Sample Database

雖然一個人可以連結到多個訂單,但反之則不然 — 訂單僅連結到 People 表格中的單一記錄,而且沒有多個客戶。

多對多關聯性

多對多關聯性表示一個表格中的多個記錄連結到另一個表格中的多個記錄。這些記錄可能只與單一記錄相關聯(或完全沒有),但重點是它們可以而且經常連結到多個記錄。多對多關聯性在實際資料庫使用案例中不是很常見,因為遵循正規化通常涉及將多對多關聯性分解為單獨、更具焦點的表格。

事實上,您的資料庫系統甚至可能不允許建立直接的多對多關聯性,但您可以透過建立第三個表格來解決此問題,該表格稱為聯結表格,並在其與您的兩個起始表格之間建立一對多關聯性。

從這個意義上說,Metabase 範例資料庫中的 Orders 表格充當聯結表格,在 PeopleProducts 之間建立中繼連結。範例資料庫的 ERD 看起來會像下圖,其中每個關聯性都由用於連接表格的線條類型指定

An ERD showing Metabase

從技術上來說,ProductsOrders 表格具有一對多關聯性,因為一個產品可以與多個訂單相關聯。但根據我們虛構公司的資料庫,人們似乎只訂購單一產品(他們會出於某種原因購買五台輕量羊毛電腦)。此資料庫的真實世界(而且可能更具商業頭腦)實作可能會在兩者之間包含一個聯結表格,使其訂單可以包含許多不同的產品。

延伸閱讀

下一步:度量與維度

如何在查詢中使用量化和質化欄位。

下一篇文章