代码之家  ›  专栏  ›  技术社区  ›  jfrobishow

SQL Server 2005-多个数据库

  •  1
  • jfrobishow  · 技术社区  · 15 年前

    我们在工作中使用的是SQL Server2005,当开发开始时,决定创建多个数据库。例如,我们有一个数据库用于单个say dbindividual,另一个数据库用于翻译say dblocale。

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

    这会导致我们在多个数据库表和文件上使用join进行多个查询。

    例如:

    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 回复  |  直到 15 年前
        1
  •  6
  •   Keith Rousseau    15 年前

    当前的最佳实践是将同一个数据库与多个模式一起使用。每个模式都可以放在自己的文件上,然后可以轻松地备份。它还允许您强制使用外键约束。

    我们曾经使用像贵公司这样的多数据库模型,最近我们将所有新的开发都转换为只使用模式。我们这样做并没有失去任何东西,我们已经获得了强制使用我们的外文密钥的能力,这是巨大的。

        2
  •  5
  •   KM.    15 年前

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

        3
  •  3
  •   SQLMenace    15 年前

    为什么不使用模式和文件组来代替呢?这样,您仍然有分离,如果不想进行完整备份,您可以只还原和备份文件组。而且您也不会对引用完整性有任何问题,因为您可以拥有外键。

        4
  •  0
  •   HLGEM    15 年前

    我将指出,通过使用触发器,您可以跨数据库强制执行引用完整性,并且应该在当前的设计中这样做。也就是说,我喜欢Keith Rousseau和sqlemenace建议的具有多个模式模型的同一个数据库。