Wil*_*Cau 3 sql-server-2008 sql-server
我们有几个独立的数据库,它们的数据和代码是相同的,不是在数据库之间访问,而是在每个数据库中数据意味着相同的事情,代码做同样的事情。
例子是:
出于维护和支持的原因,我认为对于错误代码、过程、函数和类型之类的东西来说,在所有数据库中拥有一个“单一事实点”是有意义的,而不是每个数据库中都有一个不同的事实。
目前,每个数据库都有自己的所有副本,包括源存储库,我们独立维护它们。这很不理想,因为在 A 中修复一个过程而忘记将它放在 B 中太容易了,或者在 A 中添加错误代码而在 B 中添加相同的错误代码但它们意味着不同的东西,等等。
数据库不会同时更新,它们不一定驻留在相同的硬件上。在某些情况下,它们可以相互读取数据(如果存在另一个)。
是否有一种标准方法可以为跨多个数据库使用的数据/代码提供单一事实点?
除了Thomas的回答,对于常见的查找数据和泛型函数之类的东西,您可以使用同义词。
USE CentralDB;
GO
CREATE TABLE dbo.Dates(...);
GO
USE OtherDB;
GO
CREATE SYNONYM dbo.Dates
FOR CentralDB.dbo.Dates;
Run Code Online (Sandbox Code Playgroud)
现在您的其他数据库可以将这些视为一流的本地对象,但您只需要维护一个副本。请注意,缺少某些功能,例如您无法设置外键。
在以前的生活中,我管理过一个系统,其中每个实例上都有大约 500 个具有几乎相同架构的数据库。我们使用同义词管理公共数据,并使用 Red-Gate SQL 比较和 SQL 农场组合(非常类似于多脚本)部署必须在本地的代码。