將數據庫放入第二範式
在過去的一個月中,我們研究了數據庫表正常化的幾個方面。 首先,我們討論了數據庫規範化的基本原則。 上次,我們探討了第一範式(1NF)規定的基本要求。 現在,讓我們繼續我們的旅程,並涵蓋第二範式(2NF)的原則。
回想2NF的一般要求:
- 除去適用於多行表格的數據的子集,並將它們放在不同的表格中。
- 通過使用外鍵在這些新表和他們的前輩之間建立關係。
這些規則可以用一個簡單的語句來概括:2NF試圖通過提取表來減少表中冗餘數據的數量,將它放在新表中並創建這些表之間的關係 。
我們來看一個例子。 想像一下,在線商店將客戶信息保存在數據庫中。 他們可能有一個名為Customers的表,其中包含以下元素:
- CustNum
- 名字
- 姓
- 地址
- 市
- 州
- 壓縮
簡要看一下這個表格會發現少量的冗餘數據。 我們將“海崖,紐約11579”和“邁阿密,佛羅里達州33157”分別儲存兩次。 現在,在我們的簡單示例中,這看起來可能不是太多增加的存儲空間,但如果我們的表中有成千上萬行,則可以想像浪費的空間。 此外,如果Sea Cliff的郵政編碼發生變化,我們需要在整個數據庫的許多地方進行更改。
在符合2NF的數據庫結構中,此冗餘信息被提取並存儲在單獨的表中。 我們的新表(我們稱之為ZIP)可能具有以下字段:
- 壓縮
- 市
- 州
如果我們想要超級高效,我們甚至可以提前填寫此表 - 郵局提供所有有效郵政編碼及其城市/州關係的目錄。 當然,你遇到過這種類型的數據庫被利用的情況。 有人下訂單可能會先要求您提供您的郵政編碼,然後才知道您打來的城市和州。 這種佈置減少了操作員的錯誤並提高了效率。
現在我們已經從Customers表中刪除了重複的數據,我們已經滿足了第二範式的第一條規則。 我們仍然需要使用外鍵來將兩個表連接在一起。 我們將使用郵政編碼 ( ZIP表中的主鍵)來創建該關係。 這是我們的新Customers表:
- CustNum
- 名字
- 姓
- 地址
- 壓縮
現在我們已經最小化了存儲在數據庫中的冗餘信息的數量,並且我們的結構處於第二範式!
如果您想確保您的數據庫已正常化,請瀏覽本系列中的其他文章:
- 數據庫規範化基礎
- 將數據庫置於第一範式
- 將數據庫置於第二範式
- 將數據庫置於第三範式