正規化和反正規化

習題預習

User ask:
給我5題Normalization and Denormalization的中文問題

ChatGPT answer:
  1. 什麼是資料正規化(Normalization),它的目的是什麼?
  2. 資料反正規化(Denormalization)是什麼?它的使用時機是什麼?
  3. 正規化與反正規化有哪些優缺點?它們對系統效能和資料處理有什麼影響?
  4. 在數據庫設計中,什麼情況下需要進行正規化?在什麼情況下應該避免正規化?
  5. 如何選擇正確的正規化級別?什麼因素會影響選擇?

說明知識

User ask:
以中文說明Normalization and Denormalization並舉例

ChatGPT answer:

Normalization 和 Denormalization 是關聯式資料庫中的概念,用來描述資料庫中表格的設計。

Normalization 意旨為「正規化」,它是使資料表符合某些特定規則,以減少資料冗餘和提高資料表格結構設計的程式;Denormalization 意旨為「去正規化」,這是在資料表中添加重複資訊,以加速特定查詢的進行。

舉例來說,假設你有一個資料表格,包括以下資料:

Customer

  • ID
  • Name
  • Email
  • Phone
  • Address

這個資料表格沒有正規化,因為它包含數個重複的資料。舉例來說,如果同一個顧客有多筆資料,例如他們在不同的地址下喜好不同商品,他們的姓名和電話欄位將會是重複的。這樣,你可以考慮建立一個表格專門用來儲存顧客資訊,再建立一個表格用來儲存他們在每個地址下的訂單。這些表格正規化了原始資料,將顧客資訊存儲一次,允許您更輕易地編寫查詢並避免資料冗餘。

另一方面,Denormalization 可以用來提高特定查詢的性能。舉例來說,假設您有一個包含產品,分類和庫存的表格,並且您想查詢所有庫存的內容。在這種情況下,您可以將產品和分類的資料添加到庫存表格中,以便這些查詢能快速執行。換句話說,Denormalization 可以用來優化查詢,即使這意味著增加了一些資料冗餘。

總之,Normalization 和 Denormalization 是資料庫設計的兩個相反的概念,在資料庫設計中,需要達到平衡點,以達到資料表格的最佳效能。

彙總重點

User ask:
以中文條列Normalization and Denormalization的重點

ChatGPT answer:

Normalization:

  • 將資料表依照設定的規則進行分解,使每個屬性只有單一值,避免資料的重複和不一致性。
  • 減少了異動資料的風險,維護資料的一致性和準確性。
  • 資料表分散,讀取速度較慢,適合於讀取量遠大於寫入量的場合。
  • 資料表設計比較規範,避免了資料的冗餘和不一致性。

Denormalization:

  • 將多個關聯表中需要經常查詢的資料整合到一張表中,減少多次讀取資料的操作,提高查詢效率。
  • 降低響應時間,提高數據處理的效率。
  • 增加冗餘數量和複雜度,增加異動資料的風險,維護起來成本較高。
  • 資料表設計較為寬鬆,適合於讀寫操作需要平衡的場合。

知識測驗

User ask:
以中文給我5題Normalization and Denormalization的中等難度問題,並在後面列出答案

ChatGPT answer:
  1. 請問何謂Normalization(正規化)?列出三種正規化的形式。

答案:Normalization 是一種關係型資料庫設計的技術,目的是為了減少重複資料並提高資料庫設計的效率和可維護性。三種正規化形式分別是1NF、2NF 和 3NF。

  1. 如果資料庫中某張表格存在大量重複資料,應該考慮使用哪些正規化形式來解決這個問題?

答案:這表明這張表格不符合3NF限制,可以使用2NF 或 3NF去除重複資料。

  1. 請列出兩個常見的反規範化(Deormalization)的例子。

答案:1.在資料重複較多的查詢上添加冗餘欄位,以提高查詢效率。2. 藉由合併多張表格,以減少查詢中的表格連接數量和提高效率。

  1. 什麼是冗餘欄位,給一個例子說明。

答案:冗餘欄位就是多餘的資料欄位。比如,在一個訂單表中,有一個包含訂單總價金額的欄位,如果再在該訂單表中添加一個新的欄位,可以計算出每個產品單價的總價金額,那這個新欄位就是一個冗餘欄位。

  1. 當為了提高系統效率而進行反規範化時,也會帶來一些問題,請列出至少兩個反規範化可能帶來的問題。

答案:1.增加了資料庫的複雜度和體積,提高了系統維護成本。2. 如果不小心產生錯誤或欄位重複,可能會導致數據不一致。