在這一章中,我們將瞭解學習相關數據的基礎知識。 在討論和創建不同數據之間的關係之前,讓我們來看看為什麼需要關聯數據。 這一切都回歸規範化。
規範化
資料庫規範化或簡單規範化是組織關係資料庫的列(屬性)和表(關係)以最小化數據冗餘的過程。 這是將數據分解到多個表格以提高整體性能,完整性和持久性的過程。
- 規範化是在資料庫中組織數據的過程。
- 這包括創建表並根據設計的規則在這些表之間建立關係,以保護數據並通過消除冗餘和不一致的依賴性來使資料庫更加靈活。
下麵來看看下麵的包含數據的表格,但問題是這個數據是相當多餘的,這增加了輸入數據時輸入錯誤和不一致的機會。
客戶編號 | 名字 | 地址 | 餅乾 | 數量 | 價格 | 總計 |
---|---|---|---|---|---|---|
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
表中。
定義關係
關係通過匹配主鍵列中的數據來工作,通常是兩個表中具有相同名稱的列。 在大多數情況下,該關係與一個表中的主鍵相匹配,該表為每行提供一個唯一的識別字,在另一個表中的外鍵中包含一個條目。 表格之間有三種類型的關係。 所創建關係的類型取決於相關列的定義方式。
下麵來看看這三種關係 -
1. 一對多的關係
一對多的關係是最常見的關係類型。 在這種類型的關係中,表A
中的行可以在表B
中具有許多匹配的行,但是表B
中的行在表A
中只能有一個匹配的行。
例如,客戶和訂單表具有一對多的關係:每個客戶可以有很多訂單,但每個訂單僅來自(或屬於)一個客戶。
2. 多對多的關係
在多對多關係中,表A
中的一行可以在表B
中具有多個匹配的行,反之亦然。
可以通過定義第三個表(稱為連接表)來創建這樣的關係,該連接表的主鍵由來自表A
和表B
的外鍵組成。
例如,Customers
表和Cookies
表具有多對多的關係,這些關係由從這些表中的每個表到Orders
表的一對多關係定義。
3. 一對一的關係
在一對一的關係中,表A
中的一行可以在表B
中不超過一個匹配的行,反之亦然。 如果相關列是主鍵或者具有唯一約束,則創建一對一關係。
這種類型的關係並不常見,因為大多數以這種方式相關的資訊將全部在一個表中。可以使用一對一的關係來做以下工作 -
- 將表分成許多列。
- 出於安全原因隔離表的一部分。
- 存儲短暫的數據,只需刪除該表即可輕鬆刪除。
- 存儲僅適用於主表的子集的資訊。