在這一章中,我們將了解學習相關資料的基礎知識。 在討論和建立不同資料之間的關係之前,讓我們來看看為什麼需要關聯資料。 這一切都回歸規範化。
資料庫規範化或簡單規範化是組織關聯式資料庫的列(屬性)和表(關係)以最小化資料冗餘的過程。 這是將資料分解到多個表格以提高整體效能,完整性和永續性的過程。
下面來看看下面的包含資料的表格,但問題是這個資料是相當多餘的,這增加了輸入資料時輸入錯誤和不一致的機會。
客戶編號 | 名字 | 地址 | 餅乾 | 數量 | 價格 | 總計 |
---|---|---|---|---|---|---|
1 | Ethel Minsu | 12 Main St, Arlington, VA 22201 S | 巧克力片 | 5 | ¥2.00 | ¥10.00 |
2 | Tom Wilber | 1234 Oak Dr., Pekin, IL 61555 | 巧克力片 | 3 | ¥2.00 | ¥6.00 |
3 | Ethil Minsuy | 12 Main St., Arlington, VA 22201 | 巧克力片 | 5 | ¥2.00 | ¥10.00 |
為了解決這個問題,需要重構資料並將其分解成多個表格,以消除一些冗餘,如下三個表格所示。
在這裡,有三個表:第一個是:tblCustomers
表,第二個是:tblOrders
表,第三個是:Cookies
表。
這裡的問題是,僅僅通過拆分多個表中的資料將無助於告訴某個表中的資料如何與另一個表中的資料相關聯。要連線多個表中的資料,我們必須將外來鍵新增到tblOrders
表中。
關係通過匹配主鍵列中的資料來工作,通常是兩個表中具有相同名稱的列。 在大多數情況下,該關係與一個表中的主鍵相匹配,該錶為每行提供一個唯一的識別符號,在另一個表中的外來鍵中包含一個條目。 表格之間有三種型別的關係。 所建立關係的型別取決於相關列的定義方式。
下面來看看這三種關係 -
一對多的關係是最常見的關係型別。 在這種型別的關係中,表A
中的行可以在表B
中具有許多匹配的行,但是表B
中的行在表A
中只能有一個匹配的行。
例如,客戶和訂單表具有一對多的關係:每個客戶可以有很多訂單,但每個訂單僅來自(或屬於)一個客戶。
在多對多關係中,表A
中的一行可以在表B
中具有多個匹配的行,反之亦然。
可以通過定義第三個表(稱為連線表)來建立這樣的關係,該連線表的主鍵由來自表A
和表B
的外來鍵組成。
例如,Customers
表和Cookies
表具有多對多的關係,這些關係由從這些表中的每個表到Orders
表的一對多關係定義。
在一對一的關係中,表A
中的一行可以在表B
中不超過一個匹配的行,反之亦然。 如果相關列是主鍵或者具有唯一約束,則建立一對一關係。
這種型別的關係並不常見,因為大多數以這種方式相關的資訊將全部在一個表中。可以使用一對一的關係來做以下工作 -