2010-10-14 15 views
1

有誰知道可用白皮書討論如何在不同架構上使用具有相同名稱的表?在不同架構上使用具有相同名稱的SQL表

我在SQL Server上實現,但我想這個理論可以應用於任何RDBMS。爲了更具體一些,比如我有一個數據庫服務於兩個應用程序,並且應用程序之間存在一些資源交叉,但一些數據集存儲在不同的模式中。

例如

App1.tblSomeData 

App2.tblSomeData 

什麼是使用相同的名稱爲兩個表的優勢/劣勢?另一種方法是使用不同的名稱:

App1.tblSomeDataForApp1 

App2.tblSomeDataForApp2 

這確保所有表名都是唯一的,但這是否有優點/缺點?

+0

@joe - 您編輯的內容很有幫助,但它錯過了一些內容,因此不需要在問題中添加「編輯」等詞語。 (使用編輯摘要,而不是記錄更改) – Flexo 2014-11-16 00:39:13

+0

我不知道你的意思我錯過了一些事情;我從字面上把他的「答案」中的文字複製到問題中。由於我不想完全重新提出他的問題,因此添加了「編輯」,所以其他用戶會理解這是一個進展。 (對於那些不希望通過編輯歷史來閱讀的臨時用戶來說更加清楚;「是第2或第15修訂版的第一個答案,現在很難說,因爲有引用編輯出來的文本。」唉,每個人都有自己的觀點關於如何編輯和使用編輯,以及所有這些都是100%脫離主題;))。 – JoeBrockhaus 2014-11-17 17:05:46

回答

1

我不知道有關此問題的任何白皮書,可能是因爲它沒有足夠複雜的主題來保證整個白皮書。

如果你每次使用它們的時間完全限定的表名(report.Customersweb.Customers,而不是僅僅Customers),那麼你不應該有任何問題,即使你有一個以上的架構相同的表名。無論如何,你應該這樣做,因爲它的性能優化(SQL不需要解析不明確的名字)。

我會強烈建議依靠用戶的「默認模式」,以確定哪些被選中表。當具有不同默認模式的用戶調用相同的代碼時,這隻會導致麻煩。

1

RDMSs將接受其他表和模式「絕對」的引用在查詢:

SELECT databasename.tablename.fieldname 
FROM databasename.tablename 
WHERE otherdatabase.othertable = ... 

毫無怨言。我不知道爲什麼有人想寫一篇關於這個問題的白皮書,因爲它相當於寫一篇關於不同城市中的某些人如何擁有相同名稱的論文(「哇,你知道嗎?約翰史密斯在紐約在洛杉磯?!?!?「)。

+0

好的,也許我應該讓我的問題更具體。假設我有一個數據庫服務於兩個應用程序,並且在應用程序之間存在一些資源交叉,但一些數據集存儲在單獨的模式中。 – 2010-10-20 08:10:54

+0

然後你在我的答案中作爲示例查詢。 'select schema1.tablename.field,schema2.tablename.field'。您可以在字段名稱的任何位置使用db.table.field類型表示法。 – 2010-10-20 17:38:17

0

如果要使用多個模式,則必須使用schema.objectname限定對象名稱。如果你不這樣做,SQL將假定你所調用的對象在dbo模式中。如果它在那裏找不到,它將會出錯。如果同名對象出現在dbo和另一個模式中,如果您沒有完全限定它,最終可能會選擇錯誤的對象。

相關問題