在使用關聯模型時,我們有兩組可以使用的操作。其中之一是關聯代數。

在使用關聯模型時,我們有兩組可以使用的操作。

第一組被稱為關聯代數,它是一種程序性語言

這是SQL的基礎,因此學習它非常重要 - 因為SQL是處理關聯式數據庫的事實標準。

第二組被稱為關聯演算,與程序性不同,它是一種聲明性語言。這是我們與數據庫進行交互的一個基本差異,因為你不告訴數據庫軟件要做什麼,你只告訴它你想要什麼,然後讓它處理如何實現。

在編程語言中,這是一個常見的區別。在現代前端開發中,我們說在React中與DOM的交互是聲明式的。使用原始的JavaScript修改DOM是程序性的。

數據日誌QBEQUEL等語言以關聯演算作為基礎。我不打算談論它,因為我認為這是一種比SQL更專門的做事方式,但如果你有興趣,你可以看看它。

在簡介結束後,讓我們繼續講解關聯代數

我們有兩種類型的操作:

  • 基本操作
  • 連接操作

關聯代數的基本操作

基本操作包括:

  • 聯集:從兩個表中獲取數據,生成元組的和,前提是兩個表具有相同的列和屬性類型(域)。
  • 差異:獲取包含在第一個表中但不在第二個表中的數據,生成元組的差異,前提是兩個表具有相同的列和屬性類型(域)。
  • 笛卡爾積:從兩個表中獲取數據,並生成一個結合它們數據的單個表,基於屬性值。
  • 選擇:根據某些條件僅提取表中的某些元組(行)。
  • 投影:生成一個新表,只包含現有表的一個或多個屬性(列)。
  • 重命名:用於重命名屬性,防止在不同數據中有相同名稱的多個表發生衝突。

關聯代數的連接操作

連接可能是你可以使用關聯代數進行的最強大的操作。它們建立在基本操作之上,允許你關聯不同關係(表)中包含的數據。

注意:我很快就會談到在數據庫管理系統中實際應用連接,這主要是理論上的介紹。

我們有兩種主要的連接版本:自然連接θ連接。所有其他版本都是從這兩個版本中提取出來的。

自然連接

自然連接將兩個關係(表)進行關聯,並基於屬性的相同值創建一個新表。

首先,我們需要兩個具有相同屬性名稱(列)的關係。然後,如果關係A中的屬性值在關係B中的屬性中沒有相應的匹配值,該行不包含在結果中,它被忽略掉。

例如:

關係A:

員工編號 姓名
1 Mark
2 Tony
3 Rick

關係B:

經理姓名 員工編號
Todd 1
Albert 2

我們可以通過自然連接獲取每個員工的老闆姓名:

員工編號 姓名 經理姓名
1 Mark Todd
2 Tony Albert

由於關係中有相同的員工編號屬性名稱,結果中只出現一次,而不是兩次。

在關係A中出現的員工編號3,Rick,不包含在這個表中,因為在關係B中沒有相應的記錄。

θ-連接

Θ-連接允許根據任何條件比較兩個不同關係中的兩個列進行連接,而不僅僅是像自然連接那樣進行相等的比較。

它對兩個表執行笛卡爾積,並根據我們想要進行的選擇來過濾結果。

等值連接

等值連接是一種θ連接,其中的選擇是基於兩個不同表中屬性值的相等。

與自然連接的區別在於,我們可以選擇要比較的屬性名稱(列)。

稍後在介紹SQL時,我們將更詳細地討論連接,以便在實際應用中使用它們。