2010-02-04 98 views
1

我們在工作中使用SQL Server 2005,當開發開始時,決定創建多個數據庫。例如,我們有一個數據庫用於個人說dbIndividual,另一個用於翻譯說dbLocale。SQL Server 2005 - 多個數據庫

到目前爲止,這簡化了備份和潛在的恢復極大,因爲我們只需要備份,我們需要什麼(除非有一個方法來備份/恢復只是我們不知道的模式。)

這導致我們通過JOINS對多個數據庫表和文件進行多個查詢。

例如:

select customer.firstname, address.addressL1, addressType.value 
from dbIndividual.dbo.customer 
inner join dbIndividual.dbo.address 
    on fkCustomerID = iCustomerID 
inner join dbLocale.translation.addressType 
    on fkAddressTypeID = iAddressTypeID 
    and fkLangID = 1 

有什麼缺點呢?除了顯而易見的是,我們無法在多個數據庫中實施數據完整性。由於數據可能位於磁盤完全不同的部分,它會在加入時減慢速度嗎?

我所要求的理由是因爲我們正在重組我們的基礎設施,這是一個不斷涌現的潛在問題。

回答

6

當前的最佳做法是對多個模式使用相同的數據庫。每個模式可以放在自己的文件上,然後可以很容易地進行備份。它也允許你執行外鍵約束。

我們曾經使用多個數據庫模型,就像您的公司一樣,我們最近將所有新開發切換爲只使用模式。我們並沒有因此失去任何東西,並且獲得了執行我們的外鍵的能力,這是巨大的。

3

你爲什麼不使用SCHEMAs和FILEGROUPS來代替它?這樣你仍然有分離,如果你不想做完整的備份,你可以恢復和備份文件組。而且,由於可以擁有外鍵,所以對於參照完整性也沒有問題

+0

我實際上只是在發佈之前才知道模式,並認爲這是一個皮塔,你不能像其他產品一樣備份它們。隱約知道Filegroups是什麼,但現在我讀了你的文章,並測試了一個它會做我們想要的。 我想我們在加入如此多的不同數據庫時可能存在性能上的缺陷,這些數據庫可能位於無組織部分的完全不同的磁盤部分。 – jfrobishow 2010-02-04 20:05:59

5

外鍵是使用關係數據庫的主要原因之一。如果在需要時不能使用它們,因爲數據位於不同的數據庫中,那麼將表分割到多個數據庫中是不好的。

+3

不能同意更多! – PostMan 2010-02-04 19:48:26

0

我會指出你可以通過使用觸發器在數據庫間執行參照完整性,並且應該在你當前的設計中這樣做。也就是說,我喜歡Keith Rousseau和SQLMenace建議的具有多模式模型的同一個數據庫。

相關問題