我们有几个独立的数据库,它们具有共同的数据和代码,不是在数据库之间访问数据的意义上,而是在每个数据库中数据的含义相同的意义上,代码做同样的事情。
例子是:
- 配置设置(例如错误代码 50xxx、公司名称的样板文本等)。
- 执行常见任务的过程和函数(例如,将 CSV 字符串转换为表格、记录错误、根据错误代码格式化错误消息)。
- 表结构(例如用于数据库版本历史的表、用于记录错误的表)。除了列、约束和触发器之外,还有一些常见的过程和函数可以读取/写入数据。
- 查找表(例如,包含 2000-2100 之间日期的日期查找表)。这些类似于表结构,但数据库中的数据通常是相同的。在日期表的情况下,开始日期和结束日期是配置设置,由函数读取,然后由过程生成日期数据。所有这些操作在数据库之间都是通用的。
- 用户定义的类型(例如用于将表传递给函数的类型)。
出于维护和支持的原因,我认为错误代码、过程、函数和类型之类的东西在所有数据库中都有一个“单一事实点”而不是每个数据库中的不同事实是有意义的。
目前,每个数据库都有自己的所有内容副本,包括源存储库,我们独立维护它们。这远非理想,因为在 A 中修复程序而忘记将其放入 B 中太容易了,或者在 A 中添加错误代码,在 B 中添加相同的错误代码,但它们的含义不同,等等。
数据库不会同时更新,它们不一定驻留在相同的硬件上。在某些情况下,它们可以相互读取数据(如果存在另一个)。
是否有一种标准方法可以为跨多个数据库使用的数据/代码提供单点真实性?
除了Thomas的回答之外,对于常见的查找数据和通用函数之类的东西,您可以使用synonyms。
现在您的其他数据库可以将这些视为一流的本地对象,但您只需要维护一个副本。请注意,缺少某些功能,例如您无法设置外键。
在以前的生活中,我管理一个系统,我们将有大约 500 个数据库,每个实例上的架构几乎相同。我们使用同义词管理公共数据,并使用 Red-Gate SQL Compare an SQL Farms Combine(非常类似于 Multi-Script)部署必须在本地的代码。
三件事立刻浮现在脑海:
编辑:我是怎么忘记的,我不知道......我责怪清晨缺乏咖啡因。