Foreign-Key

包含另一個外鍵表中經常訪問的數據的摘要是個好主意嗎?

  • October 19, 2013

抱歉標題不好,我會在這裡嘗試更詳細地解釋它。

我有一個應用程序,它經常從表 A 中獲取一行,然後在外鍵映射表(表 B)中查找一列,最後在表 C 中查找具有相應外鍵的幾行。

我的問題是:如果表 A 有一列包含我們經常從表 C 中獲取的特定列中的數據,會更好嗎?這將是反規範化,但會節省大量查詢。

例如,假設我們有一個表“法語單詞”(表 A),其列如下:

id, word, pronunciation, frequency

我們還有一個表(表 B),將“法語單詞”映射id到任意數量的“德語單詞” id(表 C)

然後在“德語單詞”(表 C)中我們也有id, word, pronunciation, frequency.

當我們查找一個法語單詞時,我們通常希望通過表 B 獲得與之關聯的頻率最高的德語單詞。highest_frequency_german_word在法語單詞表中只包含一列會更好嗎?

您是否有什麼特別的原因擔心您的電腦要連接三個表需要做多少工作?

規範化架構的目的是讓您在插入、更新和刪除數據時更難損壞數據。規範化你的模式意味著讀取你的數據會更容易(通常),但是你維護數據的程式碼會更簡單,因此更不容易出現數據損壞錯誤,當然,建構和維護成本也更低。

如果你的數據是相當靜態的,即你只寫一次然後讀了很多,那麼規範化的好處就不那麼重要了。

如果您的性能或資源使用率非常關鍵,並且您無法從規範化數據中獲得所需的性能,那麼您可以考慮對架構進行非規範化。但是,無論何時使用非規範化,您都應該充分了解您為自己設置的有關數據損壞的所有潛在陷阱。

預設情況下進行規範化,並根據需要進行非規範化,並且要謹慎。

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