數據庫關係

數據庫關係是所有關係數據庫的支柱

當一個表具有引用另一個表的主鍵的外鍵時,兩個數據庫表之間建立關係。 這是術語關係數據庫背後的基本概念。

外鍵如何建立關係

讓我們回顧一下主鍵和外鍵的基礎知識。 主鍵唯一標識表中的每條記錄。 它是一種候選鍵 ,通常是表中的第一列,可以由數據庫自動生成,以確保它是唯一的。

外鍵是用於將記錄鏈接到另一個表中的數據的另一個候選鍵(而非主鍵)。

例如,考慮這兩個表格來確定哪個教師教授哪門課程。

在這裡,課程表的主鍵是Course_ID。 它的外鍵是Teacher_ID:

培訓班
COURSE_ID 課程名 Teacher_ID
Course_001 生物學 Teacher_001
Course_002 數學 Teacher_001
Course_003 英語 Teacher_003

您可以看到課程中的外鍵與教師中的主鍵相匹配:

教師
Teacher_ID 老師的名字
Teacher_001 卡門
Teacher_002 維羅尼卡
Teacher_003 喬治

我們可以說Teacher_ID外鍵幫助建立了課程和教師表之間的關係

數據庫關係的類型

使用外鍵或其他候選鍵,可以在表之間實現三種類型的關係:

一對一 :這種類型的關係在關係的每一方面只允許一條記錄。

主鍵與另一個表中的一個記錄(或無)相關。 例如,在婚姻中,每個配偶只有一個配偶。 這種關係可以在一個表中實現,因此不使用外鍵。

一對多 :一對多關係允許一個表中的單個記錄與另一個表中的多個記錄相關聯。

考慮具有客戶和訂單表的數據庫的業務。

單個客戶可以購買多個訂單,但是單個訂單不能與多個客戶相關聯。 因此,Orders表將包含一個與Customers表的主鍵相匹配的外鍵,而Customers表則沒有外鍵指向Orders表。

多對多 :這是一個複雜的關係,表中的許多記錄可以鏈接到另一個表中的許多記錄。 例如,我們的業務可能不僅需要Customers和Orders表,還可能需要一個Products表。

同樣,Customers和Orders表之間的關係是一對多關係,但考慮訂單和產品表之間的關係。 訂單可以包含多個產品,並且產品可以鏈接到多個訂單:多個客戶可能會提交包含某些相同產品的訂單。 這種關係至少需要三張表。

什麼是數據庫關係重要?

在數據庫表之間建立一致的關係有助於確保數據完整性,從而有助於數據庫規範化 例如,如果我們沒有通過外鍵鏈接任何表格,而只是將數據結合到“課程”和“教師”表格中,那麼結果如下所示:

教師和課程
Teacher_ID 老師的名字 課程
Teacher_001 卡門 生物學,數學
Teacher_002 維羅尼卡 數學
Teacher_003 喬治 英語

這種設計不靈活,違反了數據庫規範化的第一個原則 - 第一範式(1NF),該規則規定每個表格單元格應包含單個離散的數據片段。

或者,也許我們決定為卡門添加第二個記錄,以強制執行1NF:

教師和課程
Teacher_ID 老師的名字 課程
Teacher_001 卡門 生物學
Teacher_001 卡門 數學
Teacher_002 維羅尼卡 數學
Teacher_003 喬治 英語

這仍然是一個薄弱的設計,引入了不必要的重複和所謂的數據插入異常 ,這只意味著它可能導致不一致的數據。

例如,如果教師有多條記錄,那麼如果某些數據需要編輯,但執行數據編輯的人員沒有意識到存在多條記錄? 然後該表格將包含同一個人的不同數據,而沒有任何明確的方式來識別它或避免它。

將此表分成兩個表格,教師和課程(如上圖所示),創建數據之間的適當關係,從而有助於確保數據的一致性和準確性。