我们正在使用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
这有什么缺点吗?除此之外,我们无法跨多个数据库强制实施数据完整性。加入时是否会降低速度,因为数据可能位于磁盘的完全不同的部分?
我要问的原因是因为我们正在重组我们的基础设施,这是一个不断涌现的潜在问题。
答案 0 :(得分:6)
目前的最佳做法是使用具有多个模式的相同数据库。每个模式都可以放在自己的文件中,然后可以轻松备份。它还允许您强制执行外键约束。
我们过去常常使用像您公司一样的多数据库模型,最近我们将所有新开发都改为使用模式。我们没有丢失任何东西,并且已经获得了执行我们的外键的能力,这是巨大的。
答案 1 :(得分:5)
外键是使用关系数据库的主要原因之一。如果你不能在需要时使用它们,因为数据在不同的数据库中,那么在多个数据库中拆分表是不好的。
答案 2 :(得分:3)
为什么不使用SCHEMAs和FILEGROUPS代替呢?这样您仍然可以分离,如果您不想进行完整备份,则可以仅恢复和备份文件组。因为您可以使用外键
,所以您的参照完整性也没有问题答案 3 :(得分:0)
我将指出您可以使用触发器在数据库之间强制实施参照完整性,并且应该在您当前的设计中执行此操作。那就是说,我喜欢Keith Rousseau和SQLMenace建议的具有多个模式模型的相同数据库。