Mysql

一對一的關係是否正常化?

  • August 11, 2012

考慮到我們有大量的統計數據作為記錄;例如 20-30INT列。將整個集合保存在一個表中是否更好,因為它們都屬於一條記錄,或者創建另一個以一對一關係連接的表。

前者的優點是避免JOIN并快速訪問相應記錄的所有統計數據。

後者的優點是保持列整潔。第一列是讀密集型的,第二列是寫密集型的。當然,我認為它對性能沒有顯著影響,因為我使用帶有行級阻塞的 InnoDB。

一般來說,我想知道為單個記錄分離不同的數據集是否實用?

如果它符合規範化規則,那麼 1:1 關係可以被規範化(根據定義!) - 換句話說,沒有什麼 1:1 關係使它們不可能遵守規範形式。

為了回答您關於 1:1 關係實用性的問題,有時這是一個非常有用的構造,例如當您有具有不同謂詞(列)的子類型時。

您使用 1:1 關係的原因取決於您的觀點。DBA 傾向於將所有事情都視為性能決定。數據建模者和程序員傾向於認為這些決策是面向設計或模型的。事實上,這些觀點之間有很多重疊之處。這取決於您的觀點和優先事項。以下是 1:1 關係動機的一些範例:

  • 您有一些非常寬的列子集,出於性能原因,您希望將它們物理隔離在儲存中。
  • 您有一些不經常讀取或更新的列子集,出於性能原因,您希望將它們與經常使用的列分開。
  • 您有一些通常是可選的列,但當您知道記錄屬於某種類型時,它們是必需的。
  • 您有一些列在邏輯上屬於一個子類型,並且您希望對它們進行建模以很好地適應您的程式碼的對像模型。
  • 您有一些列只能應用於實體超類型的某些子類型,並且您希望您的架構強制其他子類型不存在此數據。
  • 您有一些屬於實體的列,但您需要使用更嚴格的訪問規則(例如員工表上的薪水)來保護這些特定列。

所以你可以看到,有時驅動因素是性能,有時是模型純度,或者只是希望充分利用聲明性模式規則。

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