關聯代數

在使用關聯模型時,我們有兩組可以使用的操作。其中之一是關聯代數。 在使用關聯模型時,我們有兩組可以使用的操作。 第一組被稱為關聯代數,它是一種程序性語言。 這是SQL的基礎,因此學習它非常重要 - 因為SQL是處理關聯式數據庫的事實標準。 第二組被稱為關聯演算,與程序性不同,它是一種聲明性語言。這是我們與數據庫進行交互的一個基本差異,因為你不告訴數據庫軟件要做什麼,你只告訴它你想要什麼,然後讓它處理如何實現。 在編程語言中,這是一個常見的區別。在現代前端開發中,我們說在React中與DOM的交互是聲明式的。使用原始的JavaScript修改DOM是程序性的。 數據日誌、QBE和QUEL等語言以關聯演算作為基礎。我不打算談論它,因為我認為這是一種比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時,我們將更詳細地討論連接,以便在實際應用中使用它們。