規範化與非規範化
關係數據庫由關係(相關表)組成。表格由列組成。如果表是兩個大的(即一個表中的列太多),則可能會出現數據庫異常。如果表是兩個小表(即數據庫由許多較小的表組成),則查詢效率低下。規範化和反規範化是用於優化數據庫性能的兩個過程。標準化將數據表中的冗餘最小化。反規範化(與規範化相反)添加冗餘數據或組數據。
什麼是正常化?
規範化是一個過程,用於最小化關係數據庫中數據中存在的冗餘。這個過程主要是將大表分成冗餘較少的小表(稱為“正常形式”)。這些較小的表將通過定義良好的關係相互關聯。在標準化良好的數據庫中,對數據的任何更改或修改都只需要修改一個表。第一範式(1NF)、第二範式(2NF)和第三範式(3NF)是由edgarf.Codd引入的。Boyce-Codd範式(BCNF)是由Codd和raymondf.Boyce於1974年提出的。高級範式(4NF、5NF和6NF)已經被定義,但它們很少被使用。
符合1NF的表確保它實際上表示一個關係(即它不包含任何重複的記錄),也不包含任何具有關係值的屬性(即所有屬性都應該具有原子值)。對於符合2NF的表,它應該符合1NF,並且任何不屬於任何候選鍵的屬性(即非質數屬性)都應該完全依賴於表中的任何候選鍵。根據Codd的定義,一個表被稱為3NF,當且僅當該表是第二範式(2NF),並且表中不屬於候選鍵的每個屬性都應該直接依賴於該表的每個候選鍵。BCNF(也稱為3.5NF)捕獲了一些3NF沒有處理的異常。
什麼是非規範化?
反規範化是規範化過程的反向過程。反規範化通過添加冗餘數據或分組數據來優化性能。儘管添加冗餘數據聽起來會適得其反,但有時反規範化是一個非常重要的過程,可以克服關係數據庫軟件中的某些缺點,這些缺點可能會導致規範化數據庫的嚴重性能損失(甚至針對更高的性能進行了調整)。這是因為根據數據庫系統的實際物理實現,連接多個關係(這些關係是規範化的結果)來生成查詢結果有時會很慢。
規範化和非規範化有什麼區別?–規範化和反規範化是兩個完全相反的過程。—規範化是將較大的表拆分為較小的表以減少冗餘數據的過程,反規範化是添加冗餘數據以優化性能的過程。—進行規範化是為了防止數據庫異常。——反規範化通常是為了提高數據庫的讀取性能,但由於用於反規範化的附加約束,寫入(即**,更新和刪除操作)可能會變慢。因此,非規範化的數據庫可能比規範化的數據庫提供更差的寫入性能。——通常建議您“規範化直到它受傷,反規範化直到它工作為止”。 |