iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
Software Development

從餐飲業轉職成小白工程師的所見所學系列 第 16

什麼是資料庫正規化? Day16

  • 分享至 

  • xImage
  •  

目的

資料庫正規化是資料庫設計的一個重要概念,其主要目的是確保資料以最有效率和一致的方式儲存在資料庫中。資料庫正規化的核心思想是將資料分割成多個相關的表格,並建立適當的關聯,以減少資料的重複存儲並確保資料的完整性。

原則、概念

  • 避免資料重複:資料庫正規化的一個主要目標是避免資料的重複。這意味著相同的資料不應該儲存在多個地方,而應該在一個地方儲存,然後使用參照(reference)來存取它。這可以減少儲存資料的需求,並確保資料的一致性。

  • 分解表格:將大的資料表格分解成多個較小的表格,每個表格儲存特定類型的資料。這可以提高資料的組織性,減少重複資料的存儲,並簡化資料的維護。

  • 建立關聯:在不同的表格之間建立關聯,以便輕鬆檢索和查詢相關資料。關聯可以是一對一、一對多或多對多,具體取決於資料的結構和需求。

  • 確保資料完整性:資料庫正規化有助於確保資料的完整性,即資料應該是正確、一致和可靠的。透過約束和關聯,可以防止非法資料輸入和資料不一致性。

  • 提高效能:雖然正規化可以減少資料重複,但在某些情況下,它可能導致複雜的查詢。在這種情況下,可能需要進行適度的反正規化,以提高查詢效能。

正規化的五階段

通常,資料庫正規化分為不同的正規化階段,從第一正規化(1NF)到第五正規化(5NF),每個階段都解決不同類型的問題。

  1. 第一正規化(1NF):確保每個表格中的每個欄位都包含原子資料,不包含可再分解的資料。

  2. 第二正規化(2NF):在滿足1NF的基礎上,確保每個非主鍵欄位都完全依賴於候選鍵(主鍵)。

  3. 第三正規化(3NF):在滿足2NF的基礎上,確保沒有傳遞依賴關係,即非主鍵欄位不依賴於其他非主鍵欄位。

  4. 巴斯-科德正規化(BCNF):在滿足3NF的基礎上,處理多值依賴性。

  5. 第四正規化(4NF):在滿足BCNF的基礎上,處理聯結依賴性。

  6. 第五正規化(5NF):在滿足4NF的基礎上,處理投影依賴性。

範例

我們創建兩個 Modle,Article(文章)、Author(作者)。

rails g model Article title:string content:text author_id:integer
rails g model Author name:string

定義 Modle之間的關聯性

## article.rb
class Article < ApplicationRecord
  belongs_to :author
end

## author.rb
class Author < ApplicationRecord
  has_many :articles
end

並且我們在 rails console 創建文章、作者的紀錄

author1 = Author.create(name: 'Alice')
author2 = Author.create(name: 'Bob')

article1 = Article.create(title: 'Article 1', content: 'Content for article 1', author: author1)
article2 = Article.create(title: 'Article 2', content: 'Content for article 2', author: author2)

Rails會自動處理正規化,確保作者的記錄不會重複存儲,而是在作者表中具有唯一的ID。文章表格中包含對作者的引用(author_id),以建立它們之間的關聯。


上一篇
Redis? 適合使用的地方?? Day15
下一篇
什麼是資料庫index? Day17
系列文
從餐飲業轉職成小白工程師的所見所學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言