您好,登錄后才能下訂單哦!
規范化是一個數據設計過程,其高級目標是將每個事實保持在一個位置,以避免數據冗余以及插入,更新和刪除異常。有多個級別的規范化,本節將介紹前三個級別。考慮到第三范式(3NF)項是多么基本,只看到如何達到3NF才有意義。
考慮一種跟蹤銷售情況的情況。您跟蹤的核心實體是銷售訂單,其中每個銷售訂單包含有關所購買的每個項目的詳細信息(稱為行項目):其名稱,價格,數量等。該訂單還包含客戶的名稱和地址等。有些訂單有很多不同的訂單項,有些訂單只有一個。
在第一范式(1NF)中,沒有重復的數據組,也沒有重復的行。行和列(字段)的每個交集都只包含一個值,并且沒有包含相同事實的列組。為避免重復行,有一個主鍵。對于銷售訂單,在第一范式中,不顯示表格的單個字段中的每個銷售訂單的多個行項目。此外,不會有多個列顯示訂單項。
然后是第二范式(2NF),其中設計是第一范式,每個非鍵列依賴于完整的主鍵。因此,訂單項會分為銷售訂單行項目表,其中每行代表一個訂單的一個訂單項。您可以查看訂單項表,并查看所售商品的名稱不依賴于訂單項表的主鍵:銷售商品是其自己的實體。因此,您將銷售項目移動到其自己的表格,顯示項目名稱。每件商品的價格可能因訂單而異(例如,由于折扣),因此這些價格保留在訂單項表中。對于銷售訂單,客戶的名稱和地址不依賴于銷售訂單的主鍵:客戶是其自己的實體。從而,
接下來是第三范式,其目標是確保不依賴于非關鍵屬性。因此,目標是獲取與行的主題(主鍵)不直接相關的列,并將它們放在自己的表中。因此,有關客戶的詳細信息(例如客戶名稱或客戶城市)應放在單獨的表中,然后將客戶外鍵添加到訂單表中。
2NF表與3NF表的不同之處的另一個例子是網球錦標賽的獲勝者表,其中包含錦標賽,年份,獲勝者和獲勝者出生日期的列。在這種情況下,獲勝者的出生日期很容易出現不一致,因為同一個人可能會在不同的記錄中顯示出生日期。避免這個潛在問題的方法是將桌子分成一個用于比賽獲勝者,另一個用于球員出生日期
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。