規範化:何時應用 2NF 和 3NF
我現在正在學習關係數據庫的大學課程半年。作為一項任務,使用 1NF、2NF 和 3NF 規範化數據。
我沒有發現使我的模式與 1NF 兼容有任何困難。在那之後,我還沒有找到任何應用 2NF 和 3NF 的例子。做 1NF 的時候感覺有點超前。
當我傳遞任務時,我所做的只是我理解的 1NF。它仍然被批准為有效設計。
這是正常的事情嗎?目前我看不到 2NF 和 3NF 的使用,因為 1NF 已經消除了所有冗餘。你的意見?
我認為您會理解在嘗試刪除、插入或更新表中的行時發生的異常需要進行規範化思考。
想想一個有學生、考試和考試教授的老師的 1NF 表。
刪除記錄時發生的異常情況是,您將失去與其關聯的所有資訊。例如,如果只有一個學生參加了考試,而您刪除了 Student-Exam-Professor 元組,您將失去有關該考試和教授的所有資訊(有關教授該考試的教授的資訊將失去,因為它僅存在於您的數據庫中那個元組)。1NF允許這種異常。
當您嘗試插入新元組時發生的異常情況是您必須知道與該元組關聯的所有數據。如果你想插入一個新的元組,你必須知道教授它的教授(例如,如果你有一個 Not null 約束)。例如,如果沒有學生關聯,則 Student 的 Not null 約束不允許您插入與其教授的新考試。1NF允許這種異常。
當您嘗試更新表中元組的值時發生的異常情況是您必須更新該值的所有副本。 例如,如果您更新有關教授、考試或學生更改的一些數據,則必須更新具有該值的每個元組,否則您的數據庫中會出現不一致。1NF允許這種異常。
不要忘記 1NF 表的冗餘,每次教授與該考試相關聯時都會重複,即使您只需要一次。
如果您將其更改為 2NF 表,您將有兩張表,一張是學生考試,一張考試教授,您將沒有異常。
另一個 NF 是 Boyce 和 Codd 範式,BCNF。這個有時不保留一些FD。