Normalization

數據庫規範化,我應該合併這兩個表嗎?

  • January 16, 2018

我對數據庫規範化和使用不是我創建的數據庫有點陌生。數據庫有一個使用者表和一個單獨的使用者地址表。兩個表都使用使用者 ID 作為它們的主鍵,並且每個使用者都需要有一個地址。由於每個使用者都需要有一個地址,是否應該將資訊添加到使用者表中以進行適當的規範化?

在理論上,這兩個表聽起來確實可以組合起來。

在實際層面上,除非您要重寫與數據庫互動的所有內容,否則如果您保持原樣,則不會產生明顯的重大損害。

如果數據的唯一重複是使用者 ID,那麼從更改中獲得的空間很小,並且可能不值得修改現有程式碼以在其新位置查找數據的成本。

如果我們了解更多您的具體情況,我們或許能夠提供更詳細的答案。

正規化並不總是必要的,因為 RDBMS 對理論集的模擬相對較差。總是有一些限制、成本、減速和瓶頸可以通過一些非規範化來避免。當然,出於教育目的,最好用單獨的表來表示每種數據類型。當您的方案具有類型時useraddress必須將它們聲明為兩個不同的表。但是在實際的生產項目中,有時我們必須為了性能而去規範化。不幸的是,每個具體案例都需要一些具體的方法,如果沒有一些分析就無法建議。

例如,表可以表示“帶時間戳的感測器讀數”類型,如下所示:

+-----------+-----------+---------+
| timestamp | sensor_id | readout |
+-----------+-----------+---------+

充滿了數百萬行。當您想要獲取每個感測器的最後儲存讀數時,可能需要一段時間。但是,如果您有相同的表,其中sensor_id欄位具有 UNIQUE 索引並且所有INSERTs 都有ON DUPLICATE KEY UPDATE子句,並且與主表同時填充,那麼您可以簡單地SELECT *從該表中進行填充。

規範化表明不允許儲存相同類型的實體的不同表。但在現實世界中,這不是教條。

引用自:https://dba.stackexchange.com/questions/195514