Sql-Server

另一個數據庫中表的完全限定或同義詞,雲遷移計劃

  • June 23, 2022

場景:在本地 SQL Server 中,併計劃在一兩年內上雲。

我正在數據庫 A 中編寫一個儲存過程,我需要訪問數據庫 B 中的一個表。

創建指向數據庫 B 中表的同義詞還是完全限定包中的表是最佳實踐嗎?

我發現有幾種類型的對象使 SQL Server 中的調試和/或管理變得更加困難,主要是因為它們最終被大多數開發人員重新考慮。其中之一是觸發器,另一個是同義詞。

我相信 Synonyms 的原因是:

  1. 同義詞並不常用,許多開發人員甚至不知道它們的存在。
  2. 作為查詢的一部分,同義詞通常看起來(和功能)像一個正常實體對象,當其他開發人員遇到同義詞時可能會感到困惑。當他們試圖追溯同義詞對象所在的位置時,他們可能需要一段時間才能意識到它是同義詞,而不是像表或視圖這樣的實體對象。我想說,對於那些不利用模式並將所有內容都保存在dbo.

相反,同義詞在理論上是好的,特別是對於抽像出定義它們的對象引用的案例。這樣如果在很多地方都引用了這樣的對象,並且有一天需要更改,那麼您只需要更新同義詞定義。這只是對一個對象的更改,而不是必須修復所有依賴項中的引用。所以可以說同義詞也可以提高數據庫的可管理性。

此外,與同義詞有一個命名約定可以幫助開發人員在他們第一次遇到它時意識到它是同義詞,例如在所有同義詞前加上小寫字母s


至於您是否應該為您的案例使用一個,取決於您是否認為同義詞的上述良好屬性超過了潛在的壞屬性。這裡沒有真正的正確或錯誤答案,由您決定。就我個人而言,我喜歡明確並完全限定我的參考文獻,而不是使用同義詞。

如果您使用的雲解決方案是 SQL Azure,那麼您可以做的事情就會受到一定的限制,因為從數據庫 A 執行的跨數據庫查詢必須將數據庫 B 視為外部數據源。您在數據庫 B 中引用的每個表都需要在數據庫 A 中創建一個外部表。我認為為這些表中的每一個創建同義詞並不能幫助您解決這個問題。

https://docs.microsoft.com/en-us/azure/azure-sql/database/elastic-query-getting-started-vertical?view=azuresql

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