SQL Server 2005 - 多个数据库

时间:2010-02-04 19:41:09

标签: database sql-server-2005 performance join

我们正在使用SQL Server 2005,在开发时,决定创建多个数据库。例如,我们有一个数据库用于个人说dbIndividual,另一个数据库用于翻译说dbLocale。

到目前为止,这已经简化了备份和潜在的恢复,因为我们只需要备份我们需要的东西(除非有一种方法来备份/恢复我们不知道的模式。)

这导致我们在多个数据库表和文件上使用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

这有什么缺点吗?除此之外,我们无法跨多个数据库强制实施数据完整性。加入时是否会降低速度,因为数据可能位于磁盘的完全不同的部分?

我要问的原因是因为我们正在重组我们的基础设施,这是一个不断涌现的潜在问题。

4 个答案:

答案 0 :(得分:6)

目前的最佳做法是使用具有多个模式的相同数据库。每个模式都可以放在自己的文件中,然后可以轻松备份。它还允许您强制执行外键约束。

我们过去常常使用像您公司一样的多数据库模型,最近我们将所有新开发都改为使用模式。我们没有丢失任何东西,并且已经获得了执行我们的外键的能力,这是巨大的。

答案 1 :(得分:5)

外键是使用关系数据库的主要原因之一。如果你不能在需要时使用它们,因为数据在不同的数据库中,那么在多个数据库中拆分表是不好的。

答案 2 :(得分:3)

为什么不使用SCHEMAs和FILEGROUPS代替呢?这样您仍然可以分离,如果您不想进行完整备份,则可以仅恢复和备份文件组。因为您可以使用外键

,所以您的参照完整性也没有问题

答案 3 :(得分:0)

我将指出您可以使用触发器在数据库之间强制实施参照完整性,并且应该在您当前的设计中执行此操作。那就是说,我喜欢Keith Rousseau和SQLMenace建议的具有多个模式模型的相同数据库。