規範化數據庫:過渡到第二範式(2NF)

將數據庫放入第二範式

在過去的一個月中,我們研究了數據庫表正常化的幾個方面。 首先,我們討論了數據庫規範化的基本原則。 上次,我們探討了第一範式(1NF)規定的基本要求。 現在,讓我們繼續我們的旅程,並涵蓋第二範式(2NF)的原則。

回想2NF的一般要求:

這些規則可以用一個簡單的語句來概括:2NF試圖通過提取表來減少表中冗餘數據的數量,將它放在新表中並創建這些表之間的關係

我們來看一個例子。 想像一下,在線商店將客戶信息保存在數據庫中。 他們可能有一個名為Customers的表,其中包含以下元素:

簡要看一下這個表格會發現少量的冗餘數據。 我們將“海崖,紐約11579”和“邁阿密,佛羅里達州33157”分別儲存兩次。 現在,在我們的簡單示例中,這看起來可能不是太多增加的存儲空間,但如果我們的表中有成千上萬行,則可以想像浪費的空間。 此外,如果Sea Cliff的郵政編碼發生變化,我們需要在整個數據庫的許多地方進行更改。

在符合2NF的數據庫結構中,此冗餘信息被提取並存儲在單獨的表中。 我們的新表(我們稱之為ZIP)可能具有以下字段:

如果我們想要超級高效,我們甚至可以提前填寫此表 - 郵局提供所有有效郵政編碼及其城市/州關係的目錄。 當然,你遇到過這種類型的數據庫被利用的情況。 有人下訂單可能會先要求您提供您的郵政編碼,然後才知道您打來的城市和州。 這種佈置減少了操作員的錯誤並提高了效率。

現在我們已經從Customers表中刪除了重複的數據,我們已經滿足了第二範式的第一條規則。 我們仍然需要使用外鍵來將兩個表連接在一起。 我們將使用郵政編碼ZIP表中的主鍵)來創建該關係。 這是我們的新Customers表:

現在我們已經最小化了存儲在數據庫中的冗餘信息的數量,並且我們的結構處於第二範式!

如果您想確保您的數據庫已正常化,請瀏覽本系列中的其他文章: