2009-03-03 90 views
1

MS SQL Server中的索引和約束對於它們在其中定義的表是本地的。因此,您可以在多個表中創建相同的索引或約束名稱,而不會造成任何困難。SQL Server中的密鑰是全局的 - 爲什麼?

外鍵約束(正如每個人都應該知道的不是鍵,但約束)將出現在Keys子文件夾中,並且它們的名稱顯示爲全局範圍。

有人知道爲什麼「鍵」具有全局範圍的名稱?我明白鍵和索引之間的區別。我不明白爲什麼名稱範圍應該有這樣的差異。在所有情況下,它們都是定義的表格的「本地」。

TIA

回答

3

據「SQL-99完成,真是」由Peter Gulutzan和特魯迪佩爾澤,約束名稱由模式他們生活,以及表格合格的約束影響必須住在相同的模式。但約束名稱不受該表名的限制。約束名必須是它生活在架構中是唯一的

  • YES:myschema.some_primary_key
  • NO:myschema.mytable.some_primary_key

至於「爲什麼」是這樣的話,我以爲它涉及到一個SQL-99中的一種約束稱爲ASSERTION。斷言不屬於「單個表」,正如主鍵,外鍵和檢查約束一樣。斷言聲明任何INSERT/UPDATE/DELETE必須成功的條件,並且斷言可以引用多個表。通過任何表限定這些約束名稱是沒有意義的。

我不知道有多少RDBMS品牌實現了SQL斷言(實際上我不知道一個),但它們可能符合約束名稱的標準SQL規則,所以將來他們可以選擇按照標準實現斷言功能。

+0

謝謝比爾...似乎我被「未能刷新」probelm,當我測試我的重複約束名稱...被看到的UI似乎接受它,但底層數據庫沒有。所以我最初的觀察其實是錯誤的。 – PaoloFCantoni 2009-03-03 05:54:31